Précédent   Forum du club des développeurs et IT Pro > Autres langages > Langages fonctionnels > Haskell
Haskell Forum d'entraide sur la programmation en langage fonctionnel Haskell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/05/2012, 21h05   #1
LAYCI
Invité de passage
 
Femme
Étudiant
Inscription : 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?
LAYCI est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 13h19   #2
Yo Eight
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 89
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 : 89
Points : 287
Points : 287
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é.
Yo Eight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 17h16   #3
Ptival
Membre actif
 
Avatar de Ptival
 
Homme Valentin Robert
Étudiant
Inscription : juin 2004
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Valentin Robert
Âge : 24
Localisation : Etats-Unis

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2004
Messages : 70
Points : 172
Points : 172
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... :-)
Ptival est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 19h10   #4
Yo Eight
Membre confirmé
 
Homme
Ingénieur développement logiciels
Inscription : mai 2009
Messages : 89
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 : 89
Points : 287
Points : 287
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
Yo Eight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 21h08   #5
Ptival
Membre actif
 
Avatar de Ptival
 
Homme Valentin Robert
Étudiant
Inscription : juin 2004
Messages : 70
Détails du profil
Informations personnelles :
Nom : Homme Valentin Robert
Âge : 24
Localisation : Etats-Unis

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2004
Messages : 70
Points : 172
Points : 172
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)
Ptival est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2012, 21h20   #6
AdmChiMay
Membre du Club
 
Homme Jean-Paul
Inscription : août 2008
Messages : 21
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 : 21
Points : 54
Points : 54
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.
AdmChiMay est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h59.


 
 
 
 
Partenaires

Hébergement Web