oct.zoy.org

Rusty Racoon

Tags: backup

De la rouille mais pas d'os

Je me suis mis Ă  jouer avec Rust, le nouveau langage de Mozilla. C’est un changement intĂ©ressant, moi qui suis plutĂŽt habituĂ© aux langages moins stricts et plus « scripts » qu’à des langages compilĂ©s et Ă  la tĂȘte dure.

Rust a plusieurs caractĂ©ristiques intĂ©ressantes, outre le fait qu’il est encore en version instable et donc pas vraiment utilisable pour autre chose que du gros bidouillage (la bibliothĂšque standard change encore assez rapidement, et un morceau de code qui compile un jour peut vous pĂ©ter Ă  la figure le lendemain) : Il est fortement typĂ©, tourne sans VM, sans GC, et possĂšde quelques-uns des raffinements des langages dit fonctionnels Ă  la mode comme Scala, avec ses types optionnels, et son pattern matching pour le typage. Son modĂšle de mĂ©moire est original, puisqu’il est possible d’expliciter les chaĂźnes d’objets qui possĂšdent de la mĂ©moire pour aider le compilateur Ă  savoir quand libĂ©rer et allouer la mĂ©moire


Mes derniĂšres expĂ©riences dans le domaine des langages qui compilent en natifs Ă©taient Ă  base de Go, et si la bibliothĂšque standard reste sympathique et plutĂŽt bien fournie, le langage reste parfois un peu brainfuck (comme le trĂšs sympathique interface{}). Certaines autres idĂ©es comme, l’idĂ©e d’un coding style « commun » me paraissent assez bonnes, et d’autres, comme le gestionnaire de paquetages, moins. Mais bref.

Rust dĂ©barque lui aussi avec ses machins et ses bidules. Pas de coding style d’entreprise (mais c’est peut-ĂȘtre aussi ce qui le rend aimable est plus adaptĂ© Ă  du code d’indĂ©pendant : Google Vs Mozilla, langage « maison » vs produit dĂ©mocratique
), mais un gestionnaire de paquets plutĂŽt bien foutu, pondu entre autres par le cĂ©lĂšbre Yehuda Katz. Il s’appelle Cargo et fait dĂ©jĂ  passer go get pour de la roupie de sansonnet.

Le langage en lui-mĂȘme ressemble a un croisement entre Go, Swift, C et un train lancĂ© a grande vitesse. Parfois c’est facile d’écrire du code, parfois, il faut se battre avec les notions compliquĂ©es incluses dans le langage, en particulier ce qui est possession et emprunt (ouais, je mets les termes en français, parce que vous le valez bien)
 Heureusement, Rust s’appuie complĂštement sur LLVM, et vous promet donc des messages d’erreurs complets (et complexes) qui vous mĂšneront en douceur vers la solution. Au final, ce code binaire qui ne se bat pas avec la mĂ©moire ressemble un peu Ă  du Scala sous son bon jour : DĂšs que ça compile, c’est que ça marche. Et en vrai, c’est pas faux. Le plaisir de voir dĂ©marrer son bout de code et qu’il vous affiche hello world, est rĂ©ellement la joie du gĂ©niteur (enfin il paraĂźt) devant son bambin.

De mon cĂŽtĂ©, j’ai attaquĂ© Rust pour jouer un peu avec tout ses concepts sulfureux et mouvants, et de l’autre parce que j’ai toujours rĂȘvĂ© d’arriver Ă  Ă©crire du code qui tourne aussi vite que du C (sans Ă©crire du C, parce que vraiment, je suis pas trĂšs ami avec le langage). Et Rust tient ses promesses. En quelques heures de boulot (allez, guĂšre plus que 20), j’ai rĂ©usssi Ă  brancher du code Rust sur du code C, et Carbon, et Ă  faire fonctionner tout cela alors que je n’avais pour ainsi dire jamais fait cela.

Si vous ĂȘtes curieux, le rĂ©sultat est sur mon Github et sur celui d’un autre gars, parce que, oui, j’ai fait des PRs.

Mon projet Ă  terme est d’arriver Ă  influencer suffisament Cargo pour qu’il puisse aider les dĂ©veloppeurs Web dans leur dĂ©veloppement (en particulier, le cycle rebuild-restart-refresh). Ce qui est chouette avec Rust, c’est que tout est Ă  faire, comme disait un de mes amis, quand la version 1.0 va sortir, ça va ĂȘtre la fĂȘte du slip.

D’ici là, jouez avec et continuez à coder, mes p’tits geeks.