Files
saselang-bible/003-CHANGELOG.md
2026-09-12 19:31:05 +02:00

4.7 KiB

Changelog documentaire — 0.2.15

0.2.15

  • mutabilité ordinaire confirmée par défaut ; aucun mut requis pour les variables/objets ordinaires ;
  • const défini comme restriction d'accès locale : pas de réaffectation ni mutation via cet accès, sans immutabilité globale ;
  • alias mutable -> alias const autorisé ; augmentation const -> mutable interdite pour les accès référence ;
  • propagation const à travers les membres accédés depuis un receiver const ;
  • introduction de const method, distincte de la pureté, et règles pour paramètres/retours const ;
  • qualification const intégrée au contrat d'override/implémentation ;
  • rejet explicite d'un modèle visible Rust-like basé sur immutabilité par défaut, mut, borrow/lifetimes ordinaires ;
  • String mutable via API contrôlée ; const String bloque les mutations via cet accès ;
  • intégration Core de Utf8Char, Utf16Char, Utf32Char, Utf8String, Utf16String, Utf32String ;
  • String sans []; UtfXString[index] lit une code unit brute et OpIndexMut reste absent ;
  • aucune conversion/transcodage textuel implicite : conversion explicite avant append, concaténation ou autre opération ;
  • ajout de l'annexe B pour les conversions Unicode/encodages.

0.2.14

  • fermeture du socle generics V1 : syntaxe, inférence d'appel, contraintes nominales, invariance, absence de CTAD/wildcards/spécialisation ;
  • Numeric retenu comme vraie abstraction Core utilisable dans les contraintes génériques ;
  • const generics V1 limités aux types de paramètres bool, char, uint8..uint256 et enums simples sans payload ;
  • arguments const generic volontairement boring : aucune callable directement dans <...> ; calcul complexe matérialisé d'abord dans une const ;
  • inférence const generic structurelle uniquement, sans solveur algébrique ;
  • récursivité générique régulière autorisée ; auto-référence transformante et polymorphic recursion interdites V1 ;
  • toute récursivité by-value interdite, y compris via une instanciation de taille théoriquement nulle ;
  • cycles d'héritage interdits, diamants non cycliques autorisés ;
  • classes récursives autorisées via leurs références d'objet ;
  • distinction nominalement connu / sémantiquement complet / layout-complet et suppression du besoin de forward declarations utilisateur ;
  • imports explicites requis même entre deux types du même namespace ; les imports sont déclaratifs, non exécutables, et leurs cycles sont autorisés ;
  • NaN, infinities et zéros signés stabilisés pour float -> float ;
  • NumericConversionError stabilisé conceptuellement autour de NotFinite, NotIntegral, OutOfRange, Inexact ;
  • matrice float -> integer réduite par paire selon la règle anti-doublon ;
  • conversions fondamentales Core obligatoires pour toute paire de types supportés, avec émulation logicielle lorsque raisonnable ;
  • nomenclature de capabilities organisée par propriétaires language.*, core.*, target.*, platform.*, sdk.* ;
  • V1/V2 explicitement positionnées comme bases/POC, V3 comme première baseline publique de stabilité.

0.2.13

  • règle générale de composition Core figée : aucune méthode combinée lorsqu'une chaîne d'opérations existantes exprime exactement la même sémantique ;
  • suppression conceptuelle des alias tryFloorTo..., tryCeilTo..., tryRoundTo... et tryTruncateTo... ;
  • float -> integer réduit aux familles tryTo..., trySaturateTo... et tryWrapTo..., composables avec floor(), ceil(), round() et truncate() ;
  • maintien des méthodes combinées uniquement lorsqu'une composition changerait le contrat ou perdrait l'information nécessaire ;
  • saturatingRoundToFloatXX() reste justifié pour les conversions flottantes où arrondi et saturation ne peuvent pas être séparés sans changer la sémantique.

0.2.12

  • migration de la Bible monolithique vers une distribution multifichier ;
  • ajout d'un fichier compagnon examples / DO-DON'T par chapitre ;
  • ajout des vues Language/Compiler, Language+Core et Platform ;
  • ajout de l'annexe exhaustive des conversions numériques ;
  • is figé comme test d'appartenance à une hiérarchie polymorphe ;
  • instanceof figé comme test de classe runtime exacte, limité aux classes concrètes non abstraites ;
  • upcast par assignabilité ; downcast canonique par is + refinement ;
  • conversions numériques exposées par le Core plutôt que multipliées comme syntaxe compiler-specific ;
  • NumericConversionError retenu comme nom de travail ;
  • règle de non-redondance des variantes de conversion ;
  • nom saturatingRoundToFloatXX() retenu lorsqu'arrondi et saturation doivent tous deux être annoncés ;
  • modèle de livraison documentaire full + deltas SemVer.