1 pièce(s) jointe(s)
Faut-il migrer de JavaScript vers PureScript ? Oui
Faut-il migrer de JavaScript vers PureScript ? Oui,
car, JavaScript serait très limité pour la programmation fonctionnelle, selon Alex Kelley
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 ?
:fleche: JavaScript ou PureScript, lequel des deux langages choisissez-vous ? Pourquoi ?
:fleche: PureScript pourra-t-il remplacer le JavaScript ?
:fleche: Connaissez-vous une autre alternative au PureScript pour la programmation fonctionnelle ?
Voir aussi
:fleche: Sondage : quels sont les langages de programmation que vous détestez le plus en 2019 ? Pourquoi ?
:fleche: Le langage JavaScript est-il responsable de la lenteur des sites Web de nos jours ? Oui selon un expert
:fleche: 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
Au bon endroit au bon moment
Toujours la même chose avec JavaScript : de nombreuses critiques, mais au final il est et sera toujours là, encore plus vivant que jamais.
La chance de JavaScript aura été d'être là au bon endroit et au bon moment. Nous sommes au carrefour des années 2000 et 2010. Steve Jobs puis Mozilla ont lancé la chasse aux sorcières consistant à éradiquer les plugins de nos navigateurs Web. Loin de moi l'idée de relancer ces débats là, ce n'est pas le sujet ni mon intention. Toujours est-il que sans Flash, ni Java, ni Silverlight, ni tous les autres, que reste-t-il aux développeurs pour faire du Développement Web côté client ? La réponse est très simple : "JavaScript, et rien que JavaScript". JS a beau être critiqué, toujours est-il que ça reste le seul langage tournant sur nos navigateurs Web et qu'il sera incontournable tant que ça sera le cas.
Toutes les joyeusetés genre CoffeeScript, TypeScript, PureScript ne font au final qu'écrire du JS à la place du développeur, qui peut ainsi se vanter de ne pas s'être sali les mains avec ça. JS n'est pas aussi cryptique que de l'Assembleur. Faut pas déconner non plus.
JS ne cédera sa place que lorsque d'autres langages seront interprétés par les navigateurs, ou plutôt massivement interprétés par tous les navigateurs. Google avait commencé quelque chose sur ce plan là avec Dart mais ils étaient seuls et ont échoué.
Après reste la question de PureScript. Je trouve les arguments foireux :
Citation:
- Pourquoi migrer vers PureScript ?
- Parce que c'est de la programmation fonctionnelle !
- Pourquoi de la programmation fonctionnelle ?
- Parce que c'est à la mode !
En 2020 on aura le même article avec du C++ pour du Web côté client parce que la programmation fonctionnelle c'est "so 2019" et que la POO c'est "so 2020". :aie:
Cela étant je reconnais que le monopole du trio HTML/CSS/JS sur navigateurs est problématique, tant pour les paradigmes de développement " " "backend" " " côté client que pour la conception d'interface.
Parce que c'est pareil avec la conception d'interface. Le couple HTML/CSS n'est pas non plus ce qui se fait de mieux pour construire des interfaces. Du moins par pour tout le monde.
Citation:
Envoyé par
Daïmanu
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.
Idée de génie sur le papier, mais comment intègres-tu les langages ?- Soit le navigateur le supporte nativement et il n'y a rien à faire.
- Soit le navigateur ne le supporte pas nativement. Dans ce cas là il te faut étendre le navigateur, donc l'affubler d'un plugin. Or je rappelle que les greffons sur les navigateurs Web c'est tabou depuis le début des années 2010. Donc pas possible.
Il y aura également la question de qui couvre quoi. Un langage sera supporté par un navigateur mais pas par un autre. Sans parler de l'OS sur lequel tourne ton navigateur, ni des versions des navigateurs (mais ceci tend à disparaître, enfin je pense). Est-ce que les gens ont envie de revenir à "l'époque Flash" pour les greffons, au delà des problèmes de performances, de stabilité et de consommations de ressources ? Je ne pense pas. :aie: Est-ce que les développeurs ont envie de revenir à la bonne vieille époque où certaines choses étaient supportées par certains navigateurs et pas par d'autres, avec par exemple des sites qui boguent parce qu'ils utilisent du Python et parce que le navigateur du client ne comprend pas ce qui est écrit entre balises <script type="application/x-python"> ? Qui veut un nouveau VBScript, ou plutôt plein de nouveaux VBScript ? :aie: