bb.py v0.3.0, ou ce qui arrive le lendemain
« Bonjour » devient « bofonjofoufur ». Câest la langue du feu, un jeu dâenfants : aprĂšs chaque voyelle, un f et la mĂȘme voyelle. Jâen avais fait la premiĂšre dĂ©monstration de bb.py, parce quâelle montre une chose simple : Ă©crivez lâencodeur en français, en japonais ou en arabe, et les trois fonctions ont le mĂȘme hash.
def encoder_langue_du_feu(texte): ... # français
def ç«ăźèšèă«ć€æ(æç« ): ... # japonais
def ŰȘŰŽÙÙ۱_ÙŰșŰ©_ۧÙÙۧ۱(ÙŰ”): ... # arabe$ bb add feu_fra.py@fra
Hash: 5fe367ff2488ad9083034991a28db92f9be781f409adc395844a36e930bf3589
$ bb add feu_jpn.py@jpn
Hash: 5fe367ff2488ad9083034991a28db92f9be781f409adc395844a36e930bf3589
$ bb add feu_ara.py@ara
Hash: 5fe367ff2488ad9083034991a28db92f9be781f409adc395844a36e930bf3589
Personne nâa traduit personne. Les noms et la documentation restent dans leur langue, le hash ne regarde que la logique. Les chaĂźnes, elles, restent françaises : traduire les chaĂźnes, câest de lâi18n, pas du code multilingue.
Mais un programme ne vit pas une fois pour toutes. Voici ce que fait la v0.3 le lendemain.
Le jeu que je connais traite « ou » et « oi » comme une seule voyelle : mou devient moufou, moi devient moifoi. Mon encodeur, lui, double chaque lettre voyelle une Ă une. JâĂ©cris donc les trois cas dans un fichier dâĂ©dition, sous forme de checks, et jâessaie de sauvegarder lâancien code :
$ bb edit encoder_langue_du_feu@fra feu.md -m "Ajouter les checks"
FAIL check_feu_moi: returned False ('mofoifi' == 'moifoi')
FAIL check_feu_mou: returned False ('mofoufu' == 'moufou')
FAIL check_feu_accent: returned False ('été' == 'éfétéfé')
3 checks: 3 failed
Not saved: fix feu.md and save it again.
Les checks font partie de lâidentitĂ© dâune fonction, et un check qui Ă©choue empĂȘche de sauvegarder. Je corrige donc le code : une liste de groupes ordonnĂ©e par prioritĂ© (« eau », « ou », « oi »⊠avant « o » et « u »), puis les voyelles accentuĂ©es, puis les voyelles simples.
$ bb edit encoder_langue_du_feu@fra feu.md -m "Groupes de voyelles ordonnés, voyelles accentuées"
PASS check_feu_moi
PASS check_feu_mou
PASS check_feu_accent
3 checks: 3 passed
Parent: 5fe367ff2488ad9083034991a28db92f9be781f409adc395844a36e930bf3589
Hash: bb860da6d956ba2dfbcc6a19d7fb04a225a1a2196050ae1ea8eb5b0ffb60c268
Nouvelle logique, nouveau hash. Lâancienne version nâest pas effacĂ©e : elle est le parent de la nouvelle. Aucune des deux nâest « la vraie », ce sont deux rĂšgles du mĂȘme jeu.
Jâai changĂ© la version française. Que deviennent les deux autres ?
$ bb search --outdated
Name: ŰȘŰŽÙÙ۱_ÙŰșŰ©_ۧÙÙۧ۱ (ara)
Status: ..., newer version in fra, not yet translated to ara, newer version in fra, not yet translated to jpn
Ils nâont rien perdu et rien cassĂ© : ils restent sur leur version, et bb dit simplement quâune traduction est attendue. Dans la v0.3, une modification dans une langue ne force personne dans les autres, elle laisse une dette visible.
Quelquâun qui lit le japonais la paie, en donnant les noms dans sa langue. Le code ne change pas, seuls les noms changent :
$ bb translate encoder_langue_du_feu@fra jpn traduction.md
- encoder_langue_du_feu -> ç«ăźèšèă«ć€æ
- texte -> æç«
- voyelles -> æŻéłäžèЧ
- voyelle -> æŻéł
...
$ bb translate encoder_langue_du_feu@fra jpn traduction.md
Translation: bb860da6d956ba2dfbcc6a19d7fb04a225a1a2196050ae1ea8eb5b0ffb60c268@jpn@6c9f9c74âŠ
Name: ç«ăźèšèă«ć€æ@jpn
MĂȘme geste pour lâarabe. Ensuite :
$ bb search --outdated
No matches found: nothing outdated
$ bb log ç«ăźèšèă«ć€æ@jpn
Step: 5057cc25âŠ
Translate: ç«ăźèšèă«ć€æ@jpn bb860da6âŠ
From: ç«ăźèšèă«ć€æ@jpn 5fe367ffâŠ
Step: 94551f4eâŠ
Translate: ç«ăźèšèă«ć€æ@jpn 5fe367ffâŠ
Le nom japonais a maintenant deux versions, et chaque pas dit dâoĂč il
vient. Les trois langues ont convergé de nouveau sur
bb860da6âŠ. La convergence est dĂ©tectĂ©e, la divergence est
prĂ©servĂ©e : câest toute la promesse du projet, jouĂ©e sur un jeu
dâenfants.
La v0.3.0 couvre 109 commits depuis la v0.1.0. Deux ruptures : le
stockage (bb migrate convertit les anciens pools) et les
imports (from bb.pool import x devient
import bb puis x = bb.resolve("x")).
@check et bb commit ont disparu : les checks
vivent dans le fichier dâĂ©dition, et partager un pool relĂšve de git. Les
notes complĂštes sont sur la page de la release : https://github.com/amirouche/bb.py/releases/tag/v0.3.0
La prochaine fois, je vous apprends la langue du meuh. đź