Expérimentation d’un compilateur TypeScript vers natif

TS-Native

TS-Native est une expérience de compilateur visant à traduire un langage à la syntaxe TypeScript vers des binaires natifs. L’aspect intéressant ne tient pas seulement à la génération de code, mais à la contrainte de conception créée lorsque une syntaxe familière doit survivre au parsing, à l’analyse de types, à la conception de l’IR et à la production en sortie au niveau machine.

Schéma de l’architecture du compilateur TS-Native

Le problème qu’il résout

On peut facilement parler des compilateurs en termes abstraits, mais il est beaucoup plus difficile de définir un langage de manière suffisamment rigoureuse pour que chaque étape du pipeline ait une raison d’exister. TS-Native est utile parce qu’il oblige à faire vivre, dans un système cohérent, des questions sur la syntaxe, la sémantique, les systèmes de types et la sortie native.

Architecture

Les décisions clés du système

01

Crate du parseur

Transforme une syntaxe proche de TS en une représentation interne suffisamment stricte pour prendre en charge les étapes ultérieures du compilateur.

02

Analyser la couche sémantique

Raisonne sur la sémantique du langage au-delà de la syntaxe de surface pour que le compilateur puisse faire respecter le sens plutôt que la simple forme.

03

IR native TS

Agit comme le pont entre l’intention au niveau source et les décisions de génération de code côté backend.

04

Sortie supportée par LLVM

Abaisse l’IR en binaires natifs via un backend qui expose de vraies contraintes au niveau système.

Ce qui compte

  • J’ai utilisé le projet comme fonction de contrainte pour apprendre la construction de compilateurs au-delà du niveau des tutoriels.
  • J’ai séparé l’espace de travail en parties : analyseur (parser), système de types, IR, codegen et CLI, afin que l’architecture reste facile à enseigner.
  • Je resserre la spécification formelle du langage pour que le compilateur soit défini par des règles plutôt que par des accidents d’implémentation.
RustLLVMParser designType systemsCLI

Médias

Captures d’écran et démos

Diagramme de pipeline TS-Native

Diagramme de pipeline TS-Native

Aperçu CLI TS-Native

Aperçu CLI TS-Native