YatsuScript
Un interpréteur de bytecode écrit à partir de rien. Aucune dépendance, aucun code existant — juste moi et le compilateur Rust.
Ce que c'est
YatsuScript est un interpréteur de bytecode écrit à partir de zéro absolu. Aucune dépendance. Aucune lecture du code source d'un interpréteur existant. Juste le compilateur Rust, un éditeur de texte, et beaucoup de débogage par terminal.
Ça a commencé par « je me demande comment ça marche » et c'est devenu le truc le plus dur que j'ai construit.
Architecture
Le projet est structuré en un seul crate Rust avec trois phases distinctes :
- Lexer — Tokenize le code source en un flux plat de tokens. Gère les mots-clés, identifiants, littéraux et opérateurs.
- Compilateur — Parcourt le flux de tokens et émet des instructions bytecode. Basé sur des registres, avec un jeu d'instructions fixe.
- VM — Exécute le bytecode. Allocation de registres, mapping mémoire, dispatch d'instructions.
Le jeu d'instructions est volontairement petit — environ 20 opcodes couvrant load/store, arithmétique, contrôle de flux et I/O. Assez pour être intéressant, pas trop pour ne jamais finir.
Ce que j'ai appris
Plus que dans n'importe quel autre projet : que tu n'as pas besoin de tout comprendre avant de commencer. J'ai commencé avec zéro connaissance en allocation de registres, zéro connaissance en conception de VM. Le compilateur Rust attrape assez d'erreurs pour que tu puisses apprendre en faisant — chaque erreur du compilateur t'apprend quelque chose de réel sur le fonctionnement des ordinateurs à bas niveau.
Si t'aimes les compilateurs, on devrait parler.