Faut-il migrer de JavaScript vers PureScript ? Oui
Car JavaScript serait très limité pour la programmation fonctionnelle, selon Alex Kelley

Le , par Bill Fassinou

75PARTAGES

13  0 
Pourquoi les programmeurs semblent-ils détester JavaScript ? Dans un sondage effectué récemment au sein du club, un peu plus de 52 % des développeurs ont désigné le JavaScript comme le langage de programmation qu’ils détestent le plus en 2019. Les avis étaient divers, la plupart évoquant un débogage difficile avec le langage, sa forme non typée, une façon « stupide » de gérer l’orientée objet et le fait que ce dernier permet d’ajouter facilement des bogues à son programme. Le JavaScript commence-t-il donc à être déprécié de tous ?

En se basant sur un autre aspect de la programmation, la programmation fonctionnelle (PF), Alex Kelley, développeur Web, a expliqué cette semaine que le JavaScript est très limité sur ce point et donc, qu’il faudrait penser à migrer vers un autre langage, PureScript. Selon lui, bien que le JavaScript reprenne assez bien certaines abstractions de la programmation fonctionnelle, ce dernier n’est pas du tout adapté pour cette architecture de travail. Si vous décidez quand même de faire de la programmation fonctionnelle avec le JavaScript, vous vous rendrez vite compte, dit-il, qu’il est facile de s’égarer, puis vous retrouvez vos habitudes anciennes et impératives.

Mais pourquoi parle-t-il de la programmation fonctionnelle ? Selon lui et beaucoup d’autres, la programmation fonctionnelle est en train de devenir la nouvelle tendance chez les programmeurs. Il s’agit en effet d’un paradigme de la programmation de type déclaratif qui considère le calcul en tant qu'évaluation de fonctions mathématiques. Comme le changement d'état et la mutation des données ne peuvent pas être représentés par des évaluations de fonctions, la programmation fonctionnelle ne les admet pas, au contraire elle met en avant l'application des fonctions, contrairement au modèle de programmation impérative qui met en avant les changements d'état. La programmation fonctionnelle s'affranchit de façon radicale des effets secondaires (ou effets de bord) en interdisant toute opération d'affectation.


Ainsi, un langage fonctionnel est donc un langage de programmation dont la syntaxe et les caractéristiques encouragent la programmation fonctionnelle. Alors que l'origine de la programmation fonctionnelle peut être trouvée dans le lambda-calcul, on estime que le langage fonctionnel le plus ancien est Lisp, créé en 1958 par McCarthy. Lisp a donné naissance à des variantes telles que Scheme (1975) et Common Lisp (1984) qui, comme Lisp, ne sont pas ou peu typées. Des langages fonctionnels plus récents tels ML (1973), Haskell (1987), OCaml, Erlang, Clean et Oz, CDuce, Scala (2003) ou F# sont fortement typés. Le langage PureScript s'inscrit également dans cette dynamique.

De plus, le site Web du langage lui loue les avantages suivants : il offre la possibilité de compiler en JavaScript lisible et permet de réutiliser facilement le code JavaScript existant, il possède une vaste collection de bibliothèques pour le développement, il vous permet de construire des applications du monde réel en utilisant des techniques fonctionnelles et des types expressifs (tels que les types de données algébriques et correspondance de modèles, un polymorphisme de lignes et enregistrements extensibles, un polymorphisme de rang supérieur). Alors, cela fait-il du langage PureScript un remplaçant du JavaScript sur tous les points ou seulement du point de vue fonctionnel ?

« PureScript me tient vraiment à cœur et il est devenu mon langage fonctionnel préféré au cours des six derniers mois. Cela ressemble vraiment à une construction faite à la base avec Haskell avec certaines améliorations modernes (traitement des chaînes, enregistrements, compilation en JavaScript lisible). Vous pouvez facilement gérer les dépendances afin d’incorporer l’ensemble absolument minimal de packages nécessaires à l’exécution de votre projet, et je pense que sa sécurité est inégalée », a déclaré un utilisateur pour répondre à la question.

Néanmoins, Alex Kelley reconnaît que le JavaScript prend en charge certaines des fonctionnalités les plus importantes de FP, notamment les fonctions et les fermetures de première classe et anonymes. Toutefois, a-t-il continué, JavaScript doit desservir plusieurs maîtres, y compris la programmation impérative et orientée objet. En conséquence, l'utilisation de JavaScript pour la PF est soumise à des limitations et à des compromis. En particulier, il manque un système de types statique, une pureté forcée et une immuabilité.

