1.6 KiB
1.6 KiB
51. Invariants de conception
Les futures décisions doivent respecter les invariants suivants :
- Une sémantique Saselang ne change pas silencieusement selon le backend.
- Le frontend reste indépendant de LLVM.
- V1 est suffisamment complet pour construire le compilateur/interpréteur sans inventer des règles pendant l'implémentation.
- V2 doit pouvoir réimplémenter V1 en Saselang.
- Les décisions V1 évitent de bloquer les backends V3+ sans prétendre les spécifier définitivement.
- Pas de préprocesseur textuel.
- Pas de magie lorsque la même capacité peut être exprimée explicitement et de façon déterministe.
- Pas de duplication de concepts par des alias syntaxiques gratuits.
- Les types Core compiler-known restent peu nombreux.
- Le package, le namespace, le target, la feature, la capability et l'artifact restent des dimensions distinctes.
- Une collision de namespace entre packages ne doit jamais fusionner implicitement leurs types.
- Les erreurs récupérables utilisent
Result; les opérations réellement infaillibles retournent directement leur valeur. throwsn'existe que sur une callable retournantResult.- L'identité d'objet est distincte de l'égalité de valeur.
- Les opérateurs utilisateur passent uniquement par les contrats Core
Op.... - Les interfaces fournissent l'héritage multiple de contrats/comportements sans introduire un second système de traits.
- Le modèle mémoire V1 doit fournir performances, sûreté et destruction déterministe sans imposer des lifetimes explicites partout.