Pourquoi Scheme ?#
Le langage Scheme est un dérivé du Lisp, pensé au départ pour le cursus d’informatique au MIT. De là vient qu’il vise à la cohérence et la simplicité, voire au minimalisme.
LilyPond se sert de Scheme comme d’un langage d’extension. Il s’agit d’une technique courante : le cœur du programme est écrit dans un langage compilé, en l’occurrence C++, et des interfaces sont fournies afin d’interagir avec le programme à l’aide d’un langage interprété. La compilation signifie que le programme est traduit en code binaire une fois pour toutes, ce qui a l’avantage de la rapidité d’exécution. Cependant, les fonctionnalités sont figées dans le programme, sans que l’utilisateur puisse l’adapter à ses besoins, à moins de passer par un lourd processus de recompilation. Au contraire, avec un interpréteur, le code est exécuté au fur et à mesure, ce qui apporte la flexibilité de le modifier facilement.
À l’intérieur de LilyPond, Scheme est littéralement dans chaque recoin. C’est ce qui donne à ce logiciel un niveau d’extensibilité rare. Pour un utilisateur, les applications sont multiples, de la création de raccourcis de saisie jusqu’à l’implémentation de notations graphiques propres à un compositeur.
Sans aller jusque-là, connaître Scheme est une compétence utile à tous les utilisateurs quand on considère que la syntaxe Scheme se retrouve à bien des niveaux dans la saisie d’une partition courante :
title = ##f
\override NoteHead.style = #'cross
\shape #'((0 . 0) (0.1 . 0.3) (0.1 . 0.5) (0 . 1.0)) Slur
\override Staff.TupletBracket.direction = #DOWN
Il faut savoir qu’il n’existe pas une implémentation du langage Scheme, mais des dizaines, chacune avec ses spécificités. L’implémentation choisie pour LilyPond est Guile, qui est le langage d’extension officiel du projet de système d’exploitation libre GNU. Le nom « Guile » est l’acronyme de « GNU Ubiquitous Intelligent Language for Extensions », soit « Langage GNU Omniprésent Intelligent pour les Extensions ». (L’adjectif « omniprésent » relève plus ou moins du mensonge ; pour « intelligent », on laissera le lecteur juge.)
Gardez également à l’esprit que la version de Guile embarquée par LilyPond n’est pas forcément la version la plus récente. Au moment d’écrire ces lignes, la dernière version de Guile est Guile 3.0, tandis que dans la dernière version stable de LilyPond, la 2.24, Guile est en version 2.2. Le manuel de Guile 2.2 se trouve ici.