Repository navigation
Langage
Le langage est indépendant des cibles. JavaScript, Python et C expérimental sont les backends actifs ; C++ et Java sont visibles mais indisponibles.
| Type | Détail |
|---|---|
short int, short uint
|
entiers 16 bits signés / non signés |
int, uint
|
entiers 32 bits signés / non signés |
float, double
|
IEEE 754 32 / 64 bits |
string |
texte Unicode |
char |
scalaire Unicode unique |
boolean |
vrai / faux |
void |
retour de fonction ou de lambda uniquement |
T[] |
tableau d’un type |
T* |
pointeur vers un primitif non void
|
(T, …) → R |
signature de fonction |
Aucune conversion implicite, aucune promotion, aucun type de secours. Les littéraux et déclarations sont explicitement typés.
| Construction | Rôle |
|---|---|
VariableDeclaration |
variable typée, initialiseur optionnel |
ConstantDeclaration |
constante typée, initialiseur requis |
FunctionDeclaration |
fonction typée, paramètres, corps, point d’entrée optionnel |
Parameter |
paramètre typé |
TypeDeclaration |
alias transparent d’un primitif |
Block |
liste d’instructions |
ReturnStatement |
retour, avec ou sans valeur |
IfStatement |
test booléen, branche, alternative optionnelle |
WhileStatement |
boucle avec test |
ForStatement |
initialiseur, test, mise à jour, corps |
BreakStatement, ContinueStatement
|
contrôle de boucle |
ExpressionStatement |
expression utilisée comme instruction |
AssignmentStatement |
affectation d’une variable, d’un paramètre, d’une case ou d’un *p
|
BinaryExpression, UnaryExpression
|
opérations typées |
Literal |
valeur explicitement typée |
Reference |
référence vers une déclaration |
CallExpression |
appel direct ou via une valeur de type fonction |
CastExpression |
conversion numérique explicite |
ArrayLiteral, ArrayCreation, ArrayAccess
|
tableaux |
LambdaExpression |
fonction anonyme, corps expression |
ForEachStatement |
parcours avec rappel |
NewExpression |
instanciation d’une classe |
MemberExpression |
lecture ou appel d’un membre |
ThisExpression |
instance courante dans une méthode |
MathCall |
opération native SP3 |
PrintStatement |
sortie de simulation |
- Les opérateurs exigent des types compatibles ;
+n’additionne pas unintet undouble. -
and,or,notsont booléens. - Une comparaison produit un
boolean. - Les appels vérifient arité, types et signature.
- Une fonction non
voiddoit retourner sur tous les chemins prouvés. - Un tableau ne peut pas être retourné par une fonction, sauf élément générique.
- Un
voidne peut pas être une valeur.
- Exports de fonctions de premier niveau.
- Imports avec nom local.
- Une référence intermodule passe par un import explicite.
- Les flèches de dépendance n’apparaissent que pour un export réellement utilisé.
Une carte Class crée un module source kind: 'class' avec deux scopes : public et private. Chaque membre — attribut, constante, méthode, constructeur compris — porte sa visibilité. Une classe s’instancie avec new, son type {kind:'class', classId} est annotable sur les variables, constantes, paramètres et retours, et this désigne l’instance courante dans les méthodes et le constructeur.
- Constructeur nommé
constructor, retourvoid, visibilité public ou private. - Accès privés et constructeurs privés contrôlés.
- Aucun héritage ni polymorphisme.
- La simulation crée l’instance, initialise les attributs et lie
this. - Les classes sont transpilées en JavaScript/Python ; le C expérimental les refuse (
TRANSPILE_C_UNSUPPORTED).
Une fonction peut déclarer jusqu’à huit paramètres de type (T, U…) avec une contrainte exacte optionnelle. L’inférence se fait sur un appel direct ; tous les paramètres doivent être inférés avec des types identiques. Les tableaux génériques (T[]) sont acceptés. T*, T[][] et les génériques imbriqués sont refusés.
Une LambdaExpression a des paramètres typés et un corps expression unique. Elle capture lexicalement les variables visibles, par référence. Elle peut être stockée, passée en callback, appelée immédiatement ou retournée par une fonction. Pas d’affectation ni de boucle dans son corps ; pas d’adresse sur ses paramètres ; pas de générique.
-
&xprend l’adresse d’une variable, constante, paramètre ou case de tableau. -
*prelit la valeur pointée. -
*p = vécrit réellement à travers le pointeur. - Une constante reste protégée, même via un pointeur recopié.
Sur une variable, constante ou paramètre, le panneau de propriétés permet d’attacher des contraintes :
- nombres : positif, non négatif, non nul, pair, impair, supérieur/inférieur, entre deux bornes ;
- chaînes : non vide, non blanc, une ligne, commence/finit par, contient, longueur min/max ;
- tableaux : non vide, éléments uniques, tri croissant ;
- booléens : vrai/faux.
Pendant Run, une violation est signalée avec le nom, la règle, le pas et la valeur, sans interrompre le programme.
-
Maths :
abs,min,max,pow, trigonométrie, arrondis, logarithme, etc. - Texte : longueur, caractère, portion, recherche.
- Tableaux : longueur, remplissage, tranche, concaténation, recherche, index, inversion.
-
Aléatoire : réel dans
[0,1), entier dans une plage. - Grille/écran : remplissage, convolution, table de transition, blit, présentation.
Toutes sont locales, sans effet natif ni réseau.
- Classes sans héritage ni polymorphisme ; transpilées en JavaScript/Python, refusées par le C expérimental.
- Pas de structures ni de sous-modules.
-
TypeDeclarationreste un alias. - Pas d’interfaces ni d’héritage.
- Pas de saisie interactive, de fichier ou de réseau dans le programme simulé, hors boutons d’entrée déclarés par le projet.
Sapphire 3 — wiki du projet. Licence MIT. Documentation source : docs/ et abstract/. Dernière mise à jour : 11 novembre 2026.
Sapphire 3
Comprendre
Utiliser
Projet