Soutenez-nous
Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Invité de passage
    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 : 2
    Points
    2

    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 éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2009
    Messages
    98
    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 : 98
    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 Valentin Robert
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Nom : Homme Valentin Robert
    Âge : 25
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 70
    Points : 172
    Points
    172

    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 éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2009
    Messages
    98
    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 : 98
    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 :
    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 Valentin Robert
    Étudiant
    Inscrit en
    juin 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Nom : Homme Valentin Robert
    Âge : 25
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2004
    Messages : 70
    Points : 172
    Points
    172

    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 habitué
    Homme Profil pro Jean-Paul
    Inscrit en
    août 2008
    Messages
    49
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean-Paul
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : août 2008
    Messages : 49
    Points : 132
    Points
    132

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •