Journal Les nouveautés folles furieuses de Common Lisp en 2022: la revue

Posté par  . Licence CC By‑SA.
50
11
jan.
2023

Sommaire

2022 est juste derrière nous, les années 60 un peu plus loin et pourtant, un vénérable langage de programmation évolue toujours et s'impose toujours comme un choix de premier ordre pour certain·es. Common Lisp est solide et stable, mais évolue: les implémentations évoluent, les librairies recommandées, les pratiques, les communautés aussi. Nous n'avons pas besoin de faire un point toutes les deux semaines, mais néanmoins, que s'est-il passé en 2022 et qu'avez-vous loupé ?

Ou simplement, à quoi ressemble la communauté Lisp aujourd'hui, sur quoi ces aliens travaillent-ils, pour quelles sortes d'applications voudrait-on choisir ce langage à priori un peu empoussiéré qui se traîne une cohorte de fans et de détracteurs ? Se pourrait-il qu'il soit adapté à votre nouvelle idée, se pourrait-il qu'il y ait déjà des outils et des librairies appropriées à votre projet ?

Ci-dessous est ma sélection, que j'ai voulu large, mais qui n'est bien sûr pas exhaustive de tout ce qui a été publié pendant l'année.

Ce billet n'est pas non plus un état des lieux de l'écosystème, comme celui que j'ai fait en 2020, pour lequel vous trouverez de bons commentaires complémentaires sur le site orange: sur HN (133).

I think this article (of sorts) is definitely helpful for onlookers to Common Lisp, but doesn't provide the full "story" or "feel" of Common Lisp, and I want to offer to HN my own perspective.

Si vous souhaitez une référence, je vous invite plutôt à consulter mes deux ressources préférées:

  • Awesome-cl - une liste de librairies. Je parie qu'il y en a plus que ce que vous pensez à priori.
  • the CL Cookbook - des recettes, une ressource collaborative. Pas de blabla, le code d'abord.

Si je devais choisir 3 projets pour cette année ce serait:

  • les développements sur l'implémentation SBCL: SBCL est appelable en tant que bibliothèque partagée ("shared library", certaines traductions risquent de ne pas être optimales)
  • Kons-9: un nouveau projet de modélisation 3D, dans l'idée Blender/Maya/Houdini, mais avec les avantages de Common Lisp, notamment en ce qui concerne les capacités de code "live", très interactif. Le projet avance bien.
  • enfin CLOG, the Common Lisp Omnificent GUI. C'est une sorte de GUI pour le navigateur, pour développer des applications interactives (web apps, jeux…), puisque basé sur les websockets.
    • honnêtement je ne suis pas un fan de ces abstractions, mais le travail accompli est remarquable. Sûrement top pour des gens qui ne maîtrisent pas toutes les technos web. Moi je suis un fan de HTMX et Unpoly en ce moment.
    • l'auteur avait un outil commercial similaire codé en Ada, mais depuis qu'il a découvert Common Lisp, on ne l'arrête plus.

C'est parti.

L'article original en anglais: https://lisp-journey.gitlab.io/blog/these-years-in-common-lisp-2022-in-review/ (HN, 67 commentaires). Ce billet est un peu moins fourni pour faciliter la découverte.

J'ai préféré ne pas traduire les citations.

Documentation

Dans le monde Lisp, on a de très bons livres, quelques bons sites web, et une spécification. Mais le site officiel de la spéc est un peu abscons. Un nouveau venu est arrivé et nous a généré un nouveau site pour la consulter. Génial.

Il a en plus commencé à travailler sur un nouvel éditeur pour Common Lisp, en Rust avec Tauri, cf ci-dessous.

On continue à augmenter le Cookbook:

Une ressource réhabilitée:

