v0.2.12
This commit is contained in:
101
chapters/031-fichiers-source-v1.md
Normal file
101
chapters/031-fichiers-source-v1.md
Normal file
@@ -0,0 +1,101 @@
|
||||
# 31. Fichiers source V1
|
||||
|
||||
## 31.1 `.saseltype` — V1 REQUIS — FIGÉ
|
||||
|
||||
- namespace obligatoire après en-tête/docs ;
|
||||
- exactement un type nominal top-level parmi `class`, `struct`, `enum`, `interface`, `union` ;
|
||||
- nom du fichier exactement identique au nom du type, extension exclue ;
|
||||
- comparaison sensible à la casse même sur un filesystem qui ne l'est pas ;
|
||||
- chemin relatif au `source_root` cohérent avec le namespace ;
|
||||
- pas de fonctions/variables/constants top-level auxiliaires.
|
||||
|
||||
Exemple :
|
||||
|
||||
```text
|
||||
src/compiler/lexer/Token.saseltype
|
||||
namespace compiler.lexer;
|
||||
public final class Token { ... }
|
||||
```
|
||||
|
||||
## 31.2 `.sasel` — V1 REQUIS — FIGÉ
|
||||
|
||||
- namespace obligatoire et cohérent avec le répertoire ;
|
||||
- imports ;
|
||||
- fonctions libres ;
|
||||
- variables/constants top-level ;
|
||||
- pas de type nominal top-level ;
|
||||
- nom de fichier ASCII minuscule suivant `[a-z][a-z0-9_]*.sasel` ;
|
||||
- aucune correspondance obligatoire entre le nom du fichier et les symboles qu'il contient.
|
||||
|
||||
Un fichier `.sasel` peut porter le même nom qu'un sous-répertoire/sous-namespace voisin. Le nom du fichier ne participe pas à l'identité des symboles et la distinction `.` / `::` évite une ambiguïté de résolution.
|
||||
|
||||
## 31.3 `.saselrun` — V1 REQUIS — FIGÉ
|
||||
|
||||
Le point d'entrée source d'un package `bin` est obligatoirement :
|
||||
|
||||
```text
|
||||
<source_root>/main.saselrun
|
||||
```
|
||||
|
||||
Règles :
|
||||
|
||||
- directement sous `source_root` ;
|
||||
- nom exact `main.saselrun` ;
|
||||
- pas de namespace ;
|
||||
- imports ;
|
||||
- exactement `main` ;
|
||||
- pas de helpers top-level ;
|
||||
- exactement un `main.saselrun` par package `bin` ;
|
||||
- `main.saselrun` interdit dans un package `lib`.
|
||||
|
||||
Cette règle évite d'introduire un champ de manifest destiné uniquement à choisir entre plusieurs points d'entrée concurrents.
|
||||
|
||||
## 31.4 `.saselscript` — V1 RÉSERVÉ
|
||||
|
||||
Extension réservée pour le futur environnement browser Saselang.
|
||||
|
||||
Direction actuelle :
|
||||
|
||||
- pas de namespace ;
|
||||
- entrée browser ;
|
||||
- plusieurs scripts possibles ;
|
||||
- un script ne doit pas importer directement un autre `.saselscript` ;
|
||||
- le code réutilisable doit venir de modules/libraries.
|
||||
|
||||
La V1 LLVM n'est pas obligée d'implémenter le runtime browser.
|
||||
|
||||
## 31.5 `module.saselmod` — V1 REQUIS — FIGÉ EN PRINCIPE
|
||||
|
||||
Nom exact :
|
||||
|
||||
```text
|
||||
module.saselmod
|
||||
```
|
||||
|
||||
Fichier entièrement optionnel.
|
||||
|
||||
S'il existe, il commence obligatoirement par une déclaration `namespace` correspondant exactement au répertoire.
|
||||
|
||||
Il ne contient :
|
||||
|
||||
- ni exports ;
|
||||
- ni reexports ;
|
||||
- ni dépendances de package ;
|
||||
- ni options de build générales ;
|
||||
- ni code exécutable arbitraire.
|
||||
|
||||
Un développeur voulant réexposer une API doit écrire un wrapper explicite.
|
||||
|
||||
Responsabilités prévues :
|
||||
|
||||
```text
|
||||
doc module-wide
|
||||
deprecated module-wide
|
||||
policies module-wide (ex: forbid unsafe)
|
||||
requirements de feature
|
||||
target/capability requirements lorsque pertinent
|
||||
```
|
||||
|
||||
Syntaxe précise de ces directives : V1 À FINALISER.
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user