Sommaire
- Hacker News est passé de Racket à Common Lisp (SBCL)
- C'est quoi Common Lisp ?
- La communauté
- Documentation
- Les implémentations
- Industrie, offres d'emplois
- Projets cools
- Vidéos
- Conclusion
Le langage Common Lisp n'est pas un dinosaure éteint. À l'instar de certains requins, c'est une bestiole qui n'a cessé d'évoluer pour être un prédateur redoutable aujourd'hui. C'est un langage qui m'éclate au quotidien depuis des années, avec lequel je déploie certains services facilement (venant de Python, quel bonheur le déploiement), alors j'ai de nouveau rédigé un petit récapitulatif de ce qui se passe dans cet écosystème ces deux dernières années.
Vous prendrez garde à ne pas conclure que les librairies et projets que je présente ici sont les seuls de leur domaine, ni que je liste tous les nouveaux projets, ni que je donne un aperçu complet de l'écosystème, d'autant plus que j'ai légèrement raccourci ce journal comparé à l'article original.
Pour cela, veuillez faire une petite recherche sur GitHub, surveillez reddit/r/lisp et reddit/r/common_lisp, utilisez un moteur de recherche, ou commencez par jeter un coup d'œil sur awesome-cl.
Il me tient à cœur de faire cette liste car de l'extérieur on ne se rend pas forcément compte à quel point, certes, le langage et l'écosystème sont stables, mais qu'ils évoluent également.
S'il fallait en choisir 3, je mettrais ces travaux en avant:
je suis impressionné par tout ce qui se passe autour de l'implémentation SBCL (et des travaux en cours sur ECL et ClozureCL)
j'adore l'éditeur Lem, et suis également impressionné par tous les modules qu'il comporte déjà, par la qualité de sa base de code et par la facilité avec laquelle on peut l'explorer, ce qui est aussi rendu facile par l'interactivité du langage
plusieurs outils pour écrire et exécuter des scripts plus rapidement que d'habitude émergent, et sont nécessaires à mon avis.
Bonne découverte.
- article original: https://lisp-journey.gitlab.io/blog/these-years-in-common-lisp-2023-2024-in-review/
Hacker News est passé de Racket à Common Lisp (SBCL)
C'est une nouvelle plutôt coole pour nous les publicitaires pro du langage, car tout le monde connaît ce site. HN a été développé avec le langage Arc, initialement implémenté avec Racket, et pour des questions de performance ils sont passés avec SBCL.
https://lisp-journey.gitlab.io/blog/hacker-news-now-runs-on-top-of-common-lisp/
C'est quoi Common Lisp ?
C'est un langage multi-paradigmes, et selon les implémentations, comme avec SBCL: compile en code machine très performant, typage graduel, très interactif:
- débogueur interactif, permet de corriger une fonction, de la re-compiler et de reprendre l'exécution depuis la fonction boguée, sans devoir tout relancer de zéro (démo youtube)
- ne perd pas l'état du programme en cours quand on travaille avec un bon éditeur
- permet même de contrôler comment des instances sont mises à jour lorsque la définition d'une classe change (pas forcément utile pour le quotidien on est d'accord, encore que, quand on sait le faire on en tire parti, mais c'est pensé pour les systèmes à longue durée de vie, qu'on peut patcher pendant qu'ils tournent),
- un REPL avec beaucoup de fonctionnalités (ne redémarre jamais, on peut installer des librairies depuis le REPL), extrêmement utile et satisfaisant en tant que développeur (j'en ai toujours un d'ouvert),
- on compile fonction par fonction avec un raccourci clavier, SBCL nous donne beaucoup de warnings et d'erreurs de typage instantanément (et pour du Haskell intégré dans Common Lisp, cf Coalton ci-dessous).
Liens:
- https://lisp-lang.org/
- les bons éditeurs aujourd'hui: https://lispcookbook.github.io/cl-cookbook/editor-support.html (Emacs, Vim, Pulsar, Jupyter notebooks, VSCode, Sublime…)
La communauté
Elle est active, il y a des évènements IRL réguliers dans quelques villes, l'European Lisp Symposium chaque année…
On peut voir les chiffres de la communauté reddit: https://www.reddit.com/r/Common_Lisp/comments/1hr2omd/2025_a_new_year_for_an_old_programming_language/
La communauté est présente sur reddit, Discord (lien: https://discord.gg/hhk46CE), IRC, Mastodon, LinkedIn…
Documentation
On a la chance d'avoir de très bons livres sur CL, mais historiquement peu de doc en ligne. Ça évolue.
Le Common Lisp Cookbook reçoit un bon nombre de contributions. On peut le trouver en EPUB: https://github.com/LispCookbook/cl-cookbook/releases/tag/2025-01-09
Le livre PAIP est maintenant disponible en ligne: https://norvig.github.io/paip-lisp/#/
J'ai sorti un nouveau site sur le développement web en Common Lisp: https://web-apps-in-lisp.github.io/index.html
FreeCodeCamp a publié un cours "complet" sur Youtube: https://www.reddit.com/r/Common_Lisp/comments/1i1e766/lisp_programming_language_full_course_for/
cf d'autres vidéos sympas ici: https://www.cliki.net/Lisp%20Videos
J'ai sorti 9 vidéos (1h22) pour expliquer CLOS, le système objet: https://lisp-journey.gitlab.io/blog/clos-tutorial-in-9-videos-1h22min--read-the-sources-of-hunchentoot-and-kandria/
Les implémentations
Il s'en passe des choses.
SBCL
SBCL a toujours des sorties mensuelles: https://www.sbcl.org/news.html
SBCL s'est vue dotée d'un nouveau GC.
Entre autres choses, en très vite:
- compilation croisée pour Android
- support pour Haiku
- "memory allocation arenas" pour arm64
- améliorations du module sb-simd
- SBCL est porté pour la Nintendo Switch
- installation facile sur Windows avec Chocolatey (non officiel)
- ou des builds quotidiens pour MSYS2
ABCL - CL pour Java
ABCL a sorti des nouvelles versions:
- ABCL 1.9.1
- 1.9.2
- nouvel outil: ABCL memory compiler
Et Clojure ? Je ne connais qu'à peine (ça reste du Java, ça reste gourmand en ressources, le REPL est moins riche en fonctionnalités, le langage ne donne pas d'erreurs de type à la compilation avec un C-c C-c
), donc je peux juste citer d'autres lispers. cf:
- Clojure VS Common Lisp (pas forcément très partial)
CCL, LispWorks, Allegro, ECL, CLASP, SICL, LCL, Alisp, Medley
Ces implémentations sont actives.
ECL a un module pour WASM qui permet de lancer Maxima dans un navigateur (pour les matheux).
CLASP, pour interfacer CL et C++ nativement, est toujours développé par une start-up en bio technologies:
SICL est peut-être le futur de Common Lisp. C'est une nouvelle implémentation, modulaire. Des bouts sont déjà utilisé dans d'autres implémentations.
Medley est la ré-incarnation de la Medley Interlisp Lisp Machine. Je ne l'ai pas connue, trop jeune. On peut la tester via un navigateur.
Industrie, offres d'emplois
Il y a peu d'offres, publiques en tout cas, on voit des opportunités passer de manière moins formelle sur les réseaux. Mais il y en a (cf le lien original, par ex. une offre pour 3E à Bruxelles).
Et oui, certaines entreprises utilisent toujours Common Lisp, et certaines entreprises choisissent de leur plein gré ce langage comme base de leurs nouveaux produits. On le voit surtout dans le domaine du Quantum Computing, et toujours pour une certaine forme d'IA. Mais des boîtes plus classiques peuvent en tirer parti. On voit des projets d'ERP, du développement web, des bots internet…
Quelques exemples:
- https://keepit.com/
- https://graphmetrix.com/Aconex
- https://blog.funcall.org/lisp%20psychoacoustics/2024/05/01/worlds-loudest-lisp-program/
- https://www.ravenpack.com/
- pour plus: awesome lisp companies
et des usages, moins dans l'actualité:
- comment pgloader est passé de Python à Common Lisp: https://tapoueh.org/blog/2014/05/why-is-pgloader-so-much-faster/
- Google: ITA Software
- http://www.siscog.pt/
- etc
Projets cools
Éditeurs
Éditeurs pour Lisp: https://lispcookbook.github.io/cl-cookbook/editor-support.html (il y en a d'autres qu'Emacs, mais essayez donc !)
Lem: https://lem-project.github.io/
Construit en CL, il est donc extensible à la volée en Lisp, comme Emacs. Contient un client LSP qui fonctionne pour de nombreux autres langages, et des modes syntaxiques plus classiques pour nombre d'autres.
Quelques fonctionnalités de Lem:
- mode vim et Emacs
- interface Git interactive (opérations classiques, rebase interactive (sans les actions "edit" ou "reword"))
- navigateur de fichiers
- panneau de navigation sur le côté
- terminal via libvterm
- curseurs multiples
- pour le terminal (ncurses) et le bureau (SDL2), et une version "cloud" pour édition collaborative en chantier.
- Tetris (en mode graphique)
Nouveau projet: Neomacs https://github.com/neomacs-project/neomacs basé sur Electron
Coalton: comme Haskell, pour Common Lisp
En les citant, Coalton c'est:
the implementation of a static type system beyond Haskell 95. Full multiparameter type classes, functional dependencies, some persistent data structures, type-oriented optimization (including specialization and monomorphization). All integrated and native to CL without external tools.
C'est une librairie logicielle qu'on installe comme n'importe quelle autre, mais qui fournit un autre langage pour écrire des programmes typés statiquement, tout en s'interfaçant de manière native avec son langage hôte.
Coalton est développé à l'origine pour des boîtes dans l'informatique quantique. cf: le compilateur quilc.
Ce n'est donc pas un jouet. Et si les développeurs ne font pas un tonnerre de tous les diables pour montrer leur travail incroyable, c'est qu'ils bossent ;) (mais ils répondront au FUD sur HN).
Les gestionnaires de librairies
Depuis au moins 10 ans, le "package manager" qui rend de fidèles services est Quicklisp. Il sort des distributions de librairies, qui ont été vérifiées pour charger correctement. La dernière en date était en octobre:
Et oui, elle date un peu. Plusieurs explications à cela, à lire et discuter par ailleurs.
Aujourd'hui, de nouveaux outils émergent:
- https://github.com/ocicl/ocicl "pour tirer parti du monde des containers"
- Ultralisp (basé in-fine sur l'outil Quicklisp, mais pas son mode de distribution), continue à évoluer: https://github.com/ultralisp/ultralisp/
- Qlot évolue (pour des dépendances par répertoire, à la pip, npm etc) https://github.com/fukamachi/qlot/releases/tag/1.4.1
- un nouvel outil, qui permet de simplement "vendorer" ses dépendances (les inclure, comme du code, dans son projet): https://github.com/fosskers/vend
Développement de jeux
Le meilleur exemple dans ce domaine est Kandria, qui est sorti sur Steam:
- https://kandria.com/
- retours d'expérience (anglais)
Son auteur augmente maintenant son moteur de jeu pour la 3D. On peut le suivre et voir une démo sur Mastodon.
On trouvera d'autres ressources, par exemple:
- ECS and metalinguistic abstractions
- un petit jeu: Nano Towers
Une fonctionnalité incroyablement utile pour les développeurs, est qu'on peut développer son jeu pendant qu'il tourne. Compiler une fonction avec C-c C-c
, et voir le jeu changer. Sans tout relancer de zéro à chaque fois.
Interfaces graphiques
C'est un large sujet, et de multiples librairies existent, plus ou moins faciles à prendre en main, plus ou moins portables, etc. Mais voyez la capture d'écran d'Opus Modus en introduction: c'est bien un logiciel graphique multi-plateformes. Dans ce cas, développé avec LispWorks.
Je vais vous laisser voir awesome-cl ou l'article original.
Le web, les web views, Electron
Le web en Common Lisp c'est faisable (et je le fais), on a pas mal de librairies pour divers besoins, on a quelques "frameworks", minimalistes. Il faut être prêt à mettre les mains dans le cambouis, à mieux connaître le web que lorsqu'on utilise des "frameworks" de haut niveau qui ont beaucoup de couches d'abstraction. Ceci dit, la malléabilité du langage, sa performance, son multi-threading, ses excellents outils de développement, ses fonctionnalités avancées, son déploiement facile… font que certaines choses compliquées dans un autre langage, ou qui nécessiteront une librairie, se font en quelques lignes de manière native.
Ce qui me plaît, c'est encore et toujours l'interactivité pendant le développement, le fait que le serveur de développement ne redémarre jamais, ne me fait pas attendre et reste réactif, et comme je disais plus haut le déploiement d'applications, facile: je peux générer un binaire de mon appli web, comprenant tous les fichiers statiques (templates HTML, le JavaScript, etc), le copier sur mon serveur, et c'est tout. Ou le vendre et ne pas devoir accompagner mon client pendant l'installation.
Pour démarrer sur le sujet:
- https://lispcookbook.github.io/cl-cookbook/web.html
- https://github.com/CodyReichert/awesome-cl/
- https://web-apps-in-lisp.github.io/
- https://dev.to/rajasegar/building-a-rentals-listing-web-application-in-common-lisp-4nn3
Comme outils moins classiques, on a CLOG (CL Omnificient GUI), qui permet le développement d'applications web un peu comme une interface graphique, avec une grande interactivité pendant le développement (via websockets).
L'infatigable lisper mmontone se lance dans mold-desktop, un desktop pour le web, en suivant les principes de "moldable software".
Enfin, un article pour présenter les trois "web views" pour Common Lisp: webview, webui, Electron.
Scripting
On peut exécuter un programme depuis les sources, ou bien générer un exécutable.
Mais, par défaut, l'un ou l'autre sont un peu lourds à l'usage et ne satisfont pas vraiment le développeur pressé qui souhaite lancer un petit script écrit en Lisp.
kiln: "Infrastructure for scripting in Common Lisp to make Lisp scripting efficient and ergonomic" - soit, pouvoir appeler du Lisp depuis le shell de manière légère.
unix-in-lisp - il paraît la folie ce projet: on "monte" les utilitaires Unix dans son image Lisp.
CIEL Is an Extended Lisp (discussion HN) - 100% Common Lisp, "batteries included"
- une collection de librairies pour rendre CL plus utile au quotidien aujourd'hui: inclue des librairies pour le JSON, le web, le CSV, les expressions régulières…
- un moyen de lancer des scripts au démarrage rapide et sans étape de "build", avec toutes les librairies à disposition.
Vidéos
Voici une petite sélection.
Des démos d'applications:
- AudioVisual in CommonLisp (cl-collider, cl-visual) (screencast)
- Cheesy trailer for recent kons-9 3D graphics features.
- Drum N Bass in CommonLisp
- Drum and Bass with a Counterpoint - How to Tutorial - Opusmodus
- How Lisp is designing Nanotechnology (Developer Voices, with Prof. Christian Schafmeister) (Youtube)
- How to Package Common Lisp Software for Linux? EN Subs (alien-works-delivery, linux-packaging)
- Melodic Techno - How to Tutorial - Opusmodus
- The Opusmodus Studio - Everything I didn't know I needed - Subject Sound (YouTube)
- Welcome to Opusmodus (Youtube)
Apprendre:
De l'European Lisp Symposium 2024:
Conclusion
C'était un compte-rendu écourté qui vous aura, je l'espère, donné envie d'en voir plus.
En Common Lisp on s'éclate ET on délivre du logiciel, ce qui n'est pas donné à tout le monde ;)
# Des pêches?
Posté par fero14041 . Évalué à 5 (+4/-0).
Merci!
Ca mériterait d'être transformé en dépêche, non ?-)
[^] # Re: Des pêches?
Posté par Benoît Sibaud (site web personnel) . Évalué à 3 (+0/-0).
J'attends un éventuel avis de l'auteur/autrice. (meme que)
[^] # Re: Des pêches?
Posté par dzecniv . Évalué à 2 (+0/-0).
mais avec plaisir, j'irais également corriger quelques tournures de phrase (même que double lol :p Il est parmi nous et vous regardez ailleurs)
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.