Gs++ est un langage de programmation système natif créé par ⋞Galactic-Shrine⋟. Il est destiné aux logiciels proches du matériel, aux bibliothèques système et aux applications natives qui demandent une maîtrise explicite des données, de la mémoire, de l’ABI et de la durée de vie des objets.
Le compilateur gsppc transforme directement les sources Gs++ en code machine.
Gs++ n’est pas un transpileur vers C++ : il possède son propre frontend, son
générateur x86-64, son éditeur de liens et ses formats binaires GsObj, GsA et
GsE.
Le français est la syntaxe canonique du langage. Les mots-clés anglais documentés sont des alias officiels avec la même sémantique et la même génération de code.
État actuel —
0.27.0-alpha.8Cette préversion permet d’évaluer et de développer avec la chaîne Gs++ actuelle. Les formats binaires 1.0 et l’ABI 1 sont validés, mais le frontend auto-hébergé reste en développement. Son image unique
Frontend.GsEregroupe le classificateur, le lexeur, l’AST compact et la passe sémantique. Celle-ci couvre maintenant les surcharges, membres, constructeurs, initialiseurs, agrégats imbriqués, indexations, adresses, déréférencements et appels indirects déjà typables. Le développement suivant l’alpha.8 valide aussi les valeurs gauches, indices, cibles, arités, types et références de ces formes, ainsi que la résolution typée des opérateurs libres binaires et unaires. Les vingt-quatre formes intrinsèques unaires et binaires sont aussi validées avec leurs adaptations de littéraux, pointeurs ordinaires ou de fonction et neuf familles de diagnostics. La passe produit en outre les plans ordonnés de construction, de destruction et de tables virtuelles des objets locaux et sous-objets de constructeurs. Elle applique aussi les contraintes structurelles des déclarations globales aux objets de classe, références, typesvide, imports publics et constantes non initialisées. Les initialiseurs globaux sont maintenant contrôlés récursivement : listes requises pour les agrégats, cibles directes des pointeurs de fonction, refus des pointeurs de données initialisés et formes constantes structurelles. Elle calcule désormais les constantes numériques, y compris les valeurs d’énumération implicites ou explicites, les opérations signées et non signées, les conversions et les courts-circuits logiques ; elle refuse les divisions par zéro et les valeurs hors plage. Les relocalisations, l’émission des octets globaux, les conversions implicites restantes et les autres familles sémantiques restent à migrer.
| Principe | Ce que Gs++ fournit |
|---|---|
| Compilation native | Production directe de code machine x86-64 |
| Syntaxe bilingue | Français canonique et alias anglais équivalents |
| Programmation système | Pointeurs, structures, unions, tableaux, globales et atomiques |
| Modèle objet | Classes, visibilité, héritage simple, virtualité, constructeurs et destructeurs |
| Durée de vie explicite | Initialisation ordonnée, RAII et destruction déterministe |
| Compilation séparée | Interfaces, objets GsObj, bibliothèques GsA et contrôle ABI à la liaison |
| Profils d’exécution | Profil freestanding minimal et services hébergés explicitement liés |
| Auto-hébergement progressif | Composants du compilateur réécrits et validés en Gs++ |
| Reproductibilité | Formats versionnés, cartes de liens et matrice de conformité portable |
Les API livrées par Gs++ utilisent le préfixe d’espace de noms canonique
GalacticShrine::GsPP::. Par exemple, les services hébergés sont exposés sous
GalacticShrine::GsPP::Hebergee et les imports fournis par l’hôte sous
GalacticShrine::GsPP::Hote.
espace Shrine::Exemples {
/**
* <résumé>Additionne deux entiers signés de 32 bits.</résumé>
* @Paramètre(entier32: gauche) Première valeur.
* @Paramètre(entier32: droite) Deuxième valeur.
* @Retourner(entier32) Somme des deux valeurs.
**/
publique entier32 Additionner(entier32 gauche, entier32 droite) {
retourner gauche + droite;
}
/**
* <résumé>Exécute le programme d'exemple.</résumé>
* @Retourner(entier32) Résultat de l'exécution.
**/
publique entier32 Principal() {
entier32 résultat = Additionner(20, 22);
si (résultat == 42) {
retourner résultat;
}
retourner 0;
}
}La même API peut être écrite avec les alias anglais tels que namespace,
public, return, if et else.
Sources et interfaces
.Gs++ / .GsPP / .GsPlusPlus
.HGs++ / .HGsPP / .HeaderGsPlusPlus
│
▼
gsppc
│
├── .GsObj objet natif Gs++
├── .GsA bibliothèque native Gs++
└── .GsE image exécutable Gs++
Les signatures canoniques sont GSOBJ:0, GSA:0 et GSE:0. Les trois
formats binaires sont en version 1.0 et leurs champs ABI valent 1. La cible
actuelle utilise la signature de liaison GsAbi:x64-ms-v1.
| Usage | Extensions |
|---|---|
| Sources | .Gs++, .GsPP, .GsPlusPlus |
| Interfaces | .HGs++, .HGsPP, .HeaderGsPlusPlus |
| Projets | .GsPj, .GsProject |
| Solutions | .GsPs |
| Objets | .GsObj |
| Bibliothèques | .GsA |
| Exécutables | .GsE |
Les projets et solutions utilisent un schéma XML strict en version 1.0 :
<?xml version="1.0" encoding="UTF-8"?>
<GsProjet Version="1.0" Nom="Bonjour" Type="executable">
<Source Chemin="Bonjour.Gs++" />
<Construction Sortie="Construction/Bonjour.GsE" />
</GsProjet>Le vocabulaire XML anglais équivalent utilise GsProject, Source Path et
Build Output.
- CMake 4.2 ou plus récent sous Windows pour le générateur Visual Studio 2026 ;
- CMake 3.20 ou plus récent sous Linux ;
- un compilateur C++20 ;
- Python 3 pour la conformité ;
- Ninja, Bash et les outils GNU usuels pour l’intégration Linux.
cmake --preset windows-release
cmake --build --preset windows-release --target espace_travail
ctest --preset windows-releasecmake --preset linux-release
cmake --build --preset linux-release --target espace_travail
ctest --preset linux-releaseLes sorties restent séparées du dépôt dans
../Construction/GsPlusPlus-Development/.... Les outils sont placés dans le
sous-dossier Bin et les bibliothèques Gs++ dans
Artefacts/GsPlusPlus.
Le fichier racine VERSION est l’unique source de vérité technique
pour la version du produit. CMake la propage aux outils, aux métadonnées GsE par
défaut, aux tests, au benchmark et aux noms de paquets.
Après une construction Windows :
../Construction/GsPlusPlus-Development/VisualStudio/Release/Bin/gsppc.exe `
Exemples/Bonjour.Gs++ `
--format gsobj `
-o Bonjour.GsObjSous Linux :
../Construction/GsPlusPlus-Development/Ninja/Release/Bin/gsppc \
Exemples/Bonjour.Gs++ \
--format gsobj \
-o Bonjour.GsObjLa release 0.27.0-alpha.8
propose des paquets x86-64 pour Windows et Linux. Chaque paquet contient les
outils, les en-têtes SDK, les bibliothèques Gs++, les exemples et la
documentation Markdown. Le fichier SHA256SUMS.txt permet de vérifier les
téléchargements.
GsPlusPlus/
├── Compiler/ compilateur natif, éditeur de liens et outils GsE
├── SDK/ en-têtes des formats et contrats publics
├── Bibliotheques/ bibliothèques système et hébergée
├── AutoHebergement/ composants écrits en Gs++
├── Exemples/ programmes de découverte
├── Tests/ tests unitaires, intégration et conformité
├── Benchmarks/ mesures reproductibles
└── Documentation/ spécifications et preuves de validation
- Index de la documentation courante
- Notes de la dernière publication
- Spécification candidate du langage 1.0
- Conventions de code Gs++ 1.0
- Format XML des projets et solutions 1.0
- Formats GsObj 1.0, GsA 1.0 et GsE 1.0
- ABI native x86-64
- Matrice de conformité
- Frontend auto-hébergé 0.27
- Validation de
0.27.0-alpha.8 - Feuille de route
Toute la documentation normative est maintenue en Markdown comme source principale.
- conformité portable : 20/20 sous MSVC et GNU ;
- CTest : 4/4 sous Windows et 5/5 sous Linux ;
- quatre scénarios de benchmark smoke réussis sur chaque hôte ;
- CI GitHub Windows et Linux ;
- l’unique image auto-hébergée
Frontend.GsE, qui réunit les quatre étapes du frontend, est comparée entre les deux chaînes validées ; - typage récursif différentiel des indexations, de
&, de*et des appels indirects, y compris les callbacks imbriqués ; - sélection différentielle des opérateurs libres, y compris les surcharges, références qualifiées, ambiguïtés, arités et opérateurs unaires ;
- validation différentielle des vingt-quatre opérateurs intrinsèques, avec adaptation des littéraux ;
- liaisons de références qualifiées, conversions d’héritage, affectations et retours alignés sur le bootstrap ;
- contraintes structurelles et numériques des déclarations, énumérations et initialiseurs globaux alignées sur le bootstrap, pour un total de 195 corpus négatifs dont le code, la ligne et la colonne sont contrôlés.
Gs++ est distribué sous la Mozilla Public License 2.0.
