IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Haskell Discussion :

Pourquoi utiliser Haskell?


Sujet :

Haskell

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Pourquoi utiliser Haskell?
    Haskell est utilisé dans plusies domaines, notamment le traitement d'images. Qu'est-ce que Haskell a de plus que les autres langages de programmations?

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Je ne pense pas que l'angle d'approche de la question soit le bon car théoriquement les langages généralistes (C, C++, Java, C#, Python, Perl,...) sont Turing complet, est donc peuvent "tout" exprimer. Dans ce sens, Haskell n'apporte rien de plus.

    Par contre ce qui est intéressant, c'est l'approche utilisée par Haskell (ou plus largement la programmation fonctionnelle).

    Au lieu d'imposer un ensemble d'instructions à la suite (chacune dépendant de l'autre chronologiquement), on va plutôt "brancher" un résultat à l'entrée d'un autre calcul (composition).

    C'est très déclaratif et la conséquence directe est que le code est très expressif (Il y a pas de code de contexte, comme l'instanciation de variables ou d'affectation).

    Quand la programmation orientée objet prône l'encapsulation (et donc la possibilité d'avoir des effets de bord cachés), Haskell préfère la transparence référentielle => le résultat du programme ne change pas si on remplace une expression par une expression de valeur égale. Ce qui interdit les mises à jours destructrices ou encore des fonctions qui ne retournent aucune valeur (void).

    Cette propriété permet de faciliter grandement la programmation parallèle (on a la garantie que la donnée ne sera pas altérée dans un autre thread).

    Le traitement d'image revenant à beaucoup de calculs matriciels. Ces calculs sont extrêmement parallélisables, domaine où Haskell est très efficace.

    Une autre particularité d'Haskell est son système de typage (le fameux Hindley-Milner) qui permet en outre d'encoder la complexité dans la signature du type.

    Par exemple, il est possible en Haskell de garantir à la compilation que le handle d'accès à la base de données ne sera pas utiliser après avoir été libéré.

  3. #3
    Membre actif
    Avatar de Ptival
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 70
    Points : 276
    Points
    276
    Par défaut
    Je crois que tu vas l'assommer avec trop de notions inconnues là !

    Citation Envoyé par Yo Eight Voir le message
    Une autre particularité d'haskell est son système de typage (le fameux Hindley-Milner) qui permet en autre d'encoder la complexité dans la signature du type.
    Je ne comprends pas moi-même ce que tu entends par "encoder la complexité dans la signature de type".

    EDIT : à vrai dire, c'est vrai qu'on parle du système de types Hindley-Milner. La vérité est dure à trouver... :-)

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Je suis d'accord avec toi, mais par abus de langage, il est souvent associé au système de typage.

    Pour le second point, je te passe lien du package sur hackage:

    Resource (Conduit)

    Y'a d'autres exemples d'encodage de la complexité dans le typage très simple. Par exemple si on veut traiter une liste garantit à 100% d'avoir au moins un élément

    Code Haskell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    data NonEmptyList a = NonEmptyList { neHead :: a, neTail :: [a] } 
    ...
    process :: NonEmptyList a -> b -- pas besoin de vérifier si la liste est vide
    process = ...

    Y'a également la monade ST qui te garantie dès la compilation que son état interne n'est pas visible par le reste du programme.

    C'était ce genre de chose dont je faisais référence

    À noter que cette description n'a rien d'officielle. Je l'ai souvent vu utilisée par certains membres de la communauté Haskell comme Tony Morris ou encore Edward Kmett

  5. #5
    Membre actif
    Avatar de Ptival
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 70
    Points : 276
    Points
    276
    Par défaut
    Ok. Le mot complexité est également maladroit ici, je pensais que tu parlais de complexité algorithmique.

    Pour répondre au post original, je pense également que la question est malvenue.

    Haskell favorise une approche fonctionnelle pure, propose diverses approchess plus ou moins efficaces pour le parallélisme et la concurrence, et pousse vers les innovations dans le domaine des langages de programmation.

    Il pourra plaire à certains et déplaire à d'autres. Certaines tâches sont facilitées (typiquement, ce qui se prête bien au paradigme fonctionnel), d'autres sont moins évidentes (la gestion de l'empreinte mémoire, l'anticipation des propriétés du code généré, les algorithmes fortement impératifs).

    C'est avant tout un compromis, un langage très expressif mais un peu plus abrupt que ses concurrents "mainstream".

    Je dirais que c'est un bon langage pour apprendre à penser autrement, à sortir les yeux des ornières de l'impératif pour découvrir d'autres modes de fonctionnement, et s'armer ainsi de nouveaux outils de réflexion pour approcher des problèmes complexes. (une sorte de super design pattern ? :-d)

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Août 2008
    Messages : 282
    Points : 939
    Points
    939
    Par défaut Haskell or not Haskell... FP or not FP...
    Vaaaaste débat, mais que tu peux ne pas restreindre à Haskell.
    Le principal me semble avoir été dit.

    Cela dit, si tu veux continuer à réfléchir, tu trouveras plein de choses sur dvp et via ton moteur de recherche préféré. Je suis tombé sur des articles relativement récents (même si des articles de 10 ans d'âge sont toujours valables).
    Dans le premier, Haskell s'invite à partir de réflexions sur le C++. Ce gars a d'ailleurs un blog intéressant, et s'est mis à participer aux groupes de travail C++0x (ce n'est pas un débutant).

    Dans le billet que je cite, il y a un renvoi sur un article intéressant qui est plus de l'ordre de impératif / fonctionnel, dans une perspective d'évolution. Avec "évolution" comme dans "Darwin". Intéressant àmha.
    poke 1024,0; poke 214,214

Discussions similaires

  1. Pourquoi utiliser XML?
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 23
    Dernier message: 12/09/2008, 16h33
  2. Réponses: 3
    Dernier message: 19/12/2005, 13h39
  3. [POO] Pourquoi utiliser les classes ?
    Par GregPeck dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 15h18
  4. [D7] pourquoi utiliser un DBGrid ?
    Par raoulmania dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/11/2005, 14h37
  5. Pourquoi utiliser std::less lorsque l'on réclame '<
    Par YéTeeh dans le forum SL & STL
    Réponses: 2
    Dernier message: 09/05/2005, 21h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo