Fermer

décembre 2, 2019

Salvation délivré par WebAssembly (Wasm)


Dans cet article, je vais vous donner un aperçu contextuel de WebAssembly et de son rôle dans la transformation du développement Web.

Vous pouvez vous méfier de la rédaction d'un autre article annonçant une solution magistrale à un problème aussi complexe les nuances que les simples mortels peuvent à peine saisir. Dénommez la technologie avec un acronyme imprononçable et nous avons tout le nécessaire pour un opéra wagnérien (ou une comédie technique à sketches, je ne peux pas dire lequel). Comme ces drames musicaux de grosse dame, ces longs articles exigent généralement une traduction, des notes de programme et trois opéras dignes d'une histoire pour donner un sens à la chose. Lire sur WebAssembly revient à regarder la finale de la saison de Game of Thrones sans avoir vu aucun des épisodes précédents.

Essayons donc de garder les choses pratiques pour notre protagoniste du cheval noir et de répondre à trois questions: 1) Qu'est-ce que WebAssembly ( Était M)? 2) Comment se compare-t-il à Docker? et 3) Quel est le lien avec le droit Atwood? Vous devriez quitter cette saga wagnérienne avec l'équivalent de quelques airs dans votre tête.

WASM WTF

La manière la plus simple de penser à WebAssembly est de proposer un moyen de prendre du code écrit en langage de programmation . que JavaScript et l'exécuter dans un navigateur Web. L'accent était initialement mis sur le C / C ++, mais de nombreuses langues entrent maintenant dans le train Wasm. WebAssembly vous murmure à l’oreille la même séduction séduisante que celle faite par Java (écrivez une fois, que vous courez partout) (juste avant d’empoisonner vos rêves programmatiques avec des fuites de mémoire). Mais il y a de l'espoir dans le pessimisme que WebAssembly puisse enfin tenir ses promesses car le royaume des geeks a déjà une longueur d'avance sur nous: tous les principaux navigateurs offrent un support de base pour WebAssembly ! (Excuses à Internet Explorer.)

Cette prophétie «écrivez une fois, courez n’importe où» peut être remplie, car WebAssembly est une cible de compilation . Si vous considérez un navigateur Internet comme une machine virtuelle, vous pouvez alors envisager de compiler le code de cette machine virtuelle de la même manière que vous le compileriez pour des machines dotées d'architectures 32 ou 64 bits. Certes, cette comparaison n’est pas techniquement correcte à 100%, mais elle est plus facile à comprendre que la longue discussion sur le fonctionnement des compilateurs . WebAssembly est un langage d'assemblage pour une «machine conceptuelle» – une sorte de manière simplifiée et abstraite de penser de manière générale à toutes les machines sur lesquelles il peut tourner, et ne constitue pas tous les problèmes informatiques résolus par une couche d'abstraction ?

Wasm ne nécessite pas de moteur de conteneur distinct pour s'exécuter, de sorte qu'il ne dispose pas de la surcharge de performances qu'un système de conteneur ou de couche de machine virtuelle peut introduire. Et cela nous amène au point critique suivant: l’exécution du code Wasm peut être très rapidement à une vitesse proche de celle de l’origine.

Alors, qu'est-ce que cela nous donne? Premièrement, cette configuration nous offre une certaine diversité – JavaScript s’habitue toujours pour s’interfacer avec les modules de WebAssembly et communiquer avec une page Web via le DOM, mais il n’est plus le maître absolu du Web. Deuxièmement, en ouvrant la porte aux langages de bas niveau, vos applications peuvent faire des compromis raisonnables, par exemple. ils peuvent confier leurs tâches à WebAssembly lorsque des opérations très lourdes sont nécessaires

Certes, il n’ya pas beaucoup de homesteaders à la frontière avec WebAssembly: Des changements à apporter à cette fondamentale prendront du temps, mais l’avenir est prometteur. Des jeux ont été portés (par exemple Doom3 et de nombreux autres écrits en Unity) et certaines applications de bureau également (par exemple Autocad ). Même si vous ne souhaitez pas écrire vos propres modules WebAssembly, vous souhaiterez peut-être que vos applications Web exploitent les packages WebAssembly, disponibles via le gestionnaire de packages WebAssembly (wapm) . Vous avez toujours voulu faire des choses comme le dimensionnement d'image côté client ou le montage vidéo? Il existe des packages WebAssembly pour ceux-ci, mais nous allons de l'avant nous-mêmes…

WebAssembly et Docker

Peut-être que Wagner et George RR Martin avaient raison… peut-être que vous faites devez continuer à introduire des caractères racontez votre histoire. La discussion moyenne sur WebAssembly ne mentionne pas Docker, nous allons donc vraiment dans l'intrigue de cet opéra technique, mais maintenant que vous comprenez un peu ce qu'est et ce que WebAssembly est, je vous mets au défi de ne pas voir sa similitude avec Docker .

