• # Sympa ton journal

    Posté par (site web personnel) . En réponse au journal Des vieilles bases d'unix à la hype reactive actuelle. Évalué à 8. Dernière modification le 07 mars 2018 à 00:32.

    Le premier point que je voudrais ajouter, c'est que NodeJS utilise libuv qui a été développé pour et est utilisée pour plein d'autres langages. En plus de langages relativement classiques on la trouve pour OCaml et Lisp ou la version de haut niveau par exemple.

    Le gros problème de l'approche de NodeJS est qu'elle propose une approche de la programmation événementielle basée sur des callbacks et qu'on finit invariablement par avoir du code spaghetti assez indigeste, pas super facile à maintenir – et pas non plus super facile à mettre au point. Un des gros problèmes de la programmation par callbacks est qu'elle inverse l'ordre de composition des fonctions. Au lieu d'écrire Applique f au résultat de g on écrit Fait g puis donne son résultat à f ce qui lorsqu'on empile les appels de fonctions anonymes pour produire la pyramide du destin où le code se déplace plus rapidement vers la droite que vers la complétion de sa tâche. ;)

    // La pyramide du destin (merci à kriskoval)
    step1(function (value1) {
     step2(value1, function(value2) {
     step3(value2, function(value3) {
     step4(value3, function(value4) {
     // Do something with value4
     });
     });
     });
    });
    

    En pratique le step1 est toujours un truc un peu banal du type "print" ou "exit" et le biscuit (les variables intéressantes et les appels de fonction intéressants) sont enterrés dans les niveaux inférieurs – même avec de l'habitude c'est assez malheureux et on a du mal à suivre le code ni à retrouver les parties intéressantes.

    Pour retomber sur ses pattes il y a la programmation par monades qui permet de recomposer les traitements "dans le bon sens" – que l'on retrouve sous plusieurs formes de façon parfois un peu cachée comme les promises.