Subject: Re: Erreur SRFI-13 sur snippet addFingering en version 2.23

From: Gilles Thibault <[email-masked]>
Date: Thu, 06 Oct 2022 11:34:58 +0200

Merci beaucoup Jean !

> Rien de très méchant. Vers le début du snippet, il suffit de remplacer
> 
> (string-delete s (lambda(c) ...)
> par
> (string-delete (lambda(c) ...) s)

Est-ce que à l'instar de Lilypond avec convert-ly, Guile fournit un 
convertisseur de
version 1.8 vers 2.x ?
Je suppose que non :-(

Est-ce qu'il y a au moins quelque part une liste des fonctions Guile qui 
ont changé de syntaxe ?

Récemment j'ai voulu utilisé string-filter
L'aide me disait
  (string-filter pred str)
alors qu'avec lilypond 2.22 la syntaxe était :
  (string-filter str pred)
J'ai mis longtemps à comprendre...

-- 
Gilles

---

From: Gilles Thibault <[email-masked]>
Date: Thu, 06 Oct 2022 11:36:49 +0200

Merci beaucoup Jean !

>  Rien de très méchant. Vers le début du snippet, il suffit de 
> remplacer>

---

From: Jean Abou Samra <[email-masked]>
Date: Thu, 6 Oct 2022 13:44:41 +0200 (CEST)

> Le 06/10/2022 11:36 CEST, Gilles Thibault <[email-masked]> a écrit :
> 
> 
> Merci beaucoup Jean !
> 

Non, ce serait trop beau. Surtout pour un langage
de programmation aussi flexible que Scheme, ce n'est
pas possible du tout.

> J'ai mis longtemps à comprendre...

Il y a l'historique des modifications par version, qui peut
se trouver ici :

https://git.savannah.gnu.org/cgit/guile.git/tree/NEWS

En descendant, tu retrouveras les changements des versions
des séries 2.0 et 2.2.

Ce n'est pas complet apparemment, je vois que ce changement
de string-filter n'y est pas. Comme tu le constateras,
c'est aussi très dense ... (Ce n'est pas pour rien que la
transition a pris dix ans pour LilyPond.)

Je pense que les changements les plus visibles pour un utilisateur
de LilyPond sont ceux-ci :

- La fonction format attend un booléen ou un port comme premier
  argument. Au lieu de (format "xyz ~a" truc), il faut faire
  (format #f "xyz ~a" truc).

- Les règles sur le placement des define sont devenus plus strictes.
  Par exemple, on ne peut plus faire

  (if condition
      (define x 'truc)
      (define x 'bidule))

  Dans ce cas précis, il faut faire

  (define x (if condition 'truc 'bidule))

Cela étant dit, d'expérience, les soucis ne proviennent pas
principalement des changements les plus visibles, mais de
la myriade de changements à des fonctions et macros moins utilisées.
Là, il n'y a pas trente-six solutions, sauf à connaître par
cœur la liste des mille modifications documentées ou non : il faut
exécuter son code et voir ce qui se passe.

Guile 2 a aussi apporté des changements majeurs en termes
d'infrastructure puisqu'il faut désormais précompiler le
code pour qu'il soit raisonnablement rapide, mais pour l'instant
LilyPond ne précompile pas le code dans les fichier .ly car
la rapidité d'exécution n'est pas essentielle et la compilation
elle-même prend du temps, sachant que pour un fichier .ly,
on ne peut pas stocker le code précompilé dans un fichier séparé
comme pour un fichier normal .scm. (Cela dit, il y aura bientôt
une option pour compiler quand même, ce qui donnera de meilleurs
messages d'erreurs.)

Le système de macros a également été modifié de façon radicale,
mais je ne pense pas que ce soit très problématique pour les
utilisateurs de LilyPond étant donné que peu définissent leurs
propres macros. (C'était par contre difficile à vivre pour
le code de LilyPond elle-même.)

Bref, je peux parler pendant des heures des complications liées
à Guile 2, mais pour faire court, il faut juste tester son code
et lire les messages d'erreurs s'ils surviennent.

Cordialement,
Jean

---

From: Gilles Thibault <[email-masked]>
Date: Thu, 06 Oct 2022 15:51:41 +0200

> https://git.savannah.gnu.org/cgit/guile.git/tree/NEWS

Ah très bien ! C'est le genre de chose que je cherchais.
Merci

> de string-filter n'y est pas.
> Comme tu le constateras, c'est aussi très dense ...
... et en plus il y a des oublis apparemment donc ! :-)

>   (format #f "xyz ~a" truc).

Dans Lilypond 2.22, ça par contre c'est déjà le cas je crois.

>   (define x (if condition 'truc 'bidule))

Cette info va m'être très utile car j'avais en fait déjà essayé de 
tester la 2.23
et j'étais tombé sur pleins d'erreurs de ce type que je ne comprenais 
pas.

> exécuter son code et voir ce qui se passe.

Je pense que je vais passer à la 2.23 dans une dizaine de jours car le 
gros projet qui m'empêchait de sauter le pas touche à sa fin.

Encore merci Jean pour cette réponse longue et détaillée.

-- 
Gilles

---

From: Jean Abou Samra <[email-masked]>
Date: Thu, 6 Oct 2022 19:55:37 +0200

Bonsoir Gilles,

> Dans Lilypond 2.22, ça par contre c'est déjà le cas je crois.

En 2.22, avec Guile 1, le #f est facultatif. En 2.23,
avec Guile 2, il devient obligatoire.

> Encore merci Jean pour cette réponse longue et détaillée.

De rien, j'ai été dans la même situation. N'hésite pas à demander
de l'aide sur la liste si tu tombes sur un os.

Cordialement,
Jean