19 novembre 2021
sourceWilliam a créé son premier langage chiffré en sixième pour communiquer avec sa copine. Il a créé son deuxième pour écrire un livre ("The invisible") racontant l’histoire d’une civilisation inspiré du manuscrit de Voynich, de Kryptos, et de plein d’autres langages.
Un langage, avant tout, c’est un moyen de communication. Un langage de programmation permet à un humain de communiquer avec un ordinateur. Le compilateur permet de transformer le langage de haut niveau (un flux de caractère) en langage de bas niveau. Le compilateur effectue un ensemble de transformation pour passer de l’un à l’autre.
Le front-end analyse le code source Le middle end optimise Le backend génère le langage bas-niveau.
Pour lire ce langage, il faut définir une grammaire (formes BNF ou EBNF).
Donc maintenant, on va écrire un compilateur, en Rust, évidement. Le projet s’appelle qhantoom et est disponible dans GitHub.
On a donc
Evidement, tout ça peut se faire en AOT (ahead of time) ou JIT (Just In Time)
William utilise cranelift pour effectuer ces opérations. Et on passe à la démo.
Cette démonstration nous montre un langage complet, pour lequel William dispose d’un repl, et d’un compilateur (offerts par cranelift). C’est vraiment séduisant.
En conclusion, il y a beaucoup de concepts à aborder, qui ont été fortement simplifiés par les travaux académiques. Et l’énergie follement chouette de William m’a beaucoup rappelé Xavier Van de Woestyne. Avec ce talk, on était vraiment dans le turfu !