URL: https://linuxfr.org/users/nono/journaux/go-et-rust-lequel-est-le-remplacant-du-c Title: Go et Rust, lequel est le remplaçant du C ? Authors: Bruno Michel Date: 2018年09月09日T22:02:21+02:00 License: CC By-SA Tags: golang et rust Score: 61 Go et Rust sont deux langages qui sont souvent comparés l'un à l'autre. Et cela vient en partie du fait qu'ils sont tous les deux des langages vus comme des remplaçants du C et du C++. Pourtant, ces deux langages sont relativement différents et n'ont pas empruntés les mêmes caractéristiques au C et au C++. Sur le plan philosophique, C est souvent vu comme un langage assez simple (peu de mots-clés, peu de concepts compliqués comme la surcharge d'opérateurs, un rythme d'évolution assez lent) alors que le C++ est vu comme un langage puissant, avec plein de fonctionnalités avancées (l'héritage multiple, les templates, les espaces de noms, etc.) décrites dans les milliers de pages de la spécification. Vu comme ça, Go a clairement repris la simplicité (peut-être en partie imaginée) du C, et Rust partage cette recherche de puissance avec des abstractions sans coûts (en termes de performances) avec le C++. Mais si on passe sur l'usage, on peut assez facilement arriver à l'inverse. Go a été écrit au départ pour remplacer le C++ tel qu'il est utilisé chez Google, c'est-à-dire pour écrire des services réseaux. Et pour ce cas d'usage, le facteur limitant est plutôt les entrées-sorties que la recherche de performances absolues (mémoire, CPU). Les créateurs de Go ont ainsi pu choisir d'avoir un Garbage Collector et des threads légers, les goroutines. À l'inverse, les développeurs de Rust ont choisi d'avoir un runtime très léger. Cela pourrait permettre à Rust d'être utilisé sur des domaines souvent réservés au C et où Go a peu de chances d'arriver : système d'exploitation ([redox-os](https://redox-os.org/)), bibliothèques pouvant être utilisées dans de nombreux langages, extensions pour d'autres langages ([python](https://developers.redhat.com/blog/2017/11/16/speed-python-using-rust/), [ruby](https://usehelix.com/)). En bonus, cela a permis à Rust d'être transpilé vers du Wasm plus tôt que Go, et sans peser quelques centaines de ko pour un Hello World. Au final, j'ai l'impression que Go et Rust n'attirent pas le même public : plutôt haut-niveau pour Go et bas-niveau pour Rust. Par exemple, pas mal de développeurs de langages de scripts (Ruby, Python, NodeJS) sont passés à Go pour les performances et la concurrence. À l'inverse, Rust me semble très compliqué à aborder sans un bagage technique conséquent et au moins une expérience dans un langage bas-niveau (souvent le C ou au moins des notions de C++). Ni Go ni Rust ne remplaceront complètement le C et le C++, mais ils ont chacun un chemin où ils peuvent être couronnés de succès. Pour Go, c'est déjà le cas de part son utilisation massive dans les services réseaux et les outils devops. Pour Rust, la marche est plus haute mais s'il parvient à avoir moins de failles dans des éléments critiques de notre informatique au quotidien (noyau, bibliothèques largement utilisées à la OpenSSL ou Image Magick, navigateurs web, etc.), ça serait formidable.