đȘđ Pourquoi vous allez enfin commencer Ă utiliser WebAssembly.
Temps de lecture : 5 minutes
WebAssembly est officiellement supporté par tous les navigateurs depuis 2017. L'avez-vous déjà utilisé ? Moi, jamais.
Aujourdâhui, je vais vous expliquer pourquoi vous non plus vous ne lâavez jamais utilisĂ© et nous parlerons dâune nouveautĂ© quâils ont sorti en janvier 2024. Je vous expliquerai pourquoi vous allez peut-ĂȘtre enfin dĂ©cider de lâutiliser. Surtout maintenant que Ruby (3.2) le supporte.
Au programme aujourdâhui :
Pourquoi vous allez enfin commencer Ă utiliser WebAssembly par Tim
Lâagence de recrutement pour les leads dĂ©vs RoR !
Temps de lecture : 5 minutes
Hello les petits Biscuits !
Bienvenue sur la 21Ăšme Ă©dition de Ruby Biscuit.
Vous ĂȘtes maintenant 478 abonnĂ©s đ„ł
Avant de vous laisser entre les mains de Tim pour lâarticle du mois, je tenais Ă vous rappeler que vous ĂȘtes tous les bienvenus pour donner votre avis en commentaire et partager vos expĂ©riences sur les sujets que nous abordons. Vous pouvez aussi mettre un petit like â€ïž et/ou partager la newsletter Ă un copain ou une copine ! đ
Bonne lecture.
Pourquoi vous allez enfin commencer Ă utiliser WebAssembly
Commençons par les présentations.
Webassembly (WASM) est le quatriĂšme standard du web, aprĂšs HTML, CSS et JavaScript.
C'est un format binaire, proche du langage machine, conçu pour s'exĂ©cuter dans le navigateur. Quelle que soit la plateforme, ce code s'exĂ©cute de la mĂȘme façon et Ă une vitesse quasi-native, c'est-Ă -dire aussi performante que celle obtenue avec le langage de prĂ©dilection de la machine sur laquelle ce code tourne.
Ce code est exécuté dans une sandbox, un environnement isolé qui ne peut pas interagir directement avec le systÚme hÎte. Ceci est crucial pour des questions de sécurité, afin d'éviter que du code malicieux ne puisse déclencher une catastrophe sur l'appareil de l'utilisateur, comme manipuler ses fichiers à son insu.
Pour générer du code dans ce format (.wasm), il faut le compiler, ce que l'on peut faire à partir de nombreux langages, dont Ruby.
Mais comment on lâutilise ?
L'implémentation dans les navigateurs (via l'objet WebAssembly) nous permet de compiler du code wasm en module instanciable et utilisable en Javascript. Vous pourrez trouver plus de détails sur cette API ici.
La gem ruby.wasm nous simplifie la tùche en faisant ça pour nous, via un script qu'elle fournit. On peut alors écrire du code Ruby dans le navigateur ainsi :
On remarque le require 'js'
: les navigateurs n'autorisant pas l'accÚs direct au DOM par le code WASM, c'est une implémentation offerte par la gem déléguant au Javascript ces opérations. C'est ce qu'on appelle des bindgen : on y déclare les fonctions Javascript que l'on souhaite importer de l'hÎte (le navigateur), et ce qu'on veut exporter de l'invité (le module WASM).
Qu'est-ce qu'on peut en faire ?
"But can it run Doom?" Je ne serais pas contre une petite partie avec ceux qui le veulent đ. Pour ceux qui ne connaissent pas ce meme, c'est un jeu de 1993 qui Ă©tait une grosse rĂ©volution Ă l'Ă©poque et maintenant les internets se dĂ©fient Ă le porter sur toutes les machines possibles (calculatrices, oscilloscopes, brosses Ă dents, ...). Mais bon on est en 2024 quand mĂȘme, on peut jouer Ă Doom 3.
Plus sérieusement, si vous avez déjà utilisé Photoshop ou Figma, ces applications web tournent en WebAssembly. Figma a utilisé cette technologie pour y porter sa base de code en C++.
Ă plus petite Ă©chelle, on pourrait avoir sur un champ d'upload de fichiers, un module Python en front Ă qui on dĂ©lĂ©guerait une fonction de reconnaissance de signature ; on Ă©viterait ainsi un aller-retour avec le serveur back. Le YouTubeur Fireship a montĂ© un exemple oĂč il a implĂ©mentĂ© un convertisseur vidĂ©o entiĂšrement gĂ©rĂ© dans le navigateur. La communautĂ© Rust est d'ailleurs trĂšs active, et a crĂ©Ă© plusieurs frameworks front en Rust ; on peut donc coder une appli web 100% Rust, du back au front.
Il suffit de compiler ce qu'on veut vers le format WASM alors ? Oui, et non...
Limitations
On va calmer la hype :
pas de networking (sockets, ...)
pas de Threads
pas d'import de gems
le bundle Javascript pour l'implémentation Ruby du WASM est énorme (35 Mb)
pas de systĂšme de fichiers (donc pas de
require './mon_script.rb'
dans un module WASM)c'est pas beaucoup plus rapide que le Javascript actuel
les frameworks Rust et Javascript ont des performances similaires
une start-up qui avait comme pitch d'accélérer les apps web actuelles en les portant en WASM, a fermé ses portes car les gains de performances étaient trop marginaux.
Bah c'est nul alors ? Attendez, laisser moi vous présenter WASI !
Le WASM a des avantages indĂ©niables, en particulier le fait d'ĂȘtre du code isolĂ© appelable de n'importe oĂč et qu'on peut Ă©crire dans une grande variĂ©tĂ© de langages. Le WASI (WebAssembly System Interface) a donc Ă©tĂ© dĂ©veloppĂ© pour pouvoir utiliser cette technologie en dehors du navigateur, en y ajoutant une API et une ABI (Application Binary Interface). GrossiĂšrement, une ABI est comme une API, mais Ă un niveau plus bas, au niveau du code machine. On va par exemple y dĂ©finir comment un module doit faire sa gestion de mĂ©moire.
En particulier, en Janvier 2024, la version 0.2 est sortie, et offre entre autres ces améliorations majeures :
la possibilitĂ© de faire du networking, avec des sockets et des requĂȘtes HTTP.
un systĂšme de fichier virtuel.
et surtout le component model, permettant d'importer des packages Ă partir de son module.
Pour exĂ©cuter du WASI, il suffit d'utiliser un runtime. Il y en a plusieurs de disponibles, qui sont spĂ©cialisĂ©s en fonction de l'environnement ciblĂ© par votre code. Le plus gĂ©nĂ©raliste (en tout cas celui que j'ai vu remonter le plus souvent) semble ĂȘtre Wasmtime.
Quel que soit le langage que vous utilisiez, ce runtime l'exécutera. On peut donc écrire du code Ruby qui tournera sur un frigo « connecté ». Autrement dit, Ruby peut maintenant distribuer des applications facilement, sans que son utilisateur soit obligé d'installer Ruby sur son terminal.
Pour ceux qui connaissent Docker, un cofondateur (Solomon Hykes) a affirmé que « Si WASM+WASI existait en 2008, nous n'aurions pas eu besoin de créer Docker : c'est aussi important que ça. »
OĂč est-ce qu'on peut utiliser le WASI ?
On peut également l'utiliser dans le browser, grùce à des polyfill. Wasmtime en fournit un ici par exemple. Ce qui nous libÚre de certaines limitations citées plus haut.
Mais on peut aussi l'utiliser dans le Cloud, dans des fonctions serverless, ce qui permet d'avoir des « cold start » (démarrage d'un module) trÚs rapide, tout en n'utilisant pas de technologie propriétaire (le vendor lock). Ou dans les systÚmes embarqués, ou en tant que plugins pour d'autres logiciels, et aussi dans le serveur back d'une appli web.
Autrement dit, quel que soit votre environnement ou votre langage (si ce langage le supporte), vous pouvez compiler et importer des modules WASM.
C'est ici que le component model introduit avec la version 0.2 est particuliÚrement intéressant, voir assez révolutionnaire. Ce modÚle apporte une canonical ABI, qui permet à des modules différents de pouvoir communiquer entre eux. Par exemple, un module en C pourrait représenter une chaßne de caractÚres d'une autre maniÚre qu'un module Rust ; cette canonical ABI leur fournit un format leur permettant de s'échanger correctement ces chaßnes malgré les « frontiÚres » binaires de ces modules. Je vous recommande cette conférence pour en savoir plus.
Ce modĂšle permet Ă©galement d'avoir une interopĂ©rabilitĂ© des langages dans leurs dĂ©pendances. ConcrĂštement, on peut avoir un module WASM Ă©crit en Python, qui appelle un autre module en Elixir, qui lui-mĂȘme appelle un autre module en C. Si ça attise votre curiositĂ©, voici une autre confĂ©rence qui vous montre ça en direct. Cela veut dire en thĂ©orie que l'on peut appeler une librairie d'un langage supportant le WASI Ă partir de n'importe quel autre langage supportant le WASI. Donc par exemple importer des librairies Javascript dans Ruby, ou des librairies Ruby dans Javascript. Il n'y aurait en thĂ©orie plus besoin de dupliquer les mĂȘmes outils Ă travers tous les diffĂ©rents langages.
Ce qu'on peut retenir
Si une librairie a déjà été compilée en WASM, vous n'avez pas à le refaire. Par exemple ce package npm vous donne accÚs à SQlite à partir de Javascript. Il est possible que l'on voit de plus en plus de packages de ce genre à l'avenir, donc restez à l'affût des gems.
Une confĂ©rence de la rubykaigi 2024 de Yuta Saito en mai devrait ĂȘtre particuliĂšrement intĂ©ressante Ă suivre : il y montrera comment packager une application Ruby et ses dĂ©pendances de gems dans un programme WebAssembly.
Il semblerait que l'on soit dans l'Ă©tape de la « Pente de l'illumination » du cycle du hype. Si c'est le cas, gardez cette technologie en tĂȘte lors de vos recherches, on pourrait y voir apparaĂźtre des outils trĂšs intĂ©ressants. Par exemple warg, qui sera un package manager WASM, dĂ©veloppĂ© par les crĂ©ateurs du component model.
â Tim
Lâagence de recrutement pour les leads dĂ©vs RoR !
Comme vous le savez, derriĂšre Ruby Biscuit, il y a Capsens đ , nous sommes une agence web qui fait du Ruby on Rails depuis 10 ans.
Avec le temps on s'est rendu compte que beaucoup de dĂ©vs choisissent leur entreprise un peu par hasard alors qu'ils pourraient davantage s'Ă©panouir et se valoriser dans des structures qui leur correspondent mieux. De plus on sait Ă quel point les process de recrutement peuvent ne pas ĂȘtre adaptĂ©s Ă notre mĂ©tier et nos profils.
Ce qui tombe super bien c'est que chez Capsens nous avons une excellente connaissance de l'écosystÚme RoR en France, avec un réseau d'entreprises considérable. La plupart étant des boites bien installées (+ de 5 ans), avec des équipes tech déjà présentes et qui recherchent avant tout des leads dévs et dévs séniors.
C'est pourquoi nous avons dĂ©cidĂ© de mettre Ă profit nos ressources pour vous aider Ă trouver le poste de vos rĂȘves !
Alors tu as plusieurs annĂ©es dâexpĂ©riences ? Tu souhaites trouver le prochain poste de lead dĂ©v de tes rĂȘves ?
ConcrĂštement voilĂ ce qui va se passer :
Réponds à cette newsletter en te présentant en deux lignes !
Je tâenvoie aussitĂŽt notre test technique pour Ă©valuer ta sĂ©nioritĂ©
Je te propose des crĂ©neaux pour un appel afin de faire ta connaissance et que tu me dises ce que tu cherches pour tâĂ©panouir dans une entreprise.
Je te propose 3 entreprises qui correspondent Ă ton profil et tes aspirations. Pour chacune de ces entreprises :
Je me charge de te donner un max dâinfos et rĂ©pondre Ă toutes tes questions par message (horaires, ambiance, taille et sĂ©nioritĂ© de lâĂ©quipe, responsabilitĂ©s, marge de manĆuvre pour la nĂ©gociation du salaire, localisation des bureaux, politique de tĂ©lĂ©travail, etc). Pas dâappels inutiles.
Avant de rencontrer le recruteur lui-mĂȘme, je te mets en relation avec un dĂ©veloppeur de leur Ă©quipe. Tu pourras alors te faire une idĂ©e de comment ça se passe de lâintĂ©rieur.
Enfin, le recruteur te recevra ! Il aura dĂ©jĂ eu toutes les informations que je lui aurai transmises sur toi ce qui vous permettra dâaller Ă lâessentiel !
Lance-toi, on attend ton e-mail ! Et si tu aimes dĂ©jĂ ton travail, ne nous contacte surtout pas ! Ou alors fais-le pour nous recommander ta boĂźte đ
MĂ©lanie