Skip to content

Repository files navigation

Logo Gs++

Un langage système natif bilingue, du code source au code machine.

Validation Gs++ Version Plateformes Licence MPL-2.0

Français · English

Qu’est-ce que Gs++ ?

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.8

Cette 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.GsE regroupe 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, types vide, 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.

Principes du langage

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.

Un premier programme

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.

Chaîne de production

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.

Extensions

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.

Construction

Prérequis

  • 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.

Windows — Visual Studio 2026

cmake --preset windows-release
cmake --build --preset windows-release --target espace_travail
ctest --preset windows-release

Linux — GNU et Ninja

cmake --preset linux-release
cmake --build --preset linux-release --target espace_travail
ctest --preset linux-release

Les 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.GsObj

Sous Linux :

../Construction/GsPlusPlus-Development/Ninja/Release/Bin/gsppc \
  Exemples/Bonjour.Gs++ \
  --format gsobj \
  -o Bonjour.GsObj

Télécharger une préversion

La 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.

Organisation du dépôt

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

Documentation

Toute la documentation normative est maintenue en Markdown comme source principale.

Validation actuelle

  • 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.

Licence

Gs++ est distribué sous la Mozilla Public License 2.0.

About

Compilateur, SDK et bibliothèques autonomes du langage Gs++.

Topics

Resources

Code of conduct

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages