vitte

Vitte — Intermediate Representation (IR)

Introduction

L’IR (Intermediate Representation) de Vitte est la couche intermédiaire entre le parsing (AST) et la génération de bytecode (VITBC).
Elle fournit une représentation abstraite mais proche de la machine, permettant des optimisations, des transformations et un passage clair vers l’exécution.


Objectifs de l’IR


Composants Principaux

RawProgram

RawOp


Exemples de RawOp

Assignation simple

LOAD_CONST r1, #0        ; charge constante 0 dans r1
STORE_GLOBAL g0, r1      ; g0 = r1

Fonction avec addition

FUNC add(a, b):
    LOAD_ARG r1, a
    LOAD_ARG r2, b
    ADD r3, r1, r2
    RETURN r3
END

Transformations IR

1. Désucreur Syntaxique

2. Optimisations

3. Validation


Représentation Intermédiaire vs AST vs Bytecode

Étape Représentation Objectif principal
AST Arbre syntaxique Fidèle au code source
IR Suite d’instructions abstraites Optimisations, analyse
Bytecode Instructions compactes Exécution par la VM

Formats de Sérialisation

Exemple JSON :

{
  "funcs": [
    {
      "name": "add",
      "ops": [
        {"op": "LOAD_ARG", "dst": "r1", "src": "a"},
        {"op": "LOAD_ARG", "dst": "r2", "src": "b"},
        {"op": "ADD", "dst": "r3", "lhs": "r1", "rhs": "r2"},
        {"op": "RETURN", "src": "r3"}
      ]
    }
  ]
}

Diagramme IR

flowchart TD
    A[AST] --> B[IR: RawProgram/RawOp]
    B --> C[Optimisations]
    C --> D[VITBC Compiler]
    D --> E[Bytecode]

Debug & Visualisation

Commandes associées via vitte-cli :

vitte build main.vit --emit-ir=main.ir
vitte run main.vit --dump-ir

Outils prévus :


Roadmap IR


Conclusion

L’IR est le cœur de la compilation Vitte.
C’est à ce niveau que se joue la performance, la clarté et la robustesse du langage.