v0.2.15
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 2 — Principes généraux du langage
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -111,6 +111,13 @@ Map<String,List<int32>>
|
||||
}
|
||||
```
|
||||
|
||||
### Exemple 12
|
||||
|
||||
```text
|
||||
String text = "abc";
|
||||
text::append("def"); // OK si append est une méthode mutante de String
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 6 — Types, variables, constantes et scopes
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -21,6 +21,84 @@
|
||||
foo(a(), b(), c())
|
||||
```
|
||||
|
||||
### Exemple 3
|
||||
|
||||
```text
|
||||
Type value = ...;
|
||||
```
|
||||
|
||||
### Exemple 4
|
||||
|
||||
```text
|
||||
const Type value = ...;
|
||||
```
|
||||
|
||||
### Exemple 5
|
||||
|
||||
```text
|
||||
interdit la réaffectation du binding
|
||||
interdit toute mutation obtenue uniquement à travers ce binding
|
||||
n'impose aucune immutabilité globale à l'objet éventuellement référencé
|
||||
n'affecte pas les autres alias mutables légitimes
|
||||
```
|
||||
|
||||
### Exemple 6
|
||||
|
||||
```text
|
||||
User a = ...;
|
||||
const User b = a;
|
||||
|
||||
a::setName("John"); // OK
|
||||
b::setName("John"); // ERROR
|
||||
b::getName(); // OK et observe la modification faite via a
|
||||
```
|
||||
|
||||
### Exemple 7
|
||||
|
||||
```text
|
||||
const User user = ...;
|
||||
|
||||
user::address::getCity(); // OK si const method
|
||||
user::address::setCity("Paris"); // ERROR
|
||||
```
|
||||
|
||||
### Exemple 8
|
||||
|
||||
```text
|
||||
const User source = ...;
|
||||
User mutable = source; // ERROR
|
||||
```
|
||||
|
||||
### Exemple 9
|
||||
|
||||
```text
|
||||
User source = ...;
|
||||
const User readonly = source; // OK
|
||||
```
|
||||
|
||||
### Exemple 10
|
||||
|
||||
```text
|
||||
const int32 a = 10;
|
||||
int32 b = a; // OK
|
||||
b = 20; // OK
|
||||
```
|
||||
|
||||
### Exemple 11
|
||||
|
||||
```text
|
||||
class Document {
|
||||
const User owner;
|
||||
}
|
||||
```
|
||||
|
||||
### Exemple 12
|
||||
|
||||
```text
|
||||
this::owner = other; // ERROR après initialisation
|
||||
this::owner::setName(...); // ERROR via cet accès
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 15 — Fonctions, méthodes et `clsmethod`
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -48,6 +48,67 @@ return Result::Ok(value);
|
||||
return Result::Ok(Void);
|
||||
```
|
||||
|
||||
### Exemple 6
|
||||
|
||||
```text
|
||||
class User {
|
||||
const method getName() -> String {
|
||||
return this::name;
|
||||
}
|
||||
|
||||
method setName(String name) -> Void {
|
||||
this::name = name;
|
||||
return Void;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Exemple 7
|
||||
|
||||
```text
|
||||
User a = ...;
|
||||
const User b = a;
|
||||
|
||||
a::setName("John"); // OK
|
||||
a::getName(); // OK
|
||||
|
||||
b::getName(); // OK
|
||||
b::setName("John"); // ERROR
|
||||
```
|
||||
|
||||
### Exemple 8
|
||||
|
||||
```text
|
||||
réassigner un champ via this
|
||||
appeler une method non-const via this
|
||||
obtenir puis exposer comme mutable un accès disponible uniquement via this const
|
||||
```
|
||||
|
||||
### Exemple 9
|
||||
|
||||
```text
|
||||
allouer des valeurs locales
|
||||
modifier des valeurs locales mutables
|
||||
faire de l'I/O
|
||||
faire du logging
|
||||
lever une Exception déclarée
|
||||
modifier un état externe auquel elle possède indépendamment un accès mutable
|
||||
```
|
||||
|
||||
### Exemple 10
|
||||
|
||||
```text
|
||||
func display(const User user) -> Void
|
||||
```
|
||||
|
||||
### Exemple 11
|
||||
|
||||
```text
|
||||
const method getOwner() -> const User {
|
||||
return this::owner;
|
||||
}
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 16 — Dispatch, override et modificateurs
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -12,6 +12,7 @@ visibility
|
||||
-> linkage / ABI
|
||||
-> type / dispatch modifiers
|
||||
-> override
|
||||
-> access qualifier
|
||||
-> declaration kind
|
||||
```
|
||||
|
||||
@@ -31,8 +32,9 @@ public open class Service
|
||||
public abstract class Base
|
||||
public unsafe extern "C" union NativeValue
|
||||
protected open method calculate(...)
|
||||
protected const method inspect(...)
|
||||
protected override method calculate(...)
|
||||
protected final override method calculate(...)
|
||||
protected final override const method inspect(...)
|
||||
```
|
||||
|
||||
### Exemple 4
|
||||
@@ -59,6 +61,16 @@ override method
|
||||
final override method
|
||||
```
|
||||
|
||||
### Exemple 8
|
||||
|
||||
```text
|
||||
const method
|
||||
doit être implémentée/overridée par const method
|
||||
|
||||
method
|
||||
doit être implémentée/overridée par method
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,31 +1,18 @@
|
||||
# Exemples / DO-DON'T — Chapitre 21 — Strings, Unicode et encodages
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
```text
|
||||
Utf8String
|
||||
Utf16String
|
||||
Utf32String
|
||||
AsciiString éventuel
|
||||
Bytes
|
||||
String text = "abc";
|
||||
text::append("def"); // OK
|
||||
```
|
||||
|
||||
### Exemple 2
|
||||
|
||||
```text
|
||||
byte
|
||||
code unit
|
||||
Unicode scalar
|
||||
code point
|
||||
grapheme cluster
|
||||
```
|
||||
|
||||
### Exemple 3
|
||||
|
||||
```text
|
||||
'A'
|
||||
'é'
|
||||
@@ -35,8 +22,184 @@ grapheme cluster
|
||||
'\u{1F600}'
|
||||
```
|
||||
|
||||
### Exemple 3
|
||||
|
||||
```text
|
||||
Utf8Char
|
||||
Utf16Char
|
||||
Utf32Char
|
||||
|
||||
Utf8String
|
||||
Utf16String
|
||||
Utf32String
|
||||
```
|
||||
|
||||
### Exemple 4
|
||||
|
||||
```text
|
||||
Utf8Char
|
||||
exactement un Unicode scalar encodé en UTF-8
|
||||
1 à 4 uint8
|
||||
|
||||
Utf16Char
|
||||
exactement un Unicode scalar encodé en UTF-16
|
||||
1 à 2 uint16
|
||||
|
||||
Utf32Char
|
||||
exactement un Unicode scalar encodé en UTF-32
|
||||
1 uint32
|
||||
```
|
||||
|
||||
### Exemple 5
|
||||
|
||||
```text
|
||||
Utf8String
|
||||
séquence UTF-8 valide
|
||||
|
||||
Utf16String
|
||||
séquence UTF-16 valide
|
||||
|
||||
Utf32String
|
||||
séquence UTF-32 valide
|
||||
```
|
||||
|
||||
### Exemple 6
|
||||
|
||||
```text
|
||||
UTF-8 -> uint8
|
||||
UTF-16 -> uint16
|
||||
UTF-32 -> uint32
|
||||
```
|
||||
|
||||
### Exemple 7
|
||||
|
||||
```text
|
||||
char::toUtf8Char()
|
||||
Utf8Char::toChar()
|
||||
Utf8Char::toUtf16Char()
|
||||
|
||||
Utf8Char::tryFrom(uint8)
|
||||
Utf16Char::tryFrom(uint16)
|
||||
Utf32Char::tryFrom(uint32)
|
||||
|
||||
Utf8Char::tryToUint8()
|
||||
Utf16Char::tryToUint16()
|
||||
Utf32Char::toUint32()
|
||||
```
|
||||
|
||||
### Exemple 8
|
||||
|
||||
```text
|
||||
Utf8String text = ...;
|
||||
Utf16Char value = ...;
|
||||
|
||||
text::append(value); // ERROR
|
||||
text::append(value::toUtf8Char()); // OK
|
||||
```
|
||||
|
||||
### Exemple 9
|
||||
|
||||
```text
|
||||
String text = ...;
|
||||
text[5]; // ERROR
|
||||
```
|
||||
|
||||
### Exemple 10
|
||||
|
||||
```text
|
||||
text::scalarAt(index) -> char
|
||||
text::scalarCount() -> uint64
|
||||
```
|
||||
|
||||
### Exemple 11
|
||||
|
||||
```text
|
||||
Utf8String[index] -> uint8
|
||||
Utf16String[index] -> uint16
|
||||
Utf32String[index] -> uint32
|
||||
```
|
||||
|
||||
### Exemple 12
|
||||
|
||||
```text
|
||||
encodedCharAt(scalarIndex)
|
||||
retourne le UtfXChar correspondant au scalar ordinal demandé
|
||||
|
||||
scalarAt(scalarIndex)
|
||||
retourne le char correspondant
|
||||
```
|
||||
|
||||
### Exemple 13
|
||||
|
||||
```text
|
||||
Utf8String::encodedCharAt(uint64) -> Utf8Char
|
||||
Utf16String::encodedCharAt(uint64) -> Utf16Char
|
||||
Utf32String::encodedCharAt(uint64) -> Utf32Char
|
||||
|
||||
Utf8String::scalarAt(uint64) -> char
|
||||
Utf16String::scalarAt(uint64) -> char
|
||||
Utf32String::scalarAt(uint64) -> char
|
||||
```
|
||||
|
||||
### Exemple 14
|
||||
|
||||
```text
|
||||
scalarCount()
|
||||
```
|
||||
|
||||
### Exemple 15
|
||||
|
||||
```text
|
||||
codeUnitCount()
|
||||
scalarCount()
|
||||
```
|
||||
|
||||
### Exemple 16
|
||||
|
||||
```text
|
||||
String implements Iterable<char>
|
||||
```
|
||||
|
||||
### Exemple 17
|
||||
|
||||
```text
|
||||
code units
|
||||
encoded chars
|
||||
Unicode scalars
|
||||
```
|
||||
|
||||
### Exemple 18
|
||||
|
||||
```text
|
||||
codeUnits()
|
||||
encodedChars()
|
||||
scalars()
|
||||
```
|
||||
|
||||
### Exemple 19
|
||||
|
||||
```text
|
||||
String text = "abc";
|
||||
text::append("def");
|
||||
```
|
||||
|
||||
### Exemple 20
|
||||
|
||||
```text
|
||||
Utf8String text = ...;
|
||||
Utf8Char value = ...;
|
||||
|
||||
text::append(value); // OK
|
||||
```
|
||||
|
||||
### Exemple 21
|
||||
|
||||
```text
|
||||
text[index] = 0xFF; // ERROR
|
||||
```
|
||||
|
||||
### Exemple 22
|
||||
|
||||
```text
|
||||
"..." String normale, escapes actifs
|
||||
"""...""" String normale multiligne
|
||||
@@ -55,56 +218,19 @@ cr"..." chaîne C brute, réservé
|
||||
t"..." template structuré, réservé
|
||||
```
|
||||
|
||||
### Exemple 5
|
||||
### Exemple 23
|
||||
|
||||
```text
|
||||
i"Hello {name}"
|
||||
i"Hello ${name}"
|
||||
```
|
||||
|
||||
### Exemple 6
|
||||
|
||||
```text
|
||||
"""
|
||||
first
|
||||
second
|
||||
"""
|
||||
```
|
||||
|
||||
### Exemple 7
|
||||
|
||||
```text
|
||||
r"simple"
|
||||
r#"He said "hello"."#
|
||||
r##"contains "# inside"##
|
||||
```
|
||||
|
||||
### Exemple 8
|
||||
|
||||
```text
|
||||
r"""..."""
|
||||
r#"""..."""#
|
||||
```
|
||||
|
||||
### Exemple 9
|
||||
|
||||
```text
|
||||
\\ backslash
|
||||
\" double quote
|
||||
\' single quote
|
||||
\n newline
|
||||
\r carriage return
|
||||
\t horizontal tab
|
||||
\0 NUL
|
||||
\u{...} Unicode scalar
|
||||
```
|
||||
|
||||
### Exemple 10
|
||||
|
||||
```text
|
||||
b"\x00\x7f\x80\xff"
|
||||
\\
|
||||
\"
|
||||
\'
|
||||
\n
|
||||
\r
|
||||
\t
|
||||
\0
|
||||
\u{...}
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 27 — Mémoire, références et `unsafe`
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -39,6 +39,15 @@ unsafe constant
|
||||
unsafe field
|
||||
```
|
||||
|
||||
### Exemple 4
|
||||
|
||||
```text
|
||||
mot-clé mut pour obtenir la mutabilité normale
|
||||
borrow checker visible dans la syntaxe
|
||||
lifetimes utilisateur omniprésents
|
||||
ownership annotations pour les usages ordinaires
|
||||
```
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# Exemples / DO-DON'T — Chapitre 47 — Concepts rejetés ou déconseillés
|
||||
|
||||
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
||||
> Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.
|
||||
|
||||
## Exemples actuellement présents dans le chapitre
|
||||
## Exemples extraits du chapitre
|
||||
|
||||
### Exemple 1
|
||||
|
||||
@@ -25,6 +25,9 @@ match guards `when` / `if`
|
||||
loop/until/repeat/unless comme synonymes de structures existantes
|
||||
magic getters/setters
|
||||
mandatory native GC
|
||||
immutability by default for ordinary variables/objects
|
||||
mandatory `mut` qualifier for ordinary mutation
|
||||
Rust-style user-visible borrow/lifetime syntax as the default programming model
|
||||
```
|
||||
|
||||
### Exemple 2
|
||||
@@ -40,4 +43,4 @@ transitive dependencies importables sans déclaration directe
|
||||
|
||||
## DO / DON'T / WHY / compiler error / edge cases
|
||||
|
||||
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|
||||
À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.
|
||||
|
||||
Reference in New Issue
Block a user