• [^] # Re: apprendre la programmation fonctionnelle

    Posté par . En réponse au journal Language F# - Du microsoft, mais il y a un rapport avec le libre !. Évalué à 2.

    je trouve que l'on peut faire plus ou moins la même chose dans les langages fonctionnels [...], objets , [...] et impératifs (C...)


    On peut faire exactement les mêmes programmes dans tout ces langages, ils sont tous Turing complets. En revanche pour un problème donné, certains langages sont plus adaptés que d'autres.Pour le concours de programmation ICFPC [1], on devait programmer une machine virtuelle. Nombreux sont ceux qui ont commencé avec leur langage préféré puis se sont rabattu vers le C (où du moins ont réécris une grande partie en C pour l' interfacer avec leur langage). En effet les autres langages donnaient des machines virtuelle bien trop lentes.

    Le problème était clairement de nature impérative : gérer la mémoire à la main, interpréter les séquences d'instruction, etc ... En C, un malloc puis une gestion directe de la mémoire par des pointeur étaient parfait alors que dans les langages qui gèrent eux même la mémoire il fallait le simuler par une structure de donnée, d'où un surcoût. Le transtypage entre entiers et pointeurs était aussi très pratique en C. Bref pour CE problème le choix du C étaient judicieux.

    Notons aussi que pour certains langages, un bon nombre de leur bibliothèques viennent d'un interfaçage avec une bibliothèque en C comme GTK, SDL, etc ...

    Toutefois on ne code pas de machine virtuelle tous les jours et rares sont les programmes qui demandent de gérer à la main la mémoire autant qu'une VM. On a plus souvent besoin de structures de données (listes, arbres, etc ...) et là utiliser une implémantation de ses structures en C ne sera pas plus efficace qu'en fonctionnel, object, ...

    Utiliser des langages de haut niveau à de nombreux avantages : gestion automatique de la mémoire, typage, objects, exceptions, ordre supérieur, etc ... Ca évite des bugs, les programmes sont plus faciles à lire et à écrire. Certes c'est aussi faisable en C, mais simuler des des exception en C ne sera jamais aussi simple qu'un "try ... with ..." en OCaml et pas forcément plus efficace.

    Un serveur web ou un window manager n'ont pas de contraintes spécifiques sur la gestion mémoire, ils peuvent être codés aussi efficacement en haut niveau, la facilité en plus. Pour les jeux, l'approche de Slune est intéressante : le moteur graphique en C pour les besoin en performance et le reste du jeu en python pour les facilités du langage.

    [1] http://icfpcontest.org/