lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Version 2.23.80 : define vs ly:parser-defined


From: Gilles Thibault
Subject: Re: Version 2.23.80 : define vs ly:parser-defined
Date: Thu, 27 Oct 2022 00:11:39 +0200
User-agent: Webmail Free/1.3.3

Le 2022-10-26 16:49, Jean Abou Samra a écrit :
Bonjour Gilles,

Enchanté, moi c'est Jean ABOU SAMRA :-)

Hum, je me suis aperçu de mon erreur juste après mon envoi. Trop tard, désolé : Jean !!!

Est-ce qu'on peut utiliser define et ly:parser-define! de
manière interchangeable ? En général, non, dans ce cas
précis, oui.
define est une syntaxe prédéfinie par Guile
qui sert à créer des variables aussi bien globales que
locales.

Oui, oui j'aurai du préciser ! Pour moi la question était uniquement pour des variables uniquement globales

En somme, au contraire de define, ly:parser-define! ne crée
jamais que des variables globales. <...> ly:parser-define! est
une bête fonction, pas une « syntaxe spéciale » comme define
(en termes techniques, une « macro »), donc aucun problème
de ce côté-là.

Ok, j'avais bien compris pour la portée de ly:parser-define! mais je ne savais pas que define était une macro
  (macro? define)     => #t
  (procedure? define) => #f


Pour finir, est-ce que je recommande personnellement d'utiliser ce
style de codage ? À vrai dire, non, pas vraiment,  pour deux raisons.
D'une part, en utilisant defined?, tu mets quand même les mains dans
le cambouis de Guile et de son interaction de bas niveau avec LilyPond.

  Hum, pas pratique toutes ces fonctions de base dont on doit se méfier.
Un développeur avait aussi un jour mis des réserves sur la fonction primitive-eval. Il faudrait des fonctions sûres, estampiées Lilypond pour remplacer defined? et primitive-eval. Pour primitive-eval, ce même développeur avait proposé : (module-ref (current-module) sym) Pour defined?, il pourrait y avoir : (module-variable (current-module) sym) ... même si je ne vois pas en quoi ces fonctions "module" seraient plus sûrs.

<..> il faut savoir que defined? te réserve des surprises
si tu n'as pas étudié la manière dont ça fonctionne.

Bon dans le cas de variables non globales, effectivement il faut se méfier. Merci pour tes exemples.


La deuxième raison est qu'avec ce système, le réglage est global.
Tu ne peux pas inclure ton fichier de config et régler une taille
plus petite pour une partition seulement à l'intérieur d'un \book,
ou un seul \book parmi plusieurs, etc.

Pas faux, sauf que pour le cas de taille de font-size, il faut quand même mieux esthétiquement garder ses mêmes réglages dans tous les scores


\layout {
  \setTextSize -1
}

Hum, je n'aurais jamais oser mettre une fonction musicale dans un \layout !
Ça m'ouvre effectivement des opportunités.


Bien sûr, la transition est plus compliquée que de changer un
define en ly:parser-define!, donc si tu as vraiment beaucoup
de fichiers, pourquoi pas rester à ly:parser-define! .

Oui, c'est ce que je vais faire pour l'instant.
Merci encore une fois Jean pour tes réponses longues et détaillées.

À bientôt.

--
Gilles



reply via email to

[Prev in Thread] Current Thread [Next in Thread]