URL: https://linuxfr.org/users/nono/journaux/explorer-des-langages-de-programmation-edition-2020 Title: Explorer des langages de programmation - édition 2020 Authors: Bruno Michel Date: 2020年04月26日T21:46:15+02:00 License: CC By-SA Tags: langage Score: 44 Cher nal, j'avais publié il y a quelques années [un journal sur différents langages de programmation peu connus](https://linuxfr.org/users/nono/journaux/et-si-javascript-allait-droit-dans-le-mur). La motivation pour creuser ces langages venait, à l'époque, du ras le bol du JS. Aujourd'hui, avec le confinement, j'ai de nouveau envie d'apprendre et découvrir des langages de programmation, disons voir, exotiques. Mais, tout d'abord, faisons un rapide tour des langages cités à l'époque et de ce qu'ils sont devenus. * Crystal : le langage se porte bien, même s'il n'a pas encore atteint la version 1.0 et qu'il reste encore assez confidentiel. C'est marrant de voir les 3 axes majeurs annoncés pour Ruby 3 : performance, concurrence et typage statique. Crystal coche les trois (pour la partie concurrence, ce n'est pas encore tout à fait sec, mais c'est déjà bien avancé). Honnêtement, j'ai du mal à comprendre que pas plus de rubyistes ne s'intéressent à Crystal. J'ai vraiment l'impression que Matz s'est un peu perdu ses dernières années et n'arrivent plus à proposer des évolutions intéressantes au langage, et à l'inverse, Crystal progresse bien avec des moyens pourtant bien plus limités. * Pony : le langage se veut très ambitieux et il paraît que ça continue d'avancer. Vu de loin, j'ai quand même l'impression que ça coince un peu et que son quart d'heure de gloire est passé. * Oden : RIP, le développement a été arrêté et le site web du langage ne renvoie plus qu'une 404. * Elm : j'ai un avis très partagé. D'un côté, le compilateur a fait de très gros progrès et ça me semble être une alternative viable au JS pour le code dans les navigateurs. De l'autre, la core team a l'air de ne pas réussir à grandir, et il y a régulièrement des [polémiques](https://dev.to/kspeakman/elm-019-broke-us--khn), des [départs](https://lukeplant.me.uk/blog/posts/why-im-leaving-elm/), et des incompréhensions. Au final, j'ai l'impression que ces ratés feront que le langage ne pourra jamais passer à la vitesse supérieure. * Elixir : le langage conserve son attrait (notamment grâce au framework [Phoenix](https://www.phoenixframework.org/)), c'est stable et ça tourne. Et, voici maintenant les langages que j'ai commencé à regarder et à me documenter un peu dessus. Le but est d'en choisir un pour l'apprendre plus en profondeur et pourquoi pas y contribuer un peu. * [Idris2](https://idris2.readthedocs.io/) est une sorte d'Haskell en plus poussé. La version 2 s'appuie sur la « [Quantitative Type Theory](https://bentnib.org/quantitative-type-theory.html) ». Ça permet d'écrire des mettre des nombres dans les types, comme : ```haskell append : Vect n a -> Vect m a -> Vect (n + m) a append xs ys = case xs of [] => ys (x :: xs) => x :: append xs ys ``` Je n'ai pas vraiment réussi à comprendre ce que ça apportait en pratique pour les développeurs. Et je n'ai pas été spécialement été attiré par ce que j'ai vu. C'est probablement très intéressant, mais je ne dois pas être la bonne personne pour ça. * Prolog et plus particulièrement [Scryer-Prolog](https://github.com/mthom/scryer-prolog) : Prolog est un ancien langage (grosso modo, il est sorti en même temps que le C) mais il s'appuie sur un paradigme peu répandu, la programmation logique. Je suis assez curieux de voir ce que ça peut donner quand on creuse un peu plus que les tutoriels de base (ou le cours de 2h que j'avais pu avoir dessus quand j'étais en école d'ingénieur). D'ailleurs, ça a l'air de revenir un petit peu à la mode, j'en ai même vu dans [yarn 2](https://yarnpkg.com/features/constraints). * [Zig](https://ziglang.org/) est une sorte de C moderne. Contrairement à Go, il peut servir à faire des bibliothèques pouvant être utilisés dans d'autres langages de programmation. Et contrairement à C++/Rust/D, il a gardé la simplicité du C. Il y a notamment une phrase de la documentation qui m'a marqué : « _Zig competes with C instead of depending on it_ ». Dans les fonctionnalités que j'ai trouvé intéressantes, on retrouve : - la possibilité d'utiliser des bibliothèques en C sans avoir à écrire de bindings/FFI (on importe directement le fichier `.h`) - la séparation très claire entre ce qui est exécuté à la compilation et ce qui est exécuté au runtime, tout en ayant la possibilité d'utiliser le même langage pour les deux (j'imagine assez bien pouvoir initialiser des valeurs complexes à la compilation ou inclure un dictionnaire de compression) - les structures de données génériques sont gérées comme des fonctions qui prennent un type et renvoie la structure pour ce type. - et des fonctionnalités que l'on peut retrouver dans d'autres langages modernes : defer, async-await, une gestion des erreurs proche de ce que l'on peut trouver en Rust, etc. * [Gleam](https://gleam.run/) : c'est un langage très jeune, qui propose du typage statique pour la machine virtuelle d'Erlang (BEAM). Je suis fasciné par [OTP](https://en.wikipedia.org/wiki/Open_Telecom_Platform), mais je n'ai jamais réussi à aller très loin. Même en faisant fi de la syntaxe bizarre, Erlang (et Elixir) ne propose que du typage dynamique, et j'ai beaucoup de mal à m'intéresser à quelque chose qui vise à rendre des programmes plus résistants aux erreurs et qui, dans le même temps, augmente le risque d'erreurs à cause du typage dynamique. Gleam propose un langage simple, avec une syntaxe propre (ou, au moins, qui est plus proche de ce que j'ai l'habitude). Le projet a beau être très jeune, j'ai un déclic : il y a quelque chose qui m'accroche dans ce langage et me donne envie de l'approfondir. Et vous, quels langages de programmation avez-vous creusés ces derniers temps ? Qu'ont-ils comme particularités ?