Certaines de ces lacunes peuvent être atténuées en ajoutant un vérificateur de type statique comme Flux, des collections immuables et des bibliothèques d'abstraction. Cela signifie que la programmation fonctionnelle en JavaScript est principalement réalisée par convention, souvent pavée avec les « pansements » sus-cités. Un programmeur JavaScript fonctionnel doit rester vigilant à tout moment pour créer des fonctions pures qui évitent les effets secondaires, ce qui met trop de charges cognitives sur le programmeur et finit par gêner le codage de votre application. C’est à ce moment qu’intervient PureScript, a-t-il souligné.

Le langage PureScript vous offre des applications côté client et côté serveur. Selon Alex Kelley, vous y trouverez également une représentation de toutes les constructions de langage FP que vous avez probablement déjà entendues ou lues, y compris la curryfication (currying), la correspondance de modèle, l’optimisation des appels de queue et les types d'ordre supérieur et élevé. Il faut noter qu’en informatique et plus précisément en programmation fonctionnelle, la curryfication est la transformation d'une fonction à plusieurs arguments en une fonction à un argument qui retourne une fonction sur le reste des arguments.

La curryfication permet de créer des fonctions pures. L'opération inverse est possible et s'appelle la décurryfication. Le terme vient du nom du mathématicien américain Haskell Curry, bien que cette opération ait été introduite pour la première fois par Moses Schönfinkel. Enfin, a décrit Alex Kelley, PureScript n'a pas de système d'exécution pour ajouter à votre empreinte de téléchargement et en plus, il existe un FFI (foreign function interface) simple et très performant pour JavaScript. Donc, si vous ne trouvez pas encore de support pour les fonctions de votre module JavaScript préféré, il n’est pas difficile de les inclure vous-même, a-t-il conclu dans sa description.

Quelqu’un d’autre ajoute que le JavaScript n’est pas un langage sûr, car il compile directement sur la machine de l’utilisateur donc il peut être utilisé pour de mauvaises intentions. Il souligne également son manque d’instabilité et son manque d’efficacité. Dans le premier cas, il estime que JavaScript est interprété et lu différemment par les différents moteurs JS et en retour, vous avez autant de lectures que de moteurs. Dans le deuxième cas, il explique que tous les types de variables peuvent être stockés dans une seule et même variable et les points-virgule sont obligatoires, mais inutiles. « D’autres langages existent et sont nettement mieux que le JavaScript », a-t-il conclu.

Cela dit, d’autres par contre ne sont pas favorables à laisser tomber le JavaScript. « Le JavaScript est le langage le plus connu et le plus utilisé. Du coup, statistiquement c’est celui qui fait le plus parler de lui. Cela traduirait peut-être le fait que la plupart des développeurs ne sont pas aussi bons que ça. Et tous les autres arguments anti-JS sont exactement dans le même genre, a chaque fois c’est issue d’un anti-pattern, d’une mauvaise utilisation », déclaré l’un d’entre eux.

Source : Billet de blog

Et vous ?

JavaScript ou PureScript, lequel des deux langages choisissez-vous ? Pourquoi ?
PureScript pourra-t-il remplacer le JavaScript ?
Connaissez-vous une autre alternative au PureScript pour la programmation fonctionnelle ?

Voir aussi

Sondage : quels sont les langages de programmation que vous détestez le plus en 2019 ? Pourquoi ?

Le langage JavaScript est-il responsable de la lenteur des sites Web de nos jours ? Oui selon un expert

AlaSQL.js, une base de données SQL JavaScript pour le navigateur et Node.js, est désormais disponible. Il serait rapide et très flexible

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de eleydet
Membre confirmé https://www.developpez.com
Le 23/05/2019 à 9:31
Bonjour,