Comme WebAssembly, Docker fournit un environnement en mode bac à sable pour exécuter le code de votre application. Comme WebAssembly, vous pouvez conditionner vos applications écrites dans n’importe quelle langue dans un conteneur pour un déploiement plus simple. A l'instar de WebAssembly, Docker fournit une sorte de devise commune permettant à différents acteurs de collaborer au sein d'un système. Ce sont des technologies distinctes qui atteignent différents objectifs, mais elles ressemblent à des armées alliées contre un ennemi commun.

Vous n'êtes toujours pas convaincu? Prenons les paroles de Solomon Hykes, fondateur de Docker:

Après toutes ces explications sur ce qu'est WebAssembly et son fonctionnement dans le navigateur, nous vous lancent une balle courbe: Vous pouvez également exécuter WebAssembly sur le serveur. Cela peut sembler étrange, mais si Wasm est si génial, pourquoi laisser les navigateurs s’amuser? Alors que Node.js résolvait ce problème en intégrant l'environnement d'exécution JavaScript au serveur, Wasm a créé un environnement et y a invité tout le monde.

Le personnage qui permet cette intrigue est le WebAssembly System Interface (WASI) . WebAssembly étant un moyen rapide et évolutif d’exécuter le même code sur plusieurs ordinateurs, les développeurs le poussent au-delà du navigateur. C’est là que la WASI entre en jeu: Le code en dehors d’un navigateur nécessite un moyen de communiquer avec le système. WebAssembly n'a pas besoin de communiquer avec un seul système d'exploitation, mais avec une interface lui permettant de communiquer avec un «système d'exploitation conceptuel». En introduisant cette couche d'abstraction, WebAssembly peut être exécuté sur tous les systèmes d'exploitation. [19659003] Tout cela ne signifie probablement pas que Docker est condamné, mais cela pourrait également signifier que les conteneurs Wasm commencent à devenir de plus en plus courants. Peut-être que cette couche d’abstraction permettra à Wasm d’être le moteur d’exécution omniprésent pour toutes les applications, quelle que soit la langue. Le temps nous le dira, mais les fondements de cette approche appellent des solutions prometteuses.

Loi Atwood

Cela peut sembler étrange à première vue, mais je voudrais terminer cet article par quelques réflexions sur le rapport existant entre WebAssembly et la loi Atwood. . La citation connue sous le nom de «loi d'Atwood» est la suivante:

«Toute application pouvant être écrite en JavaScript sera éventuellement écrite en JavaScript.»
– Jeff Atwood, auteur, entrepreneur, cofondateur de StackOverflow

Il y a de nombreuses interprétations erronées de cette citation, et aussi tentant que puissent être les développeurs JavaScript sournois de la présenter comme une preuve de l'autorité divine, le texte source lui-même s'appelait « Le principe de moindre pouvoir ». not prophétise l'assujettissement d'Internet par les seigneurs angulaires, réactifs ou visuels. Le message de cet article a une profonde résonance en nous tous – dans la vie elle-même, à mon avis. En résumé, il est dit qu'il existe un réel pouvoir pour obtenir plus avec moins. C’est aussi vrai avec l’évolution de la vie qu’avec Internet et les formats qu’il utilise pour échanger des données. Si vous pouvez représenter vos données plus simplement, avec moins d’effort, cette représentation aura un avantage sur les alternatives plus complexes et plus enivrantes.

C’est la rivière subtile qui traverse cette épopée depuis le début, et c’est là que se Le trésor de Rhinegold de l'histoire réside vraiment: toute la technologie, y compris WebAssembly, les tentatives de dispersion de l'information et ses chances de survie sont aidées ou gênées par l'efficacité avec laquelle il réussit cette tâche.

Lorsqu'elle est vue de cette manière, la loi d'Atwood et sa mention Par JavaScript, on entend un vote pas nécessairement explicite pour JavaScript, mais la reconnaissance du fait que des solutions simples prévaudront toujours. JavaScript doit son ubiquité non pas à un arsenal de choses puissantes qu’il peut faire, mais plus précisément aux limites calculées qui dictent ce qu’il ne peut pas faire. WebAssembly peut être la prochaine étape dans cette évolution car il propose de faire moins que d'autres alternatives. Il stocke même ses instructions dans un texte ancien lisible au lieu d'un binaire illisible, ce qui semble parfaitement correspondre à l'objectif ambitieux consistant à partager des données de la manière la plus simple possible. Il incarne le triomphe du bazar sur la cathédrale car exposer tout au public le plus large possible garantit son évolution, et cette philosophie tient à remercier pour une grande part du succès remporté par Wasm à ce jour.

Personne ne peut garantir l’avenir, et il est tout à fait possible que Wasm ne réponde pas à toutes nos attentes. Le fondateur de JavaScript, Brendan Eich, défenseur de WebAssembly, craint que des intérêts concurrents opposés ne finissent par briser le projet Wasm . Le temps nous le dira, bien sûr, mais WebAssembly est une technologie que je souhaite absolument garder à l’écoute.





Source link