12 KiB
12 KiB
Changelog documentaire — 0.2.18
0.2.18
Vector<T>fermé commeResizableList<T>contigu à longueur runtime dynamique, avecappend,insert,removeAt,clear,capacity,reserveetslice;Vector::append(T) -> Voidfigé ;insert(index,value)accepte0 <= index <= length()et produitIndexOutOfBoundsFaultau-delà ;Vector::removeAt(index) -> Tfigé avecIndexOutOfBoundsFaultpour un index invalide ;- garanties de complexité de
Vectorfigées : indexation O(1), cardinalité O(1), append O(1) amorti, insert/removeAt O(n), slice O(1), capacity O(1), reserve O(n) au pire ; - aucun
reserveExact,resizeimplicite ni opération générale de shrink dans le contrat standard deVector; - construction dynamique explicite par class methods/factories et
VectorBuilder<T>; le littéral[...]reste réservé aux arrays contextualisés ; - backing storage stable retenu dès V1 pour
Vector/Slice: une relocalisation physique,reserve, un remplacement d’élément ouappendne rendent pas les slices existantes invalides ; - en V1,
insert,removeAtet uncleareffectif invalident toutes les slices dérivées du vector ; un accès ultérieur produitSliceInvalidatedFault; Equatable<T>introduit comme capacité Core réutilisant le contrat opérateur canoniqueOpEqual<T>sans seconde implémentation de l’égalité ;Object::sameInstance(...)renommé enObject::sameIdentity(...)pour distinguer explicitement identité de référence et égalité logique ;Hashablefixé dans le Core avec stabilité normative de l’identité hashable pendant toute la durée de vie de la valeur ;Hasherfixé dans le Core ; ses implémentations concrètes restent des implémentations SDK/runtime ;- contrat minimal
Hasher::writeBytes(const Slice<uint8>)+finish() -> uint64, avec framing canonique Core des valeurs fondamentales etfinish()non mutateur ; HashSet<T>etHashMap<K,V>fermés comme implémentations SDK non ordonnées exigeant respectivementTouKEquatable + Hashable;- collisions de hash définies comme normales et résolues par l’égalité ; aucune
HashCollisionFault; - hasher/seed internes des collections hashées non contractuels et potentiellement différents entre instances ; ordre d’itération non stable/non garanti ;
ResizableMap::remove(key)retourne désormaisVet reste strict avecKeyNotFoundFault;- builders
Vector,HashSetetHashMapmutables, chaînables, non consommés parbuild()et produisant des résultats sémantiquement indépendants ; - un doublon dans
HashSetBuildersuit la sémantique idempotente du set ; une clé dupliquée dansHashMapBuilderproduitDuplicateKeyFault; - la sémantique flottante de cette révision référence explicitement IEEE 754-2019, standard actif au moment de la révision ; une future norme finale devra être adoptée explicitement par une révision de Saselang.
0.2.17
- hiérarchie
Errorétendue à trois branches sœurs :ResultError,Exception,Fault; Exceptionreste checked viathrow/throws, tandis queFaultest unchecked, capturable et documentable parfaults;- ajout du statement
faultréservé aux descendants deFault; catchlimité aux branchesExceptionetFault, jamaisErrorouResultError;faultsdéfini comme clause optionnelle, non exhaustive et sans propagation obligatoire ;throwsrendu indépendant du type de retour : une callable retournant directementTpeut déclarer des exceptions checked ;- suppression du principe « toute opération faillible doit retourner
Result» ;Resultreste réservé aux échecs explicitement transportés comme valeurs ; - suppression des duplications automatiques
op()/tryOp()lorsqu'elles ne diffèrent que par le canal d'échec ; - conversions numériques canoniques migrées vers valeur directe +
NumericConversionFault; NumericConversionErrorremplacé parNumericConversionFault, avecNotFinite,NotIntegral,OutOfRange,Inexact;- conversions Unicode invalidables migrées vers valeur directe +
UnicodeEncodingFault, sans famillestryFrom/tryToparallèles mécaniques ; PartialOrderingséparé deOrdering;Orderingcontient uniquementLess,Equal,Greater;Comparable<T>etComparator<T>retenus pour l'ordre naturel/principal et l'ordre externe ; un comparator explicite gagne toujours ;Iterable<T>::iterator()etIterator<T>::next() -> Option<T>figés ;Iterator<T>reste distinct d'Iterable<T>;- ajout de
View<T> extends Iterable<T>aveccount()/isEmpty()et sanscontains()obligatoire ; Set<T>/ResizableSet<T>fermés, avecclear() -> uint64;Map<K,V>n'est pas directementIterable;keys()/values()/entries()retournent des vues ;- indexation map stricte
map[key] -> V,get(key) -> Option<V>, affectation indexée limitée au remplacement d'une clé existante ; ResizableMaputiliseinsert,remove,clear, avec faults stricts au lieu de variantestryInsert/tryRemovemécaniques ;MapEntry<K,V>reste une valeur de lecture et non un proxy mutable vers la map ;SortedSet<T>,SortedMap<K,V>,TreeSet<T>etTreeMap<K,V>définis en principe ; création par factoriesnatural()/withComparator();- les garanties concurrentes de collections restent orthogonales et relèvent du SDK (
ConcurrentMap, etc.) sans symétrie artificielle ; - le chapitre mémoire identifie désormais explicitement le sous-modèle pointeurs : références de classe, slices, pointeurs Saselang, raw/FFI et function pointers.
0.2.16
Array<T>fixé comme séquence contiguë de longueur runtime fixe ;StaticArray<T,N>fixé comme séquence contiguë de longueur compile-time fixe ;Slice<T>défini comme vue contiguë fixe, non redimensionnable/non déplaçable et sans copie sémantique ;- propagation de
constvers les slices et leurs éléments, sans lifetimes utilisateur visibles ; - initialisation complète obligatoire des arrays avant observation safe ;
- littéraux
[...],filled,emptyet principe degeneratedéfinis ; filled()répète selon la sémantique normale deTet ne clone jamais implicitement les objets de classe ;Collection<T>distinguecount();List<T>ajoute la sémantique de séquence etlength();- hiérarchie
Iterable -> Collection -> List -> SettableList -> ResizableListretenue ; List<T>repose surOpIndex<uint64,T>etSettableList<T>ajouteOpIndexMut<uint64,T>;- capacité intrinsèque et permission
constexplicitement séparées ; String::substring()produit uneStringsémantiquement indépendante tout en autorisant le partage physique interne ;- aucun
StringViewintroduit ni réservé ; - ajout d'une couche de bibliothèques officielles
.saselib, sans notion spéciale d'addon ; - politique de bootstrap natif puis remplacement progressif par des saselib Saselang ;
saselang/mapdb*retenu comme exemple de famille officielle spécialisée.
0.2.15
- mutabilité ordinaire confirmée par défaut ; aucun
mutrequis pour les variables/objets ordinaires ; constdé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
constinté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 ; Stringmutable via API contrôlée ;const Stringbloque les mutations via cet accès ;- intégration Core de
Utf8Char,Utf16Char,Utf32Char,Utf8String,Utf16String,Utf32String; Stringsans[];UtfXString[index]lit une code unit brute etOpIndexMutreste 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 ;
Numericretenu comme vraie abstraction Core utilisable dans les contraintes génériques ;- const generics V1 limités aux types de paramètres
bool,char,uint8..uint256et enums simples sans payload ; - arguments const generic volontairement boring : aucune callable directement dans
<...>; calcul complexe matérialisé d'abord dans uneconst; - 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 pourfloat -> float;NumericConversionErrorstabilisé conceptuellement autour deNotFinite,NotIntegral,OutOfRange,Inexact;- matrice
float -> integerré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...ettryTruncateTo...; float -> integerréduit aux famillestryTo...,trySaturateTo...ettryWrapTo..., composables avecfloor(),ceil(),round()ettruncate();- 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 ;
isfigé comme test d'appartenance à une hiérarchie polymorphe ;instanceoffigé 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 ;
NumericConversionErrorretenu 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.