Cette citation résume tout :
The beauty of programming language design is not building the most complex edifice like Scala or making the language unacceptably crippled like Go - but giving the programmer the ability to represent complex ideas elegantly and safely. Rust really shines in that regard.
Merci à Riduidel pour le lien.
Ceux qui me lisent le savent, je trouve que Rust est un très bon langage mais je lui reproche quand même certaines choses :
- Il n'est pas trivial d'écrire des classes (comme il l'est en Kotlin).
- Le code à écrire est aussi volumineux que celui de Java (Kotlin est 30% à 40% plus concis).
- Il utilise autant d'abréviations stupides que C++.
- Certains éléments de syntaxe sont une immondice à mi chemin entre C++ et O-Caml/Ruby (typiquement le pipe "|" pour les lambas, en dix ans je n'ai jamais pu m'y faire, ou encore l'opérateur "->" pour définir un type de retour d'une fonction).
Mon langage préféré serait à 100% Kotlin si celui-ci disposait :
- D'une cross-compilation native.
- D'un garbage collector injecté au compile-time à l'image de Rust et l'emploi du Ownership.
Oui, c'est ce qu'il faudrait à Kotlin, j'ai vraiment hâte de voir ce que vont donner GraalVM et Kotlin native dans les prochains mois.
Via Riduidel
Eviter les problèmes de débutants en Rust
Avec une syntaxe proche de Sparkjava et Sinatra.
Rust est un langage orienté fonctionnel, de ce fait il lui manque une encapsulation forte dans des classes pour utiliser de l'OOP (il est très proche de C++ sur ce point). Mais il est possible de faire quelque chose de sympa avec les Traits
:
trait Quack {
fn quack(&self);
}
struct Duck ();
impl Quack for Duck {
fn quack(&self) {
println!("quack!");
}
}
struct RandomBird {
is_a_parrot: bool
}
impl Quack for RandomBird {
fn quack(&self) {
if ! self.is_a_parrot {
println!("quack!");
} else {
println!("squawk!");
}
}
}
let duck1 = Duck();
let duck2 = RandomBird{is_a_parrot: false};
let parrot = RandomBird{is_a_parrot: true};
let ducks: Vec<&Quack> = vec![&duck1,&duck2,&parrot];
for d in &ducks {
d.quack();
}
// quack!
// quack!
// squawk!
La seule chose qu'il me manque en Rust ce sont des classes. Depuis que j'ai adopté le style de programmation OOP de Yegor Bugayenko, penser en objet et non en procédurale-qui-se-fait-passer-pour-de-l'objet me semble évident.
Ceux qui décrètent que l'OOP ne marche pas ne parviennent tout simplement pas à penser en Objet. Cela revient à dire que la récursion terminale ne fonctionne pas parce que l'on ne parvient pas à penser un algorithme itératif en invocation récursives et sans encombrer la pile d'appels.
Je le trouve plus simple qu'Hugo. Je pense que je vais contribuer à leur faire un thème sympa du type wiki de projet d'entreprise.