Archie the Archon, la mascotte : une silhouette encapuchonnée de pierre parcourue de circuits, lisant un livre ouvert
Archie the Archon
Introduction

Pourquoi Archon

Un langage orienté objet sans héritage, bâti sur un concept unique — et qui accueille plusieurs sous-langages sous une même structure.

La plupart des langages vous demandent de choisir votre camp : la sécurité ou le contrôle, la hauteur de vue ou le contact avec la machine. Archon refuse ce marché. Il pose une seule façon de décrire les données et plusieurs façons d’écrire les algorithmes qui les manipulent — du code ramassé automatiquement jusqu’à l’assembleur, dans le même fichier, sans la moindre couture entre les deux.

[Ton mot personnel : pourquoi tu as écrit ce langage, ce que tu cherchais et qui n’existait pas ailleurs. Un ou deux paragraphes, dans ta voix.]

Orienté objet, sans héritage

Archon n’a qu’un concept de type : l’archetype. Il couvre aussi bien la structure de données pure que le type porteur de comportement — pas de struct d’un côté et de class de l’autre, pas de choix à faire au moment où l’on en sait le moins.

Et il n’y a pas d’héritage. Ni classe de base, ni hiérarchie à démêler, ni méthode dont on cherche l’implémentation trois étages plus haut. La réutilisation passe par deux mécanismes explicites :

  • extend ajoute du comportement à un type — y compris à un type que vous ne possédez pas, et l’extension se déclare dans un fichier pour s’appliquer dans un autre ;
  • proxy of compose par délégation : votre type contient l’autre et lui transmet ce qu’il ne traite pas lui-même.

Le typage, lui, est structurel : un type correspond à une interface dès que sa forme correspond, sans rien déclarer ni rien implémenter cérémonieusement. Ce qui compte est ce que le type est, pas la liste de ce qu’il a signé.

Un langage, plusieurs sous-langages

C’est la seconde idée, et la plus inhabituelle. Archon sépare la partie structurelle — les types, les champs, la visibilité, la disposition mémoire — de la partie algorithmique, le corps des méthodes. La première est unique et fixe. La seconde s’écrit selon le régime que vous déclarez, méthode par méthode, avec @mode :

  • managed — le langage complet, mémoire libérée automatiquement. Le régime par défaut, celui de presque tout votre code.
  • unsafe — la même syntaxe, plus de quoi conduire la mémoire vous-même : new, delete, destruct. Pour les rares endroits où c’est vous qui devez décider.
  • asm — le corps est écrit en assembleur, avec une version par architecture.

La liste est ouverte : d’autres régimes viendront.

Ce qui rend la chose possible, c’est justement que la couche structurelle reste unique. Tous les modes s’entendent déjà sur la disposition mémoire — un archetype Point, ce sont deux float64 contigus, que le corps qui les manipule soit ramassé par un ramasse-miettes ou écrit en assembleur brut. Il n’y a donc aucune frontière à traverser : ni FFI, ni conversion, ni copie défensive, là où mélanger deux langages en impose normalement. Le mode change la façon d’écrire l’algorithme, jamais la forme des données.

En pratique : votre programme s’écrit en haut niveau, et la boucle qui compte descend d’un cran — dans le même type, sans changer d’outil, sans quitter le fichier.

Compilé, et pourtant immédiat

Le même outil, archonc, produit un exécutable natif optimisé par LLVM — ou exécute le programme sur-le-champ, sans étape de compilation. C’est ce second mode qui fait tourner les exemples de ce site, dans votre navigateur.

Et le compilateur lui-même est écrit en Archon : il se compile lui-même et atteint le point fixe du bootstrap. Il n’y a plus une ligne d’un autre langage dans le compilateur depuis la version 0.0.6.

Le nom

ΑΡΧΩΝ — ἄρχων, árkhōn, « celui qui gouverne » : le magistrat en chef des cités grecques, et la racine de « monarchie », « hiérarchie », « anarchie ». Le même mot donne l’archetype, concept central du langage, et l’extension des fichiers, .arc : ΑΡΧ se translittère en arc. Un seul mot grec sous le nom, le concept et l’extension.

Deux principes qui gouvernent le reste

L’ambiguïté est une erreur. Quand deux lectures d’un même code sont possibles, le compilateur refuse au lieu de trancher en silence. Vous perdez trente secondes à préciser ; vous ne perdez pas trois heures à comprendre pourquoi il a choisi l’autre.

Aucune abstraction ne coûte à l’exécution. Le déroulement de pile passe par des tables placées hors du code : une fonction qui ne lève pas d’exception ne paie rien pour celles qui en lèvent.

Ce que ce site vous propose

Un cours en sections numérotées. Chaque fois qu’une notion s’illustre par du code, le programme complet est dans la page, avec un bouton Exécuter — et vous pouvez le modifier avant de l’exécuter. Tout tourne dans un bac à sable isolé, sans réseau, limité en temps et en mémoire. Vous n’avez rien à installer pour commencer.