Il est écrit :
Pourquoi les programmeurs semblent-ils détester JavaScript ?
Le JavaScript laisse rarement indifférent : Bien souvent, on l'adore ou on le déteste. Bien des programmeurs trouvent ce langage merveilleux.
Avatar de SpaceFrog
Rédacteur/Modérateur https://www.developpez.com
Le 23/05/2019 à 10:01
Allez petit pari sur l'avenir ...
Comme toutes les autres tentatives de remplacement de JS... flop dans 6 mois ..
Avatar de Drowan
Membre éprouvé https://www.developpez.com
Le 23/05/2019 à 10:04
Le vrai problème de ce genre de sondage est qu'il révèle surtout quels languages sont les plus populaires et c'est un peu tout.
Javascript étant un des language les plus connus et les plus pratiqué, il est logique qu'il possède le plus de programmeurs mécontents et de programmeurs contents.
En prenant le sondage, On pourrait se dire que Haskell est aimé puisque peu de gens on voté pour dire qu'il ne l'aimait pas, mais je soupçonne plutôt que peu de gens le connaisse et donc n'ont pas voter pour lui faute de pouvoir émettre un avis.

Il faudrait pouvoir répondre par Aime, n'aime pas, ne connait pas. Pour pouvoir plutôt présenté la proportion de programmeur connaissant un langage mais ne l'appréciant pas.
Avatar de Daïmanu
Membre chevronné https://www.developpez.com
Le 23/05/2019 à 10:13
Ma question peut paraître naïve, mais vu qu'à ma connaissance seul le javascript permet de scripter les pages web, peut-être il serait judicieux de permettre au navigateur d'interpréter d'autres langages ?
À partir du moment ou ce remplaçant sait manipuler le DOM et d'autres APIs, et qu'il tourne dans une sandbox, ça doit être jouable ?
Ça permettrait de programmer en Typescript, en Python ou autre.
Et ça serait plus constructif que cet éternel débat sur la valeur du javascript.
Avatar de koyosama
Membre éprouvé https://www.developpez.com
Le 23/05/2019 à 10:14
Je croyais qu'on avait déjà la réponse avec Web Assembly. Juste une question de temps, non.
Avatar de NBoulfroy
Membre confirmé https://www.developpez.com
Le 23/05/2019 à 11:53
"Nieu nieu nieu, je suis nul en JS alors c'est forcément un langage à haïr" est l'argument le plus fréquent que j'ai vu à ce jour avec les développeurs.

Au départ, je supportais pas ce langage, j'ai mis le nez dedans par la force et au final, j'adore : c'est ultra intéressant de développer en JS Vanilla (à mort jQuery !) bien que j'admets qu'il souffre d'une lourdeur importante par moment (m'enfin, il y a des astuces pour ça).

J'avoue que la notion de Prototype est pas évidente mais quand même, vous pouvez pas dire que c'est "nul" et "insupportable" si vous avez pas au moins fait du forcing et pondu un système AJAX & gestion formulaire en JS Vanilla via Prototype à mes yeux (c'est un exemple parmi d'autres possibles évidemment).

Il faut désormais que je vois la question de l'injection de modules dans un JS Vanilla pour avoir quelque chose de très intéressant (modulation selon la librairie CSS utilisée parce que les classes entre Bootstrap, Fondation & Materialize (c'est des exemples) ne sont hélas pas les mêmes).
Avatar de imag1
Membre à l'essai https://www.developpez.com
Le 23/05/2019 à 12:43
le problème de JavaScript est que le typage est extrêmement faible, on peut tout mettre dans une variable, d'un int à une fonction en passant par un objet.
on ne peu pas se reposer sur le compilateur pour voir les erreurs.

cela demande donc une hygiène de dev implacable.
Avatar de KsassPeuk
Membre confirmé https://www.developpez.com
Le 23/05/2019 à 12:47
Citation Envoyé par imag1 Voir le message
le problème de JavaScript est que le typage est extrêmement faible, on peut tout mettre dans une variable, d'un int à une fonction en passant par un objet.
Oui, c'est l'extreme late binding of everything cher à Kay. Ça a ses avantages et ses inconvénients.
Avatar de mh-cbon
Membre averti https://www.developpez.com
Le 23/05/2019 à 13:41
pourquoi pas..... Dans son argumentaire je n'ai pas trouvé de justifications certaines que le pure fonctionnel produira moins de bug... Mais pourquoi pas le passer sous les fourches caudines de plusieurs centaines de milliers de dév qu'on soit fixé une bonne foi pour toutes.
Avatar de LordJerem
Membre du Club https://www.developpez.com
Le 23/05/2019 à 13:55
peut-être pour faire de la programmation fonctionnelle, sinon non
Contacter le responsable de la rubrique JavaScript

Partenaire : Hébergement Web