À propos du projet
Xag est un langage de programmation compilé axé sur les performances élevées, les messages d'erreur utiles et la gestion de la mémoire de style Rust. Chaque taille doit être déclarée explicitement : il n'y a pas de type `int` brut. Les programmes sont compilés à l'avance soit en code natif via LLVM, soit exécutés par l'un des deux interpréteurs AOT.
Le compilateur est écrit en C++20 utilisant l'API C++ native de LLVM, nécessitant LLVM 23 ou supérieur, CMake et Ninja. Les fichiers sources utilisent l'extension `.xag`. La chaîne d'outils comprend des commandes pour le lexing, l'analyse syntaxique, la vérification des types et l'inspection de IR.
Trois moteurs d'exécution existent : un interpréteur de test (évidemment correct, lent), un interpréteur rapide (optimisé pour le code plat) et un backend natif AOT. Les trois appellent un seul runtime partagé, donc ils sont d'accord sur le comportement à l'exécution. Lorsque les moteurs ne sont pas d'accord, le projet identifie lequel est en désaccord.
L'arithmétique décimale est validée rigoureusement : l'implémentation logicielle est croisée avec Python `decimal` (libmpdec) sur 400 000 cas, et avec les unités décimales matérielles POWER via émulation QEMU pour 20 000 cas supplémentaires.
La prise en charge Unicode suit entièrement UAX #29, y compris le comptage des clusters graphèmes, basé sur les tables Unicode 17.0.0. Tous les 766 cas de conformité Unicode sont exécutés dans la suite de tests.
Un générateur d'oracle (`generator/`) écrit des programmes Xag aléatoires et les teste sur tous les moteurs pour trouver des écarts. Le générateur est écrit en Rust sans dépendances externes.
Licence : Apache-2.0 WITH LLVM-exception. L'utilisation est libre ; modifier le compilateur ou le runtime nécessite une attribution selon les termes d'Apache.
Remarque : Ceci est un travail en cours - rien n'est encore stable. La plupart du code dans le dépôt est généré par IA sous la direction du concepteur du langage.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.