J'ai lu un peu la doc du langage ici. Voici un exemple de code :
package Sorting api;
fn Partition[T:! Comparable & Movable](s: Slice(T))
-> i64 {
var i: i64 = -1;
for (e: T in s) {
if (e <= s.Last()) {
++i;
Swap(&s[i], &e);
}
}
return i;
}
fn QuickSort[T:! Comparable & Movable](s: Slice(T)) {
if (s.Size() <= 1) {
return;
}
let p: i64 = Partition(s);
QuickSort(s[:p - 1]);
QuickSort(s[p + 1:]);
}
Au niveau des différence que j'ai trouvé :
- les littéraux numériques ne sont pas en octal, et ils peuvent être de taille 128 bit et 256 bit.
- il y a un type String et un type StringView avec un StringView en lecture seule
- il existe le type tuple, un type slice
- il y a un opérateur move pour déplacer une valeur. Dans l'instruction :
x = ~y;
apres cette instruction, y est dans un état indéfini.
- il y a une instruction return var. L'idée c'est de déclarer une variable comme type de retour, et quand on appel return var, ça va retourner cette valeur.
fn MakeCircle(radius: i32) -> Circle {
returned var c: Circle;
c.radius = radius;
// `return c` would be invalid because `returned` is in use.
return var;
}
il y a une instruction match qui a l'air pas mal par rapport aux tuples
fn Bar() -> (i32, (f32, f32));
fn Foo() -> f32 {
match (Bar()) {
case (42, (x: f32, y: f32)) => {
return x - y;
}
case (p: i32, (x: f32, _: f32)) if (p < 13) => {
return p * x;
}
case (p: i32, _: auto) if (p > 3) => {
return p * Pi;
}
default => {
return Pi;
}
}
}
il n'y a pas de GC
le langage peut créer des objets du C++ et les manipuler
il n'y a pas de préprocesseur à la C. Il y aura un système de métaprogramming, mais il n'est pas documenté.
on peut créer des classes, et l’héritage est simple. la création d'un objet est simple :
# Langage Carbon
Posté par vitanix . En réponse au journal Google forke C++. Évalué à 10.
J'ai lu un peu la doc du langage ici. Voici un exemple de code :
Au niveau des différence que j'ai trouvé :
- les littéraux numériques ne sont pas en octal, et ils peuvent être de taille 128 bit et 256 bit.
- il y a un type String et un type StringView avec un StringView en lecture seule
- il existe le type tuple, un type slice
- il y a un opérateur move pour déplacer une valeur. Dans l'instruction :
apres cette instruction, y est dans un état indéfini.
- il y a une instruction return var. L'idée c'est de déclarer une variable comme type de retour, et quand on appel return var, ça va retourner cette valeur.
Le langage n'est pas fini, et il y a des parties qui sont en cours de conception.