This commit is contained in:
2026-09-13 21:59:15 +02:00
parent b72193d656
commit 6e0a4a91d9
19 changed files with 434 additions and 151 deletions

View File

@@ -196,7 +196,7 @@ map[key] -> V // strict
map::get(key) -> Option<V> // conditionnel
map[key] = value // remplacement seulement
map::insert(key, value) // clé nouvelle, DuplicateKeyFault sinon
map::remove(key) // clé existante, KeyNotFoundFault sinon
map::remove(key) -> V // clé existante, KeyNotFoundFault sinon
map::clear() -> uint64
```
@@ -344,4 +344,4 @@ range
## DO / DON'T / WHY / compiler error / edge cases
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.\n\n## Exemples 0.2.18 — Vector / Slice / hashing\n\n### Vector 1 — backing stable et slices\n\n```text\nVector<int32> values = Vector<int32>::builder()\n ::append(10)\n ::append(20)\n ::append(30)\n ::build();\n\nSlice<int32> part = values::slice(0..<2);\n\nvalues::reserve(1000); // part reste valide\nvalues::append(40); // part reste valide\nvalues[0] = 11; // part reste valide et observe 11\n\nvalues::insert(0, 5); // part devient invalide en V1\npart[0]; // SliceInvalidatedFault\n```\n\n### Vector 2 — API structurelle\n\n```text\nvalues::append(value); // -> Void\nvalues::insert(index, value); // index <= length()\nT removed = values::removeAt(index);\nuint64 removedCount = values::clear();\n```\n\n### DON'T — literal de Vector\n\n```text\nVector<int32> values = [1, 2, 3]; // ERROR\n```\n\n### DO — builder explicite\n\n```text\nVector<int32> values = Vector<int32>::builder()\n ::append(1)\n ::append(2)\n ::append(3)\n ::build();\n```\n\n### Hash 1 — contrats Core\n\n```text\ninterface Equatable<T> extends OpEqual<T> {\n}\n\ninterface Hashable {\n const method hash(Hasher hasher) -> Void;\n}\n\ninterface Hasher {\n method writeBytes(const Slice<uint8> bytes) -> Void;\n const method finish() -> uint64;\n}\n```\n\n### Hash 2 — clé stable\n\n```text\nclass UserKey implements Equatable<UserKey>, Hashable {\n const uint64 id;\n String label;\n\n // == et hash reposent uniquement sur id.\n // label peut changer sans modifier l'identité hashable.\n}\n```\n\n### DON'T — identité hashable mutable\n\n```text\nclass BadKey implements Equatable<BadKey>, Hashable {\n String name;\n\n // DON'T si == et hash dépendent de name et que name peut changer.\n}\n```\n\n### HashSet / HashMap\n\n```text\nHashSet<T>\n where T implements Equatable<T>\n where T implements Hashable\n\nHashMap<K,V>\n where K implements Equatable<K>\n where K implements Hashable\n```\n\nL'ordre d'itération n'est pas garanti. Une collision de hash n'est pas une erreur ; l'égalité distingue les valeurs.\n\n### HashMapBuilder — doublons stricts\n\n```text\nHashMap<String,int32> values = HashMap<String,int32>::builder()\n ::insert("one", 1)\n ::insert("two", 2)\n ::build();\n\nHashMap<String,int32>::builder()\n ::insert("one", 1)\n ::insert("one", 2); // DuplicateKeyFault\n```\n