Oliver Medhurst - Porffor - JavaScript Ahead of Time Compiler
Durée: 48m38s
Date de sortie: 20/10/2025
This week we have Oliver Medhurst, the creator of Porffor. Porffor is a JavaScript ahead of time compiler that compiles JavaScript to WebAssembly. We talk about the technical details of how it works, and the future of JavaScript engines.
Les jets sont très bons pour les browsers, mais au bout du temps, c'est très bon.
Par exemple, il n'y a pas de temps de start-up, il n'y a pas de coût.
Tu as déjà une binary, tu sais que tu veux commencer l'ensemble du tour et m'amener le jet à la fin.
Bonjour, bienvenue à DEPT.FM.
C'est un podcast de Developer Tools, et les gens font des choses.
Je suis Andrew et je suis Michael, je suis Justin.
Bonjour tout le monde.
Aujourd'hui, nous sommes vraiment excitées d'avoir Oliver Medhurst sur.
Oliver, je vous ai dit ça correctement, je veux juste vous le dire.
Oui.
C'est super.
Oliver, vous êtes le créateur de Pro4, et j'espère que vous aussi.
Un JavaScript, un compiler à temps de temps, qui me démarre.
Je suis vraiment excité de vous dire comment...
Je ne pensais pas que ce soit possible, donc ça serait intéressant de apprendre plus les détails techniques.
Mais avant de parler de ça, je voudrais juste apprendre un peu plus sur vous.
Vous voulez dire à nos audiences un peu plus sur vous-même?
Oui, je pense que j'ai un background très typique de développeur.
Je faisais juste mon temps libre depuis que j'étais 11 ans.
Mon premier travail de temps était que je suis allé au Mozilla, en travaillant sur le stuff de Firefox,
quand j'étais 18 ans.
Et puis j'ai quitté ça juste un an après tout ce temps.
C'est très bien.
La vie de mon adulte est ce projet de plus en plus.
Vous avez commencé à être 11 ans, et vous avez été allé au Mozilla à 18 ans.
Vous avez déjà été des internals de browser?
Non, c'est comme ça.
Le fait que j'ai été en browser, c'est que j'étais en Web Dev,
comme la partie de mon développement actual.
J'ai fait des part-times, je suis en contracte,
donc c'était très divertissant.
Je me suis rendu compte que j'ai fait un livre
en travaillant sur un truc d'open source,
comme moi, et qu'un des personnes m'aie utilisé.
Et puis la personne qui a fait le triage,
c'était comme, oh, tu peux le fixer, c'est 5 lines.
Et je me suis dit, oh, je ne sais pas.
Et puis je l'ai fait et j'ai été addict de fixer plus de livres.
C'est cool.
Vous travaillez sur la tension de JavaScript?
Que part de la browser travaillez-vous?
Quand je faisais les livres, je faisais tout à l'heure
où j'étais intéressé.
Je faisais beaucoup de trucs de débug,
puis des choses de CSS, et j'ai étalé le DOM,
qui est la browser et le JavaScript.
Donc, tout le API exposé,
tout le API exposé sur la web,
c'est basically DOM,
tout ce qui est document, elements, CSS.
Et c'est tout ce qui est très important.
Oui, donc pour le projet, on parle de VOR4.
Comment avez-vous été en train de faire ça?
En regardant votre site,
votre projet précédent,
c'était de créer un browser avec juste un JavaScript.
Je me sens comme que je peux connecter 1 à 2,
où vous vous dites, oh, je faisais ce truc,
oh, je voulais être rapide,
et puis vous avez fait le pipeline.
Oui, je me suis fait le truc,
je me suis fait chier à quelqu'un en personne.
Oh, et là, on a fait le browser et le JavaScript.
Et tout le monde,
c'est comme, il n'y aura jamais de la même chose que vous utilisez,
mais c'est juste de la mer.
Je pense que j'ai un peu de base sur le web,
mais c'est seulement, à la fin de dire,
5 000 lines de JS,
qui sont très détenus.
Et ce n'est pas de la même chose que la faible.
Par exemple,
le niveau de la base de HTML est très bien spécifique,
vous avez juste écrit un long document,
c'est assez facile de transporter à JS.
Donc, oui, de là, je me suis dit,
oh, c'est vraiment cool si je fais le JavaScript en 2,
mais je me suis dit que les interpreteurs sont drôles.
Ils me disent que je n'ai jamais réglé les interpreteurs,
mais je les ai vu,
je pense que j'ai fait un langage de toilette,
j'ai utilisé un long,
et je me suis dit, oh, la période est vraiment cool.
Tout le monde dit que c'est impossible pour les JavaScripts,
je vais aussi perdre mon temps libre
pour que les gens puissent dire que c'est impossible.
C'est quelque chose de innovateur,
quelque chose d'interessant,
que je n'ai pas de succès à faire ça dans mon temps libre.
Peut-être que c'est vraiment de la grande valeur
pour les listeners et les gens qui ne peuvent pas être
complètement stupides en termes de compiler.
Vous pouvez expliquer
comment le JavaScript normalement
compile avec la compilation de la temps,
et comment ce que vous faites est différent.
Oui, donc, typiquement,
aujourd'hui, tout est en temps de compile,
ou en interpreter.
Les engines de JS n'ont pas,
je pense que la V8 a un temps libre
en compiler maintenant,
et en interpreter,
parce que vous pouvez avoir un très rapide
compiler,
qui ne va pas faire votre code,
la code machine rapide,
et ça peut aussi prendre un second
pour compile,
comme réact, parce que c'est un grand JS file,
par exemple.
Et donc, si vous avez un site de chaque web,
vous avez un délai de 5 secondes,
et vous avez un temps libre,
donc, en temps libre,
vous faites juste en temps,
mais vous ne faites pas juste en temps.
C'est la meilleure explication.
Sur la machine de développeur,
comme un bundle, ou des tools,
vous avez juste des JavaScripts,
en faisant un assemblage,
ou une fin de fin,
comme un truc entre les deux.
Donc, c'est tout bon, mais je n'ai pas
utilisé un compiler en temps libre,
quelles sont les bénéfices
vers le compiler en temps de compile ?
Oui, parce que les json de JS
sont construits pour les browsers,
les browsers sont orientés,
c'est génial.
Et les services translés sont aussi
pour les services de services,
et les choses d'embêtement,
il y a un peu de JS engines,
parce que vous avez, par exemple,
un huit megaviram,
pour les browsers,
pour chaque JS engine,
il y a 99 % de la v8,
ou peut-être des JavaScripts,
si vous utilisez un bon,
ou un Safari.
Donc, c'est juste...
Ouais, c'est tout bon pour les browsers,
mais en général, c'est génial,
pour les services,
parce que, par exemple,
il n'y a pas de temps de start-up,
il n'y a pas de coût,
il y a un binary,
il y a un temps de start-up,
et on va mettre le jet,
pour être vite,
et tout ça.
J'ai fait un benchmark, où j'ai eu
AWS Lambda, avec le node de management,
qui est vraiment vite, parce que c'est cashed,
et je pense que c'est spécifiquement optimisé,
pour un...
et j'ai pour 4, juste en faisant un
Hello World HTTP, et je pense que mon code
commence à, je pense, 50 milliseconds,
et ça va être plus de 200.
Donc, ça démonstre
que c'est juste, comme,
un C ou quelque chose, mais ça s'occupe
en JavaScript. Pour les browsers,
ça transmet bien,
ou il y a des difficultés en faisant des temps de temps,
comme, je ne supporte pas,
mais je suis pas sûr que ça va être
un bon moment, parce que c'est un dynamique,
qui, vous pouvez juste analyser
le temps de temps de temps, mais pour maintenant,
je n'ai pas vraiment eu ce limiter,
et je pense que, au moins,
en 2025, que les gens ne sont pas
utilisés en évo.
Oui, c'est un de mes questions,
ou des questions, je pense que
il y a juste des comportements dynamiques
en JavaScript, qui vont être impossible
de représenter, peut-être,
des importations dynamiques
qui ont un variable
de la string, peut-être,
je sais que c'est un problème
pour les bundles,
si vous avez un variable dans un
comport dynamique.
Il y a des choses qui sont très bonnes,
par exemple, les proches,
c'est juste un objectif, il y a des
attributes spéciales,
il y a des choses qui sont
vraiment plus simples, qui sont
très difficiles,
c'est des clôtures,
c'est-à-dire que les développateurs
sont très bons,
et je peux partager un variable
sur ces deux fonctions, les fonctions
nestées, qui sont vraiment très bonnes,
mais en fait, en faisant ça vite,
c'est un problème.
Oui, je vais vous demander
de la question, je suis dans le centre de recurrence
de l'année dernière,
et il y a beaucoup de gens
qui travaillent sur leur own languages,
et je suis en train de
faire des clôtures et
d'une manière spécifique,
et je sais que vous avez un compiler
de Wazom, donc c'est drôle
de parler un peu plus d'envoi,
les difficultés avec les clôtures
quand vous avez l'air de compilier?
Oui, les clôtures sont probablement
les plus bogus que j'ai
en train de faire en cours,
juste parce que
quand j'ai commencé à faire un approach
de la variable local,
je ne voulais pas de clôtures,
mais si vous avez des fonctions
nécessaires entre l'un et l'autre,
si vous avez un accessoire
de la variable, et que vous avez
une bar de fonction,
ce n'est pas
comme un reference,
c'est un truc que je suis en train de faire,
c'est très dur et très difficile
de le faire,
mais vous pouvez juste faire
chaque variable
en en faisant des memoires,
c'est très facile, mais très lent,
parce que c'est un accessoire de memoire pour tout,
c'est un truc très important.
Un peu de ce truc,
d'une manière existante,
mais un peu de la suite,
c'est très bien,
parce que ça a des limitations
qui sont typiquement belles.
On a commencé cette conversation
avec la supposition
que construire un compiler
pour JavaScript est un task impossible.
Pourquoi
les gens pensent ça?
Et quel était le moment à l'aie
d'être possible?
Oui,
beaucoup de gens disent ça et encore ça,
mais je ne les brise pas,
parce que j'ai un langage très strict,
c'est Roast C+,
et le strict que vous avez,
c'est plus facile de faire,
c'est comme ça,
mon rêve, c'est de
avoir un JS,
mais des choses qui peuvent être très lentes,
et des choses qui peuvent être très vite.
Il n'y a pas de limitation,
c'est juste de la traduction,
c'est juste de la traduction,
je pense que c'est vraiment très mal,
mais vous pouvez avoir
comme beaucoup de code,
pas de la plus vite,
mais c'est encore plus facile,
parce que même si c'est quelque chose
de la mode,
et que je ne peux pas retirer
une autre compétition, c'est 100 code,
chaque ligne de code a de la même fonction,
mais il n'y a pas de la plus vite.
Je ne peux pas vraiment mettre un homo,
c'est juste de la traduction,
et je suis en train de
aller dans une ligne,
mais la ligne n'est pas là,
et je me suis dit que c'est pas possible,
c'est juste un task
de la mode,
je dois impliquer tout le JavaScript,
et de sa propre manière,
de la mode.
C'est presque le même problème,
que le team TypeScript a été solué,
ils avaient à ajouter les types
pour la language dynamique,
et ça a terminé
avec les gens en évaluant un subset
de JavaScript,
je pense que le même chose est vrai ici,
si on est à l'endement de votre tour de développement,
on va arriver à un endroit où il est dit,
il y a un subset de choses, c'est le path happy,
et vous pouvez supporter ces path non-happy,
mais ils seront bien déoptimisés.
C'est un bon point, je supporte TypeScript nativement,
il n'y a pas de transpiler,
d'autres types en-between,
je suis en mode optique,
je peux utiliser ces types,
c'est comme un compiler,
il n'y a pas d'intagère,
je ne peux pas le checker,
il y a deux numéros à l'aide d'une autre,
je n'ai pas de 2 strings,
je peux mettre un code ou un numéro,
c'est génial,
parce que vous pouvez juste le faire pour la liberté,
mais aussi, je suis très content
de avoir des types de son,
c'est pourquoi c'est optique.
Je supporte le path TypeScript nativement,
et j'ai l'option d'avoir ça,
et il y a beaucoup de choses,
j'espère que ce ne sera pas l'inter,
mais si vous utilisez un compiler et que vous faites quelque chose,
c'est évidemment plus mal,
juste vous donner un warning,
c'est mieux que ça soit plus bon,
c'est mieux que ça soit plus bon,
les gens sont conscients de la code,
c'est pas mal de compiler,
ça peut être très bon et malheureux.
Ce projet me rappelle un peu,
on parle de
un gars qui a
construit Doom
et TypeScript types,
entièrement,
il a fait un
building,
un Wazzam interpreter,
et typeScript types,
et il a écrit Doom et Wazzam,
il a dit, je ne sais pas, il a juste continué,
je l'ai juste imaginé, je serais un truc
qui se disait, non, c'est impossible,
mais ça n'a jamais été possible,
et je me sens comme si c'était la même chose,
et je me disais, peut-être que j'ai fait un redlock,
mais...
Oui, parce que
même que c'est comparé à l'existence des compétences,
mine est très dure,
il y a beaucoup d'optimisation,
je n'ai pas fait ça,
et c'est toujours
un des médecins, je l'ai essayé de la plus vite,
c'est un très populaire, c++,
petit, nice interpreter,
et c'est ça que je n'ai pas de fanci,
je vais faire ssa
pour optimiser
ce variable, c'est toujours
ce numéro,
je peux juste le lever,
ou je peux faire des médecins de compétences
Oui, c'est cool,
donc, quand tu fais une compilation,
tu as, sur le homepage, 2 choses,
tu fais compilation de WASM,
et compilation de native,
tu es tenté
de retrainer les deux targets,
et peut-être que tu parles un peu
sur les difficultés et les supports,
et si tu as des paroles,
ou si tu peux faire un,
ou si tu n'as pas de autre, etc.
Oui, donc, WASM est mon target primaire,
et native est un secondaire,
mais c'est plus pour le point de,
maintenant, je suis en train de faire les WASM,
parce que c'est
le moyen de la façon dont
native fonctionne, c'est que tu compiles
pour WASM, et j'ai un autre compiler,
qui n'est pas juste pour voir,
et tu te le dis pour GCC ou Clang,
ou même si tu as des mots
spéciales, compiler, frame better,
etc. ça devrait travailler bien.
Donc, pour maintenant,
j'ai le seul genre de pain
de maintenir les WASM pour voir
les mots, mais c'est
assez facile, c'est juste plus,
parce que c'est plus de la bête à faire maintenant,
juste parce que je suis juste en
focussant sur les WASM,
ça marche bien, comme en formes.
Ça fait le sens.
L'un d'entre vous a fait en construisant
ceci, c'est que vous avez écrit tout ceci
en JavaScript, en itself.
La plupart ne ne utilisent pas
pour construire quelque chose comme ça.
J'ai tendu à faire
un autre chose dans la collège, où j'ai
construit une langue de toilette
sur le JavaScript. C'était difficile.
Pourquoi avez-vous fait cette choise
et que ça a des bénéfices?
Oui, c'est comme, honnêtement, c'est juste
quand je commence, c'est la langue
qui est la meilleure. Parce que je sais
que c'est plus, c'est plus, et c'est
plus de la bête, mais c'est juste
que je peux faire le plus vite
pour construire un JavaScript.
Il y a aussi un grand rêve
de l'autre jour, que je peux compter
en itself, mais pour maintenant, c'est
encore très d'un scope.
Je vais vous demander, est-ce que le port 4
est compilé par le port 4? Mais ça serait probablement
que vous devez faire un code
trop fort à ce point, non?
Heureusement, pas encore.
J'espère que l'un d'entre vous
a des choses qui ne sont pas les meilleures.
Je peux juste le cranger,
car je pense que ceci est génial
pour la software de production, mais
ceci est un prototype
et une chose de recherche.
Je suis attentionnée
de ne pas dire que je vais utiliser
ceci demain.
C'est la production qui est prête.
C'est cool, mais
vous ne devriez pas utiliser ça. Vous devez être
excitées, mais vous ne devriez pas
râcher de l'utiliser.
Je vais aller à un stage où les gens peuvent
essayer, et s'il vous plaît,
si vous avez des livres,
je ne vous souhaite pas de travailler
encore, parce que
ça prend un peu de temps
pour juste supporter
tout le JS.
Je suis en commun, donc je vais
essayer de le faire, mais je vais essayer
de le faire.
Vous voulez prendre la question de la corne?
Oui, vous utilisez la corne
pour la parcerie
de la JavaScript, mais
comme tout le monde,
c'est juste écrit en scratch.
Qu'est-ce que vous avez
motivé la décision de utiliser ça?
Je pense que
le problème de la parcerie de JS
a déjà été solide.
Je ne pouvais pas vraiment faire un autre chose
pour que ça soit mieux ou mieux.
Acon
est très rapide, mais
je pourrais
faire mon impassement, et ça va être rapide,
parce que je peux juste automiser mon use case
et ne pas le faire à n'importe qui.
Mais c'est bon, car maintenant je n'ai pas
de la parcerie de JS,
donc je peux utiliser
un format compatible
pour la parcerie de JavaScript
ou la parcerie de Sintax.
Si vous avez un support
de la parcerie de JS,
vous pouvez aussi utiliser
le code C.
Si je suis en train de
utiliser la parcerie de
TypeScript, je vais utiliser
les parceries de Bables, parce que
ils ont une support de typeScript,
et aussi un support compatible
de Sintax, qui est vraiment sympa.
Je vais changer la parcerie
de la parcerie de Bables,
parce que Bables
apporte beaucoup plus de features, même des propositions
qui sont vraiment plus tardées, mais aussi
une parcerie de Bables,
parce que ça fait plus de travail, ça fait du sens.
Mais c'est un des bons traitements
de la période de temps,
quand vous faites juste en temps,
la parcerie de la parcerie
et la parcerie de JavaScript est
beaucoup plus haute.
Donc si vous ajoutez plus de
des parceries, c'est mal pour UX.
Mais si vous ajoutez plus de temps
de compilations, peut-être un développeur
va compléter, mais il y aura encore
une meilleure UX en fin de compte.
Oui, je pense que la parcerie de la parcerie
est vraiment importante pour DX, mais
dans mon expérience, je suis toujours
inquiétant, mais dans mon expérience
de la parcerie, je pense que la plus longue
parcerie de la parcerie que j'ai vu est 2 secondes.
Et c'est comme ça que ça a été connu.
Où pensez-vous que le port 4
est pour l'utilisation de votre site web?
Est-ce que c'est le cas du main?
Ce n'est pas le cas du main.
Maintenant, je suis...
pas le sabre,
mais le vrai fait est que je ne vais probablement pas
être plus rapide que le v8.
C'est le plus rapide que j'ai vu en temps de compilations,
c'est parce que ça a...
Je ne sais pas combien de millions et
de centaines de personnes en train de travailler,
parce que ça fait le sens.
Donc mon goal est tout de suite...
C'est comme mon goal de plus en plus,
mon goal en termes de temps est que c'est un meilleur interpreter,
où c'est plus rapide et plus petit
et tout autre.
Donc si vous faites un js pour le WebAssembly
maintenant, le plus rapide que vous pouvez faire
c'est que vous bombez votre source code
avec un interpreter, comme QuickJs
ou SpiderMonkey,
c'est génial parce que ça fonctionne,
mais aussi, les binders de Wazen
sont à moins de 2 megabytes,
et aussi c'est très rapide
parce que vous êtes interprétant
avec un Wazen qui ne fait pas que le rapide
est un peu plus rapide,
donc dans mon test,
j'ai vu 50 fois
plus petit de la taille et de la vitesse
juste parce que c'est un temps à l'intérieur
d'interprétant, et aussi parce que
Wazen est sa propre forme, vous êtes en interprétant
et interprète,
ce n'est pas très rapide pour la performance.
Et puis il y a beaucoup de outils
que je n'ai jamais pensé,
qui les gens apprécient, et je suis comme, oh, ça fait le sens.
C'est un serverless AWS Lambda,
vous ne faites pas des commets,
parce que c'est déjà compilé.
Et si vous faites un game engine,
si vous voulez un script ou un JavaScript,
c'est votre langage scriptier,
les consoles de game ne vous permettent pas
de chier les gips pour les raisons de sécurité.
Donc, vous n'avez pas de choix
pour l'interprète,
ce n'est pas très rapide
si vous avez 5ms par frame.
Donc, si vous pouvez juste compiler
tout ça en temps et prendre la valeur
pour 25ms, c'est vraiment sympa.
Je me demande si il y a un cas de use
où vous pouvez utiliser
pour un temps
pour certaines parts
de votre programme, et puis
pour des autres aspects.
Donc, si vous pouvez appeler
des heuristiques, vous pouvez encore
faire des bénéfices.
Oui, c'est certain que si vous avez
une éval ou quelque chose,
comme, j'ai le souci de
faire une interprète pour l'éval,
donc ça peut être bien.
Mais si ça n'est pas proche,
si vous avez des choses qui vous
vous dites que vous êtes en train de
faire un capteur, et que vous voulez
être protégé, et non
être un ingénieur de reverse,
vous pouvez compiler la Wazem
en fait, pour un JS.
Une autre question que j'ai,
je sais que la Wazem
a récemment été la spec pour version 3,
Landed, et
ils ont été travaillant sur un collecteur de garbage
dans la Wazem. Vous utilisez ça
quand vous compiliez la Wazem,
ou vous faites juste de la
collection de garbage?
A l'heure de maintenant,
je n'ai pas de collection de garbage
maintenant, parce que dans mon test,
je vais faire un test,
et le premier niveau que je vais faire,
je vais travailler sur ça.
Maintenant, j'ai fait des bugs
avant la collection de garbage, mais c'est
très bientôt.
J'espère que je vais avoir 3 modes,
vous pouvez juste évoluer la collection de garbage,
si vous avez encore 5 milliseconds,
et puis vous en avez eu,
vous ne avez pas de collection de garbage
à l'heure de maintenant.
J'espère que vous pouvez utiliser entre Wazem GC
et mon GDC, parce que si vous vous
vous en avez pour les embeds,
ça ne vous aide pas à la Wazem GC,
ou si vous ne vous en avez pas pour la Wazem GC,
je vais avoir une implantation de moi-même.
Mais si vous vous en avez pour un browser,
vous pouvez utiliser Wazem GC,
ou si vous vous en avez pour un
Wazem Blob, un Node,
pour une raison, vous pouvez utiliser Wazem GC
pour nous ؟
A Beginn de l' знаешь,
sauf que ces確 formules
n'ont pas кур faut pour cupboard
ouography.
Dans le Satanic,
Mal fortunately,
Je pense que c'est 0, Web App, on a pas fait des timeouts ou des réponses de request,
on n'a pas fait ça, parce que je n'ai pas encore été fait.
Mais c'est intéressant de voir comment les web-adjacents, quelque chose qui semble interagable aux langues,
ont fait des timeouts, je pense que les avarages de la redevolution sont juste dans le spec JS,
même si ce n'est pas ça, les gens ne le savent pas.
Fetch a l'air de la redevolution de JS, c'est comme un web,
mais c'est un bon truc, les gens peuvent juste rouler ça en mode,
ou on va mettre ça dans le browser, ça fonctionne tout le monde.
Je me rappelle que c'est un install de Axios ou un package Fetch,
ce qui est beaucoup plus bon.
Je vais supporter ça en plus, mais le plus important c'est le part de runtime,
c'est un part de RME, mais c'est un nécessaire.
C'est intéressant de faire des calls de réseau,
ou juste de faire un tour de runtime.
Oui, c'est juste le moteur, le compiler,
j'ai quelques bits de vies, des choses de file,
mais c'est intéressant, j'ai FFI,
c'est en fait, vous pouvez faire tout ce que vous voulez,
par en justifisation de la c-libré, c'est vraiment bien.
Le premier point dropped,
une fois que vous les écartez,
et vous avez trouvé ,
c'est vraiment bien breast Medic,
eh bien en ce moment,
Je suis pas un pote de taigre, je pense.
Mais c'est pas mal de faire des listes qui sont en train de faire des trucs à temps.
Mais je pense que les cas de use sont toujours 99% réagné, ça fait du sens.
C'est bien de juste pouvoir commenter sur des choses.
C'est très cool de voir que tu as l'impression de respecter,
même si je n'ai pas de 0 outils, je suis en train de le chier.
Je pense que c'est bien de juste pouvoir réagir sur des choses et de parler avec les gens.
Je suis sûr que tu es en train de faire des problèmes de la path de la execution non traditionnelle.
Ce n'est pas nécessaire de penser, mais je suis sûr que cette perspective est valable.
Parce que la JavaScript est tellement de la language,
et ça ne va pas seulement continuer à développer,
mais aussi à penser à des cas de performance,
qui, en particulier, l'a à temps, lèvrent à la fois.
C'est une chose importante de penser en termes de la language.
Il y a beaucoup de choses qui ne sont pas idéales pour les cas de la language,
mais qui n'ont pas l'impact.
Il y a aussi des arguments sur les deux.
Il faut l'allocer sur l'objectif et les réunions des arguments.
Si c'était juste deux arguments, c'est juste deux choses sur le heap.
Il y a beaucoup de choses comme ça.
Même la ligne de code,
et la code de code de l'usage,
peuvent faire une fonction de 10 fois plus.
J'ai eu une optimization que j'ai faite l'autre jour,
qui fait un array.prototype.push.
Je peux prendre un nombre d'arguments,
et c'est juste un rest-array.
Avant, je pourrais aller sur un nouveau array,
qui fonctionne en perspectif,
mais aussi en l'allocation de la même manière,
et je change ça à...
C'est une fonction interne,
et je peux réutiliser ça,
pour aller sur le code de l'alloc.
En allocant une fois pour aller sur le code,
je ne peux pas faire le même.
Je ne peux pas faire le même,
parce que l'allocation de la même manière est très lent.
Mais ça fait beaucoup de choses,
qui ne peuvent pas vraiment m'aider.
Je pense un peu à ce sujet.
Je peux voir des cas de cas de Java,
où ça serait un cas parfait.
Vous avez mentionné,
que vous avez envisé un grand target.
Qu'est-ce que vous pensez que ça doit arriver,
avant que...
ou avant que les cas de la même manière
sont utilisés pour un travail,
ou quelque chose.
C'est une bonne question.
Je pense que c'est juste un truc,
que les switches font 99%
de la Java,
sur lerá comme ceci.
Je pense que c'est unれ,
que la cathedral soit contains des quizas,
On peut créer une� hitch tout de même,
fourric verd available,
C'est bien de faire un interface avec un abstract.
Pour que ce soit un des des IO-Things,
en regards à l'opérant.
C'est un peu...
Je pense que c'est pas difficile, c'est juste...
Le temps est très limité.
Ouais, pour Wazim,
est-ce que tu penses que tu vas utiliser Wazim?
Pour IO ou quelque chose d'autre?
Ouais, le Wazie est vraiment intéressant.
Je mets des feeling.
C'est un genre de genre,
donc ça peut être parfait pour d'autres utilisateurs.
Je vais en supporter,
mais c'est...
Je ne sais pas, car depuis que j'ai commencé,
il y a déjà eu une grande version de change.
En tant que je sais que le interface est complètement différent.
Je vais donc juste attendre pour que ça se déterne avant de faire ça.
Pour le moment, c'est un peu plus stable.
Tu peux être en train de attendre.
Ouais.
On va voir.
Donc, avec Wazim,
tu as des implications de sécurité intéressantes
en tant que sandbox,
ce qui tient à avoir des bonnes propriétés.
Est-ce que tu as des extra benefits
que pour IO ou Wazim?
Est-ce que tu as des extra sécurité,
comme des cartes dans le Wazim?
Ouais, donc le sandbox est vraiment intéressant,
parce que c'est l'une des plus grandes innovations,
c'est de la javscript sur le server.
C'est comme des travailleurs claviers.
Ils n'ont pas de containers,
ou des machines virtuales.
Ils justent isoler via VA.
Ils justent isoler via sandbox tout de suite.
Et je ne suis pas malade.
Donc, avec Wazim, tu peux faire ça,
ou même s'y couper.
Tu n'as pas de containers,
de machines virtuales,
tu peux juste avoir...
ici, c'est le processus de Wazim,
pour lui.
Wazim est très bien sandbox.
Donc,
tu vas très facilement contrôler,
comme pour les utilisateurs,
et aussi juste avoir la sécurité.
Wazim,
à la fois,
VA a beaucoup de bugs de sécurité,
en fait, parce que c'est un projet très grand,
mais,
comme je le sais, Wazim a beaucoup moins,
parce que c'est plus de la surface.
C'est infiniment plus simple que les javscripts.
C'est vraiment très bien,
donc il y a beaucoup moins d'issues de sécurité.
Donc,
juste avoir la protection,
et aussi une partie d'isolation,
pour faire que je puisse juste
faire,
en faisant deux machines virtuales,
qui peuvent tous s'en prendre,
pour faire,
un maximum de 100 mètres,
pour faire 20 Wazim processus,
qui peut tous s'en prendre.
Une des questions que je veux vous poser
est un peu de l'expérience de développeur.
Comment penses-tu
sur les débarquements de débarquements de débarquements?
Est-ce que tu peux essayer de réplicer
quelques des tools que les browsers ont?
Oui, donc,
j'ai déjà,
je pense que quelques mois,
j'ai écrit un petit débarquement,
c'est juste un CLI,
c'est un
très rudimentaire,
crème de débarquements,
qui peuvent juste faire des débarquements.
C'est possible,
c'est juste,
rien n'existe,
donc,
je vais aussi avoir à faire ça.
C'est juste,
je pense que le style sera pas
facile de développer,
mais ça va être
plus et plus de temps.
Donc,
d'explication,
ou d'inspectation,
pour être,
c'est bien parce que j'ai dû faire
quelques des tools pour moi-même,
juste pour,
mon propre DX,
en faisant ça.
Donc, c'est bien,
j'ai ce genre de
« dog-feuding ».
Oui, je peux imaginer,
il y a beaucoup de différents tools
que tu peux faire pour ça,
car c'est presque
comme un environnement de salle,
où tu peux utiliser rien
qui est à la chelon,
c'est vrai?
Oui,
je suis toujours surpris
que c'est mon renneau de la journée,
mais je ne sais pas,
juste,
je veux dévoire la chelon,
je n'ai pas de manière pour faire ça.
Je veux juste que je fasse
ce « wazm »,
comme le « Chrome DevTools »,
mais aussi,
je ne veux pas
faire le browser.
Il n'y a pas
juste un « gdb »
par exemple,
pour « wazm »,
parce que,
oui,
il y a toujours
beaucoup de choses à faire,
il y a beaucoup de tools
à utiliser,
et aussi,
il y a peu de temps.
Oui, c'est bien,
c'est un peu d'un moment,
mais le tournoi
se fait,
c'est vraiment très lent.
Je veux dire,
il y a probablement 5 « wazm »
de temps,
mais il y a
des « 0 wazm »
de temps.
C'est très,
le tournoi est
dans un peu d'inquiétude,
mais
beaucoup de tournois
sont en train de se faire,
et le verre
peut juste être
complètement
juste en train de s'éteindre.
Je pense que
c'est juste
parce que je n'ai pas de
honte
de rire,
parce que
« wazm »
est une chose d'une personne,
je ne veux pas
même « wazm »
pour le web aspect,
juste de la laitière
de la laitière,
de juste
« je veux quelque chose qui peut rire
facilement
et se transler
sur des choses plus
facilement,
ce n'est pas
quelque chose d'autre,
la plus simple
c'est la « lbm »
et c'est
beaucoup
pas bon à utiliser,
c'est juste
plus bon,
c'est plus bon,
c'est juste
un brésil
plus bas,
ça fait du sens,
mais
c'est bien,
c'est bien.
Si je vous donne « wazm »
vous pouvez
faire ce que vous voulez,
avec des tools
ou si pas,
si vous le voyez,
vous pouvez le faire.
Oui,
probablement la portability
de « wazm »
est la « shortfall »
c'est comme,
il peut être dans so many places,
qu'est-ce que vous êtes
exactement
en train de faire un « debugger » ?
Oui,
c'est très,
je pense que
les deux « wazm »
et « c »
sont les plus
peuples que vous pouvez faire.
C'est
tout de suite
ce que je parle
sur ces deux choses.
Donc,
sur le site,
vous avez un playground
où vous pouvez
faire le « JavaScript »
et le faire.
Comment ça fonctionne ?
Vous avez,
je pense,
parce que c'est en « JavaScript »
vous pouvez le faire
dans le « browser » ?
C'est un bon truc,
c'est en « JavaScript »
j'ai l'impression
que le site
est le même « repo »
que le projet.
Je pense que je vais
faire un « wait and pull »
compiler
et ça
fonctionne
parce que c'est en « JavaScript »
et parce que
c'est un « outputs web »
c'est un « output web »
c'est le meilleur,
c'est le meilleur
et c'est le meilleur
en « realistic use case »
ou c'est
comme si vous pouvez
compiler
c'est-à-dire
un « jit compiler »
par exemple
c'est
juste importe
index.html
et ça
fonctionne
parce que
je ne veux pas
être quelqu'un
qui fait
« gcc »
dans le « browser »
C'est
intéressant
parce que vous pouvez
faire un « JavaScript »
pour un point de fin
et avoir un « wasm »
pour le « return »
vous pouvez
même
c'est pas
pas si facile
mais vous pouvez
probablement
faire un « cloudflot »
pour 3-2
ici c'est
« wasm blog »
par le « JSOS »
c'est vraiment intéressant
c'est un très bon
« render JS »
c'est un bon « render JS »
comme si vous avez
un « node »
installé
ou un « browser »
vous pouvez juste
« run it »
parce que je
ai utilisé
quelques compilations
avant,
c'est « please compile lvm 14.5.6
et ça fait 2 heures
c'est un « compile »
et vous allez
« ok »
mais c'est aussi bien
parce que même si
je veux faire un « change »
c'est juste « JavaScript »
c'est un « c++ »
d'un « c++ »
d'un « 5 ans »
si vous touchez
cette ligne
tout le monde s'arrête
c'est un « underrated »
« future »
je n'ai pas
vraiment réalisé
que quelqu'un m'a dit
c'est juste
c'est comme
je passe
juste au 60%
avec l'entente
test suite
pour tester
chaque « spec » feature
et c'est
25 000 lines
de « JavaScript »
et « typescript »
d'autres « engines »
je pense que « Quick.js »
c'est « Quick.js »
parce que c'est « Quick.js »
c'est assez petit
et c'est juste « c++ »
je pense que c'est
80K lines
c'est plus de 85%
donc juste
d'avoir
un « small thing »
pour travailler
c'est juste
beaucoup plus facile
et plus facile
pour maintenir
c'est « v8 »
qui est
je pense que
plus de 1 million
de « c++ »
c'est plus petit
oui, vous avez juste
mentionné ça
mais vous
la principale métro
pour votre développement
a été
complétant ces tests
et
ce test
test 262
donc, qu'est-ce
ce test
qu'est-ce
?
où est-ce qu'il existe ?
et c'est-à-dire
que la route
a été complétée
sur le test suite ?
parce que je pense que
j'ai vu un blog
de vous
depuis un an
où vous êtes à 35%
combien de temps
sont-ils
au moins 100 ?
oui, le test 262
était nommé
après la « ECMOT 262 »
qui est le « actual JS »
donc, les deux sont
élevés par TC59
qui est un comité
qui a décédé
un JavaScript
donc c'est tout seul
dans le spec
comme tout seul
c'est juste testé
pour un test
il y a un
loop
il y a un 5 fois
et un test
peut être
qu'est-ce que
l'ordre
de propres et cet objecteur
et vraiment
plus de choses
donc c'est
comme un truc de la fin
ou un truc
même, comme un temps
de progrès
je pense que c'est
comme un solid
10% à 20%
de l'ensemble
de test suite
parce que c'est un proposal
ils ont
besoin d'un grand nombre
de tests
donc, maintenant
j'ai 60%
et oui
mon objectif
est probablement
de 90%
très long terme
parce que c'est
comme le plus grand
JS
maintenant
je pense que
je vais aussi
j'ai
aussi un site
qui est testé
tout le JS
en existence
à l'extérieur
je vais dire
c'est comme un dégât
comme un challenge
d'enginére
juste de faire un JS
en working nicely
en CI
oui, donc
le JS
maintenant est le spidermonkey
qui est à 98%
qui est très bon
parce qu'ils ont
10 pours
et tout le monde
a un nouveau
c'est-à-dire
j'espère être
là-bas
à l'invent
oui, j'espère que
à l'actualité
à l'invent
de l'année prochaine
je peux arrêter de rire
sur le test suite
et juste être
à un bon stage
je suis
passé
à 80%
où les choses ne fonctionnent pas maintenant
parce que
quelqu'un a une
no API
et ça ne va pas
contre quelqu'un
en utilisant
un JS
en fonction de
je pense que
je vais supporter ça
il doit être vraiment bon
d'avoir un test suite
extensif
pour juste
faire des bans
parce que
combien de langues
ont-ils que vous?
ou vous avez un test
pour tout?
oui, c'est
le plus
le plus bon
pour travailler
parce que
j'ai mon test suite
quand j'ai commencé
et j'ai fini par
dépasser
parce que
même je pense
à chaque
commit
je le run
dans CI
je teste
tout le suite
avec 50 000 tests
de bans
plus de décisions
donc je
j'ai un bon test
chaque
commit
chaque fois je le run
c'est juste
au test
non
on va
la
Lepflicht d'exanger un D Natureнит a
Stephanie, quand tu es débile en
matière de jeu framework, et patname bien sûr,
Je parle avec un uno de neuf d'un
Pour exemple, il y a beaucoup de choses, si vous vous appliquez à des types,
ce variable est toujours un string, je peux juste délire
un code à checker si c'est un numéro, un big int ou quelque chose comme ça.
Un bon truc pour les 3 avant de la fois est qu'il faut juste
faire un truie-check pour le JS en temps JS.
Si vous n'avez pas utilisé BigInt, vous pouvez juste chier 0 code dans votre binary,
ce qui est en train de faire BigInt. C'est pour savoir ce qu'il faut utiliser.
Je peux dire que ça a été vraiment cool.
Vous avez aussi l'idée que l'IoStuff est externalisé,
c'est assez grand pour si vous avez un enjeu d'exécution durable,
vous devez faire surement que tout l'Io soit déterminé,
c'est comme si c'était un cible, le même ronde,
et je pense que c'est une des opportunités très intéressantes.
Surtout avec Wazm,
parce que Wazm est aussi complètement déterminé.
Il y a un peu de nouvelles choses qui sont juste impossible
parce que c'est un genre de v8 ou un big engine
qui ne ressent pas de utilisation.
Oui, sur ce sujet, je travaillais en train de commencer
une des formes de guest, Juan Campa,
qui a travaillé sur ce produit, qui est utilisé en QuickJS.
En explorant l'espace, AWS a eu une runtime de QuickJS
qui a été utilisé pour la Runtime de Light Lambda.
Il y a beaucoup de gens qui ont exploré le JavaScript,
mais en plus de la scale plus petite et plus rapide,
on va voir plus de cas de utilisation,
plus de cas d'utilisation, plus de besoin pour un temps,
et d'autres gens qui vont explorer l'espace.
Oui, c'est un peu de la clé,
il y a beaucoup de gens qui ont déjà utilisé,
et aussi beaucoup de gens qui ont utilisé le JavaScript.
Je vois que chaque mois,
je vois un nouveau use case,
et je pense que ça fait un sens total.
Je n'ai jamais pensé ça avant.
Je pense que plus de gens vont explorer le futur,
mais pour maintenant, c'est professionnel.
Je pense que pour le moment,
je pense que pour le moment,
je pense que c'est un peu de la clé,
mais c'est un peu de la clé,
et c'est un peu de la clé,
mais c'est un peu de la clé,
et c'est un peu de la clé,
et c'est un peu de la clé,
et c'est un peu de la clé,
et c'est un peu de la clé,
et c'est un peu de la clé,
et je contrôle l'engine de JS,
je peux juste rééter les strings,
même si je n'ai pas rééteint le JavaScript,
comme internally,
je suis concatené à 5 strings
dans une fonction interne.
Je peux juste rééter un string,
un string builder dans les autres langues,
en avant que je dois aller 5 strings,
un string de la pièce,
je peux juste rééter un membre,
ou un membre,
comme ça,
il n'y a pas de choses typiquement,
mais il peut juste faire,
parce que tu peux faire internally,
comme les langues existantes,
mais tu peux faire ça en usant,
si tu veux vraiment.
Je dois avoir un built-in intrinsique,
qui peut juste faire un assembly web,
parce que
si tu peux utiliser ça,
tu peux utiliser ça aussi,
c'est bien sûr, pourquoi pas?
Si tu as une performance extrêmement critique,
pour une raison, tu peux juste rééter un assembly web.
Donc, si tu pouvais changer
le langage de JavaScript,
et en quelque façon,
pour que ça soit plus facile,
ou pour que tu le change?
C'est une bonne question, je suis bias,
parce que ce que je fais, c'est que je fais closures,
parce que je fais ça,
et je le despise,
mais je dirais,
probablement plus long terme,
comme éval avec la fonction de la fonction,
de la dynamique,
pas vraiment juste de la délire,
mais juste d'avoir l'option,
pour que tu ne sois pas obligé
de les soutenir,
car, férédiquement,
c'est nécessaire pour le spec,
et si tu ne fais pas ça, c'est pas complément possible.
Ce qui fait le bon sens, c'est juste infeligible.
Mais oui, je dirais,
la plus dynamique,
ça fait le bon sens pour des utilisateurs,
mais ça devrait être extrêmement grave,
on est d'accord,
c'est un bon sens pour la performance de la sécurité,
tout ça,
c'est bien de faire un moment,
un moment, un linter,
qui est juste,
le JavaScript est sain,
généralement,
je pense que certains choses existent,
je pense que le team de JavaScript,
un type de monomorphisation,
un type de check,
si cet object est toujours de la même forme,
tu peux avoir 10 fois plus vite,
un log de property, un SynthV8,
c'est vraiment cool,
tout ça,
même si chaque JOS 100 fonctionne différemment,
ça ne devrait pas arriver,
mais comme un rêve,
plus de tout, c'est tout en tout,
ce genre de choses qui travaillent entre les engines,
c'est généralement utile.
Tu as mentionné
que
il y a des cas de use d'exploitation
qui est intéressant
d'explorer,
est-ce que le travail que tu fais
ici est quelque chose
que nous le verrons plus
dans...
est-ce que tu veux prendre le projet
ou est-ce que c'est pour les cases de run time
d'exploitation ?
Et puis, plus en plus,
quand tu penses à ce genre de constrainage
de JavaScript, d'un bit embed,
de performance constrainé,
comment tu vois ce space évoluer ?
Est-ce que c'est plus en WAZ ?
Est-ce que c'est plus en temps de compilations ?
Est-ce que tu vas avoir un v8 plus petit ?
Qu'est-ce que tu pense que le futur est capable de faire ?
Je pense que c'est...
Je peux dire que c'est impossible de le predicter,
mais
je pense que c'est surtout des choses civilises,
par rapport à plusieurs entreprises qui sont très intéressées,
donc je pense que c'est certain que c'est l'un des plus grands
des avenues,
surtout parce que,
beaucoup de temps, dans les choses civilises,
les choses lambda,
tu n'es pas déjà utilisées comme JS
pour commencer,
c'est déjà des choses plus petites, plus rapides,
généralement,
mais c'est pas du tout,
parce que Amazon déjà
travaille sur le même,
JS Engine & Run Time,
mais c'est juste un 4JS,
c'est juste interprété,
il n'y a pas de temps pour les choses,
ça fait sens, parce que c'est
question marquement de millions d'investments,
c'est un truc qui marche bien,
je pense que le futur,
je vois beaucoup de paths,
et j'ai pas le temps de voir les wins,
je vois tout le monde en train de se faire,
et de se faire heureux,
de voir comment les choses sont,
de voir la version VA,
adaptant,
à moins la première partie,
je vais être d'accord, mais
JS Engine Innovation a stagné,
je pense que le plus nouveau,
on a vu la version VA,
il n'y a pas de plus grand,
des choses grandes,
la version VA,
il y a des optimisations,
il n'y a pas de 2x performance,
et ça a été un bon moment,
en plus de quelques années,
parce que c'est une innovation massive,
je pense que ça va rester de cette façon,
la version VA c'est un monolithe,
ça sera probablement la même que la version VA,
mais les années de temps sont justes,
mais je pense que les gens
vont être en train de se faire,
la version VA c'est bien,
et ça marche,
mais la version VA c'est la même,
je ne pense pas que ça va rester
en même sens,
c'est probablement plus rapide que les années,
mais je pense que la version VA
est de la manière de
stabiliser et de la production
de la version VA,
juste de la version de radicalisation
en train de se faire, mais peut-être que je suis pas
en train de replacer la version VA,
ou même de la version Quick JS,
je veux être un nouveau
option, si ça marche,
mais ça marche bien,
il y a un peu de casques en total,
mais en 10% ça marche
1000 fois,
mais je ne sais pas si tout le temps
que l'utilisation est possible,
ou la surface de la file,
ou la performance de la mémoire,
tout ça en entre.
Ok, ça nous rapporte les questions,
merci pour les questions,
vous êtes embarké sur un grand tour,
un tour très ambitieux,
et ça semble que vous avez fait un bon progrès,
et c'est très excitant,
merci pour les discussions.
Merci, c'est un projet vraiment excitant,
et j'ai hâte de voir où vous le portez.
Nous le verrons.
Episode suivant:
Les infos glanées
devtools.fm:DeveloperTools,OpenSource,SoftwareDevelopment
A podcast about developer tools and the people who make them. Join us as we embark on a journey to explore modern developer tooling and interview the people who make it possible. We love talking to the creators front-end frameworks (React, Solid, Svelte, Vue, Angular, etc), JavaScript and TypeScript runtimes (Node, Deno, Bun), Languages (Unison, Elixor, Rust, Zig), web tech (WASM, Web Containers, WebGPU, WebGL), database providers (Turso, Planetscale, Supabase, EdgeDB), and platforms (SST, AWS, Vercel, Netlify, Fly.io).
Tags