Tutoriel très complet pour Rust et complètement en français
Un retour d'expérience de Cloudflare sur la ré-écriture d'un module Nginx en Rust.
Un retour d'expérience sur l'utilisation de Cassandra à un très haut niveau chez Discord.
Des problèmes de maintenance majoritairement liés à la manière dont ils utilisaient Cassandra car des ralentissements en lecture sur un noeud impactaient tout le cluster car la lecture/écriture se fait en quorum.
La "compaction" (réindexation) des tables par Cassandra et le GC de la JVM causaient aussi des problèmes de latence.
Ils ont décidé de migrer toutes leurs DB vers ScyllaDB qui est compatible Cassandra mais en C++ donc plus rapide et pas de GC!
Il n'ont pas réglé leur problème qu'avec une nouvelle base de données mais aussi avec des middleware de cache écrit en Rust pour la performance C++ et la sureté mémoire.
La migration fut aussi très compliqué et les premières prévisions étaient extrèmement longues (3 mois) mais la encore un rewrite du connecteur en Rust sauve la mise (9 jours!)
Conclusions:
- plus de stabilité
- 177 noeuds Cassandra à 72 ScyllaDB
- latence p99 40-125ms avec Cassandra et 15ms avec ScyllaDB
Un Chromium qui tourne dans un terminal :D
Ça permet de naviguer sur le web et même de voir des vidéo!
Le wrapper est en Rust bien sur
Un framework pour créer des extensions PostgreSQL avec Rust.
Je ne savais pas mais à priori Rust est un langage de choix pour les extensions PostgreSQL maintenant.
C'est un très bon usecase car dans une base de données on a justement besoin de performances et de memory safety
Une lib pour manipuler des données tabulaires (vectors, matrices) de la même manière qu'avec Panda.
Celle la est écrite en Rust donc on peut s'attendre des à des performances ~7x plus rapide que Panda. (Benchmarks)
(Via Alex)
Un retour d'expérience sur l'utilisation de Rust plutôt qu'un autre langage dans une startup qui développe un produit de type SaaS.
Sans surprise, c'est moins efficace de développer un SaaS en Rust qu'en Node.js ou en Python.
L'auteur met en avant les points qui freinent le développement de sa startup:
- la courbe d'apprentissage très longue de Rust
- le modèle de mémoire (borrowing) qui ralentit le développement et empêche de faire des "brouillons"
- la difficulté de trouver des développeurs
- la documentation et les lib qui manque de maturité
La moralité: don't jump over the hype train et surtout il faut utiliser les techno pour les usages ou elles ont du sens.
Une super liste d'outils modernes (beaucoup en Rust) pour remplacer les bons vieux outils GNU.
Perso j'ai gardé:
lsd
pour remplacerls
curlie
pour remplacercurl
micro
pour remplacernano
bat
pour remplacercat
Rome est un outil pour Javascript/Typescript qui sert de linter, formatter, bundler et test runner.
En gros ça remplace Eslint, Prettier, Webpack, Babel et Jest.
C'est écrit en Rust et beaucoup plus performant que les outils JS.
L'autre avantage est de n'avoir qu'un outil binaire plutôt que des centaines de dépendances et des centaines de méga-octets dans le dossier node_modules.
(Via Ludo)
Il ne faut pas forcément se focaliser sur la performance à tout prix ou sur la maintenabilité à tout prix.
C'est toujours une histoire de compromis entre les deux.
J'aime beaucoup cette citation qui me fait pensé au mécanisme de gestion mémoire de Rust:
Sharing state is fine, so long as we don’t mutate it.
Mutating state is fine, so long as we don’t share it.
Un bundler/builder Javascript pour remplacer Webpack, c'est écrit en Rust et ils affichent des performances de 5 à 10 fois supérieurs.
Pour l'instant c'est que pour les projets Next.js ou Vite.
Une très bonne explication des nombreux avantages de la programmation avec le langage Rust créé par Mozilla.
Rust offre de très bonnes performances, proches du C et du C++ tout en proposant un modèle de gestion de la mémoire innovant.
Jusqu'ici, la gestion de la mémoire était soit un facteur de dégradation des performances du à l'introduction d'un garbage collector (Java, Go, C#), soit un facteur de risque de sécurité important (buffer overflow, use-after-free, segmentation fault, etc.)
Rust introduit un mécanisme ou une référence peut être soit constante et partagée, soit mutable mais unique (Borrow Checker).
La gestion des erreurs est aussi plutôt pas mal en prenant le meilleur du système d'exceptions (implicite) et du système de retour d'erreur (explicite)
// the "?" operator mean that potential errors will be propagated
let result = foo()?.bar()?;
Un autre avantage est le potentiel de portabilité dans le navigateur avec WASM. Il est possible d'utiliser Rust comme langage fullstack à l'instar de Javascript.
Il y a aussi bien sur des choses plus compliqués avec Rust:
- la syntax inhabituelle
- temps de compilation assez long
- ecosystème naissant
Un système de management de repo Javascript.
Dans le même genre que Lerna ou Turborepo, c'est écrit en Rush et ça permet d'automatiser les builds (entre autre)
Rust deviendra officiellement le deuxième langage autorisé dans le Kernel Linux!
Dans les raisons annoncées on retrouve bien sur les avantages de Rust (rapidité, modèle de gestion mémoire) mais aussi le fait qu'il va devenir de plus en plus compliqué de trouver des programmeur C à l'avenir.
Ça devait finir par arriver, une équipe à développé Minecraft dans Minecraft en utilisant des circuits de Redstone.
Ils ont emulé un petit ordinateur avec CPU, RAM et processeur graphique pour faire tourner une version simplifiée de Minecraft en noir et blanc !
Ils utilisent MCHPRS qui est un serveur Minecraft en Rust specialisé dans l'exécution de programmes en redstone.
Une super présentation sur le fonctionnement et l'utilisation de Rust + WebAssembly pour faire une application frontend avec le framework Yew.
L'auteur utilise le framework frontend Yew en Rust.
Comme il le dit à la fin, pour l'instant c'est encore très expérimental et les performances ne sont pas au rendez-vous.
D'ailleurs c'est assez peu probable de pouvoir battre les performances du JS natif en terme de manipulation de DOM.
Aussi, ce genre d'application hybride (2 langages) aura quasiment toujours des performances inférieurs à cause de l'overhead du boxing / unboxing
Le framework pour application Tauri prend de plus en plus de maturité pour remplacer notamment Electron.
Concrètement le backend de l'application est à écrire en Rust et le frontend peut être en Javascript (React, Vue, Angular, etc).
Les deux vont communiquer via une API RPC:
// (Rust) Tauri command
#[tauri::command]
fn return_string(word: String) -> String{
return word
}
// (Javascript) Command invocation
const result = await invoke("return_string", {
word: "This is the argument"
});
J'espère sincèrement que ça prendra car les application Electron sont vraiment trop lourdes avec des appli comme Slack qui sont régulièrement à ~15-20% du CPU même en idle (!!).
Un excellent article faisant à la fois l'éloge et la critique de Rust.
Le langage a été choisi par une équipe réalisant un système d'exploitation, ce qui est exactement un des usecase prévus pour Rust.
PROS
- librairie standard très fournie
- modèle de gestion de la mémoire
- le compilateur et les outils qui facilitent les dev et refacto
CONS
- syntaxe un peu "lourde" parfois
- effet "peinture fraiche"
- difficulté de faire des builds reproductibles
Ce genre d'article donne du crédit au langages "memory safe" comme Rust, je pense que Firefox a fait un bon choix.
Autre chose intéressante, la règle de 2 de Google sur la sécurité, choisir maximum 2 des conditions suivantes:
- le code manipule des données qui ne sont pas de confiance
- le code ne fonctionne pas dans une sandbox
- le code est écrit dans un langage unsafe (C / C++)
Pino est un logger très performant pour l'écosystème Node.js.
Il est 2 à 3 fois plus rapide que Winston et ce n'est pas rien car les logger sont des composants critiques des applications !
Pino s'occupe exclusivement de rediriger les logs sur la sortie standard et ensuite celle-ci peut être rediriger vers des transports Pino pour les services d'agrégation les plus communs