et aussi:

  • je crée un cours Common Lisp en vidéo sur Udemy 🎥 (oui moi !)
    • j'ai beaucoup galéré à trouver les bonnes ressources (le pratique Cookbook c'est moi également) et à comprendre la manière de faire en Lisp, toujours un peu différente. J'ai eu du mal à assembler les bases de l'écosystème: ASDF, construire un binaire, comprendre toutes les possibilités du débogueur interactif, déployer une app avec SystemD (j'utilise CL en prod©), etc. Je vous explique de manière efficace.
    • j'explique plus mes motivations sur Github: https://github.com/vindarel/common-lisp-course-in-videos/
    • certaines vidéos sont libres d'accès, je peux aussi envoyer un lien gratuit aux étudiant·es.
    • alors oui je le fais en anglais et je n'ai pas la mâchoire adaptée à cette langue. Mais je fais des efforts, je reprends le son des toutes premières vidéos où il était très moyen (nouveau micro, son excellent depuis un an maintenant), et je crée des sous-titres pour aider. Oh, et puis il y a l'image.
    • lien direct. Une réduction: LISP-FOR-2023
    • c'est tout nouveau et je me suis dit que ça pourrait aider les gens à me dire merci pour mes contributions :D Merci d'avance pour votre soutien en tout cas.
    • j'ai reçu un retour spontané (et en français) sur Mastodon: «J'en suis à la moitié. La pédagogie est au rendez-vous et c'est vraiment cool! Ça donne envie d'aller plus loin. Merci pour ce travail." fredg.

Implémentations

On a des nouvelles à donner pour rien de moins que 8 implémentations.

Des gens ont commencé de nouvelles implémentations O_o

Et aussi:

Ils bossent à rendre une mythique "Lisp Machine" utilisable aujourd'hui:

Medley Interlisp is a project aiming to restore the Interlisp-D software environment of the Lisp Machines Xerox produced since the early 1980s, and rehost it on modern operating systems and computers. It's unique in the retrocomputing space in that many of the original designers and implementors of major parts of the system are participating in the effort.

Paolo Amoroso: my encounter with Medley Interlisp.

Taf

On a vu passer des offres pour: du développement web(WebCheckout et des annonces pour freelances), un fournisseur de service pour le "cloud" (Keepit), de l'analyse de big-data financière (Ravenpack, et ils recrutent probablement toujours), des compilateurs quantiques (HLR Laboratories), de l'IA (Mind AI, SRI International), de l'aggrégation et des systèmes d'alerte pour des parcs énergétiques (3E); pour une start-up qui développe des outils pour autistes; une boîte voulait ré-écrie un backend Python en Common Lisp (RIFFIT); il y a eu quelques "bounties", etc.

Évidemment la plupart des postes sont pourvus sans annonce publique, soit l'entreprise demande dans la communauté directement, soit ça passe par un réseau "social" de manière informelle, soit l'entreprise forme ses nouveaux développeurs Lisp en interne.

Une question légitime:

Qui utilise CL en 2022? On a ajouté quelques entreprises sur cette liste non-officielle: awesome-lisp-companies.

Projets

  • Ultralisp supporte les tags
    • Ultralisp est une distribution Quicklisp, qui livre une nouvelle version chaque 5 minutes.
    • cf CLPM pour un nouveau gestionnaire de librairies.

Librairies logicielles

Éditeurs, éditeurs en ligne, REPLs, autres plugins

Emacs n'est pas le seul et unique éditeur. Vim, Atom, Sublime, VSCode, Eclipse, Jupyter notebooks… https://lispcookbook.github.io/cl-cookbook/editor-support.html

Et il se passe des choses sur le sujet.

Nouvelles versions:

Programmation concurrente

Discussions:

cf awesome-cl

bases de données

Pour plus de choix: awesome-cl#databases.

Déploiement, interface au monde réel

C'est là que je trouve que les avancées sont incroyables. On peut voir aussi que plusieurs entités travaillent ensemble sur SBCL: ses développeurs indépendants, un développeur de Google qui s'y consacre entièrement (cf ITA Software de Google), les développeurs d'une grosse boîte, HRL Laboratories, qui sont aussi responsables de Coalton, qui amène les types à la Haskell par-dessus CL.

Have you ever wanted to call into your Lisp library from C? Have you ever written your nice scientific application in Lisp, only to be requested by people to rewrite it in Python, so they can use its functionality? Or, maybe you've written an RPC or pipes library to coordinate different programming languages, running things in different processes and passing messages around to simulate foreign function calls.

[…] If you prefer using SBCL, you can now join in on the cross-language programming frenzy too.

Jeux

Kandria sort aujourd'hui sur Steam!

🎥 Kandria bande-annonce.

Graphiques, GUIs

Nouveaux "bindings" pour Gtk4:

On en a eu pour Qt5… mais ils sont durs à installer et utiliser.

Et aussi:

Kons-9, un nouveau projet de modélisation 3D

Carrément 🚀.

The idea would be to develop a system along the lines of Blender/Maya/Houdini, but oriented towards the strengths of Common Lisp.

Le mec a de l'expérience en Lisp et dans le domaine:

I'm an old-time 3D developer who has worked in CL on and off for many years.

I don't consider myself an expert […] A little about me: • wrote 3D animation software used in “Jurassic Park” • software R&D lead on “Final Fantasy: The Spirits Within” movie • senior software developer on “The Hobbit” films.

Interfaces avec d'autres langages

  • py4cl2-cffi: basé sur CFFI.
    • permet de passer les vecteurs par référence, ce qui est efficient et rapide, et ouvre donc l'accès à l'écosystème numpy, scipy et cie.
    • ce qu'on pouvait faire avec py4cl, mais moins efficacement.

Pour plus: awesome-cl comme toujours.

Librairies scientifiques

  • 🚀 Lisp Stats - un projet de stats solide, qui n'est pas parti de zéro. Il intègre des librairies "state of the art" existantes, il intègre du boulot qui a été fait pour le prédécesseur de R -qui était en Lisp.
    • sur HN (55) - pleins de commentaires et de contexte historique.
    • "Common Lisp est une plateforme viable pour les stats et le 'machine learning'. Tout n'est pas (encore) aussi bien organisé que pour R ou Python, mais tout est là."
  • numericals - les performances de NumPy avec les qualités et le confort de Common Lisp
  • MGL-MAT - une librairie pour travailler avec des objets multi-dimensionnels, interfaçage efficace à CUDA, BLAS et CUBLAS.

Et aussi:

  • Maxima 5.46.
    • "Maxima is a Computer Algebra System comparable to commercial systems like Mathematica and Maple. It emphasizes symbolic mathematical computation: algebra, trigonometry, calculus, and much more."
    • une interface graphique: WxMaxima.

Web

Screenshotbot (Github) est sorti. C'est un service de capture d'écran automatique à interfacer avec ses tests Android, iOS ou web.

Nouvelles librairies:

  • jingle: un framework web minimaliste… mais pas trop.
    • demo: OpenAPI 3.x spec, Swagger UI, Docker, interface en ligne de commande.
  • ciao: OAuth 2.0
  • openrpc: génération de spécs et JSON automatic pour OpenRPC.
  • HTTP/2 implementation

Squelettes de projets:

  • cl-cookieweb: ma proposition pour projets web. Démo en vidéo.
    • Fournit un projet web qui tourne avec Hunchentoot (le server), easy-routes, Djula (templates HTML), Bulma (CSS), avec SQLite (mais peu importe), avec des migrations et un exemple de table pour l'ORM.
    • là-aussi, je serais embarrassé de dire combien de temps il m'a fallu pour assembler tout ça. Maintenant que je l'ai, ça roule bien !!

Autres:

Je n'ai pas trop d'applications en tant que tel à montrer. Cf le lien parent. Mes projets en cours sont plutôt pour 2023.

CLOG

🚀 La grosse nouveauté, c'est quand même CLOG, "the Common Lisp Omnificent GUI".

The CLOG system browser

Ce projet est le seul conséquent que je connaisse qui utilise CLOG: mold-desktop (toujours en dév).

I'm developing a programmable desktop and a bookmarks manager application with CLOG. I think I know one of the things that make CLOG user interfaces so easy to develop. It is that they are effortlessly composable. That's it for now :)

Nouvelles sorties

On a beaucoup de projets concernant la composition musicale. cf OpusModus et OpenMusic. J'aime citer aussi ScoreCloud, une app pour mobile, faite avec LispWorks, dans laquelle vous sifflotez, jouez de votre instrument ou chantez, et elle écrit la partition O_o

Bien sûr: cf awesome-cl.

(re) découvertes

Articles

Là j'ai pas mal épuré pour laisser ce que moi je trouve plus important ou utile.

Outils

Scripting

En CL on peut produire des binaires complets, par exemple pour mes applis web le binaire contient le HTML et tous les assets, ainsi que le compilateur, et le débogueur… et ça sert pour inspecter un programme en prod (j'ai bien dit inspecter, et pas développer directement contre la prod). Mais pour lancer des scripts de manière simple et pas prise de tête, c'est moins évident.

On peut bien sûr lancer sbcl --load monscript.lisp, mais dès qu'on repose sur les librairies externes, le temps de démarrage s'en ressent. Partager ce script n'est pas évident non plus. Des solutions ont émergé, comme Roswell.

Autour du langage

cf article original.

Web

Autres articles

Vidéos et podcasts

Les miennes:

Par Gavin Freeborn:

Du projet KONS-9:

Du projet CLOG:

CL study group:

Autres:

et bien sûr, pour plus de 3h48 de contenue bien condensé, mon cours Lisp en vidéo sur Udemy (je travaille sur du nouveau contenu, les étudiants existants y auront accès).

Des podcasts:

Autres discussions

Communauté

Learning Lisp

Common Lisp VS …


Et voilà. Bonne découverte.

  • # Question sur un vieux livre

    Posté par  . Évalué à 5.

    il y a des millions d'années de cela (i.e. dans mes années étudiantes), j'ai ouvert un livre sur le LISP (par pure curiosité) et avais beaucoup apprécié celui-ci : il présentait quelques mots clefs seulement (affectation, tête, queue, et un ou deux autres) et proposait de construire tout le reste au travers d'exercices.

    J'avais trouvé le langage super (c'est ainsi que j'ai appris la récursivité), mais je l'ai laissé ensuite sur le côté : il ne m'avait finalement qu'appris à penser ; c'était déjà bien.

    Cela dit-il quelque chose à quelqu'un ? Quelqu'un aurait-il une idée de l'ouvrage ?

    PS : je souhaiterais l'utiliser pour le passer à mes cht'iots.

  • # Sous ubuntu ?

    Posté par  (site web personnel) . Évalué à 3.

    Awesome diraient les anglais…

    J'ai fait un tout petit peu de Lisp il y a longtemps (plus de 30 ans ?) et j'ai retrouvé quelques listings.

    Apparemment, c'est toi qui a édité la page https://doc.ubuntu-fr.org/common_lisp
    donc je vais essayer d'installer les paquets indiqués (sbcl rlwrap).

    • [^] # Re: Sous ubuntu ?

      Posté par  (site web personnel) . Évalué à 5. Dernière modification le 13 janvier 2023 à 09:53.

      Awesome diraient les anglais…

      Désolé, complètement HS, mais cette utilisation hyperbolique d'« awesome » est très clairement nord-américaine plutôt que britannique. Et elle est toujours perçue comme telle au Royaume-Uni.

      Au Royaume-Uni, « awesome » s'utilise traditionnellement beaucoup moins souvent, et son usage hyperbolique, importé des Etats-Unis, est récent.

      Moins HS : merci beaucoup pour cet excellent journal ! En tant que non-programmeur, je tourne autour du Common Lisp depuis quelque temps sans vraiment sauter le pas, mais il va falloir que je m'y mette.

    • [^] # Re: Sous ubuntu ?

      Posté par  . Évalué à 3. Dernière modification le 13 janvier 2023 à 10:44.

      C'est bien moi, et je viens d'ajouter une astuce à propos de rlwrap: l'option --remember permet de TAB-compléter les mots déjà écrits. Ça aide pour l'auto-complétion dans le terminal. C'est une chose que l'implémentation CLISP fait mieux, mais elle est à éviter pour des apps sérieuses. Sinon, il faut mettre en place un IDE pour la bonne complétion.

      Je te souhaite de retrouver tes marques rapidement !

      Autre astuce pour rlwrap: l'option -f FICHIER, où FICHIER contient une liste de mots qui seront TAB-complétables. Voici un fichier avec des fonctions de CL: https://gist.github.com/alejandrogallo/d36a4b3b37586d19e54ce4cda8a7c47b Ça permet d'améliorer l'expérience par défaut quand on veut tester SBCL dans le terminal.

      ps: Merci au commentaire cousin!

  • # Learning Lisp

    Posté par  . Évalué à 10.

    Je suggère d'ajouter à la section "learning lisp" le MOOC Programmation récursive. Cela n'utilise pas CL mais Scheme car le propos est centré sur la récursion.

    • [^] # Re: Learning Lisp

      Posté par  . Évalué à 10.

      Salutations Christian Queinnec, auteur historique de livres et de contenus sur les langages Lisp o/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.