Charles Lowell - Frontside, Effection, and Structured Concurrency

Durée: 53m14s

Date de sortie: 10/03/2025

This week we talk to Charles Lowell, a developer and consultant who has created a library called Effection. Effection is a library that allows you to write structured concurrency code in JavaScript. What is structured concurrency and how could it be useful for you? Find out in this episode!


Become a paid subscriber our patreon, spotify, or apple podcasts for the ad-free episode.

Je pense que dans 10 ans, ce sera l'expectation de la runtime,
c'est que ce sera une concurrence structurelle.
Je pense que si il y a une nouvelle langue qui va arriver
après la prochaine couple de années,
ce sera une concurrence structurelle.
Bonjour, bienvenue à DevTools FM,
ce sont des tutoriels de devout.
Je suis Andrew et je suis ma co-host Justin.
Bonjour tout le monde, je suis vraiment, vraiment excité pour cet épisode.
Nous avons Charles Lowell sur Charles,
vous avez créé une consultancy,
qui s'appelle Frontside.
Je veux parler de ça,
mais vous êtes travaillant sur ce library d'open source,
qui s'appelle Effection,
qui est incroyablement incroyable pour moi.
Je suis excité de parler de tout ça,
mais avant de nous en parler,
vous voulez nous parler des listeners un peu plus sur vous-même ?
Je m'appelle Charles Lowell,
et je suis en train de faire un développement
pour une très longue période.
Je pense que c'est difficile de penser,
car je ne me suis pas vraiment conçu de moi-même,
mais je suis,
en espérant,
littéralement, un grand-mère.
Je dirais que je vais en faire une code pour 30 ans.
Je suis le founder de Frontside,
mais je vais toujours en faire une code,
et travailler avec nos clients tous les jours.
C'est drôle,
donc nous allons en faire une petite.
C'est comme une compagnie de consultancy
qui fait beaucoup d'open source.
Vous pouvez nous dire comment vous avez appris
et les types d'open source projets que vous vous concentrez ?
Oui,
donc nous avons fait un open source
dans l'histoire de Frontside,
mais Frontside a commencé
en 2005,
donc ce sera notre 20e année
en operation.
Et jusqu'à ce point,
dans ma carrière,
j'ai travaillé presque exclusivement
sur le bac-end,
et j'ai commencé à faire un peu de web-apps,
et des appels de rails,
et l'une des choses que j'ai réalisé
sont beaucoup de patterns architecturales
que j'avais utilisées
sur le bac-end,
et qui étaient directement applicables
à l'end de Frontside,
et qui a été,
à ce moment,
un peu comme un peu d'un wild west,
surtout sur le web.
Vous avez
ce très nouveau truc qui s'appelle
le dynamic HTML,
et le JavaScript,
et on va le contrôler,
et on va y aller,
et on va y aller.
Et donc,
la Frontside
était
vraiment
le mot qui signifie
les patterns architecturales
sur le bac-end
et les appliquer à la Frontside.
Et donc, ça était vraiment
l'inception de la compagnie.
Et depuis que nous avons réellement
joué, je dirais,
un peu de temps,
sur le bac-end,
et sur le Frontside,
parce que c'est juste
le moyen que les choses se passent.
Il se trouve que
les patterns architecturales
qui sont développées
dans les deux contextes
sont presque toujours
réellement applicables
dans l'autre.
Et donc,
les choses que nous avons appris
sur le Frontside,
nous avons
endommé le bac-end
et le vice versa.
Et donc, nous avons
été en train de
faire 20 ans
et nous avons travaillé
sur un peu de différents
sources d'open source,
ce qui était assez dur.
Donc, à l'époque,
je pense que
nous étions
en commun de Ruby,
donc si vous vous
vous trouvez
que nous avons
beaucoup de gems,
probablement le plus populaire
qui est le
qui intervient avec Stripe,
nous avons aussi
fait,
en travaillant sur la Frontside,
l'implémentation original
de
l'intégration JavaScript
de la Gemme,
donc nous avons en fait
pris le V8
et l'ont embedé
dans Ruby
pour que,
dans l'application de la Rails,
vous pourrez
compiler les assets
et évaluer la code JavaScript
sans tout le temps
de laisser Ruby.
Et donc, c'est un peu
maintenant,
c'est un projet
plus indépendant,
mais nous sommes les
qui ont commencé ça.
Nous aussi
sommes très intérêts
dans
la
intervien continuous
et de la delivery
qui a toujours été
très important
à nous,
surtout depuis le début,
mais en étant
primairement
la Frontside,
la consultation
à ce moment,
nous avons en fait
créé l'artwork
pour le projet de Jenkins.
Si vous avez
entendu ça.
Nous sommes
très grands
dans la communauté de Jenkins
et nous
avons en fait
fait la même chose.
Il y a beaucoup d'autres
rondeurs
et de les mettre
dans d'autres rondeurs.
Nous avons pris
Ruby,
J. Ruby
et nous avons
envoyé vous
mettre dans les plugins
de Jenkins
dans
dans Ruby.
Et si il y a un
genre de
thème
pour
la
la
la compagnie,
est que nous
nous sommes
très fortes
que quand
le développement
est fait
bien,
il me semble
comme un vol.
Il n'y a pas de
bonnes ressources.
Vous êtes
commandant
des bêtes et de la bête
de la haute haute
et ils se font
tout ce que vous voulez
à l'heure
).
l'estre
etc.
Mais c'est comme,
me dévier et
juste pour improving le sens de votre expérience de développeur
pour que tu puisses vite et avoir plus de cycles de réagirisation.
C'est-à-dire,
est-ce que c'est quelque chose que j'ai formé en temps ?
Où fais-tu ça en début ?
Comment est-ce que ça a été?
Je pense que c'est quelque chose que j'ai formé en temps.
En original, nous commençons, nous sommes très souvent en agence.
Nous étions construit des applications web,
en première phase, en Rails, et en JavaScript.
Nous avons même fait des Java et C++.
Pour les applications de desktop, nous étions très souvent au modèle de
nous dire ce que votre problème est,
et nous allons construire un produit qui réserve ce problème.
Mais je pense que nous avons commencé à faire des consultations d'ex-desks
environ 7 ou 8 ans,
parce que,
en temps et en temps d'une fois,
quand nous sommes en,
surtout, très grandes entreprises
qui ont des équipes de très grande développement,
nous verrons que
beaucoup de moules ont été perdues
sur la friction.
On a des équipes qui ont été perdues sur la friction.
Donc, vous avez ces équipes qui tentent de
essentiellement de bouger un produit sur la route.
Et, en plus de la moules,
en plus de la grise sur les barbaires,
vous allez juste être en train de
expérimenter un effort massive,
pour juste aller quelques minutes.
Et donc, ce problème de l'underline
n'était pas vraiment un outil de miss.
Ce n'était pas vraiment une application de miss.
Ce n'était pas vraiment une structure organisational,
comme un équipe agile,
ou quelque chose comme ça.
Ce n'était vraiment pas vraiment
que ce soit la friction que vous avez en train de faire.
Il y a beaucoup d'énergie en train de perdre,
dans des tasks non significatifs.
On va faire attention à l'expérience de l'application de l'application,
et ensuite, vous pouvez réclamer
ce que vous avez en train de faire,
par avoir des développeurs
qui peuvent travailler sans la friction,
pour que ce soit accompli leur task,
et que ça soit facile,
ça se sent bien.
Et ça, oui, ça se sent bien un produit.
Oui, donc, par la suite de votre site,
il me semble que ce que ça a produit
est dans le backstage.
Vous pouvez nous donner un petit overview
de ce que le backstage est
et comment ça accélérateur cet appartement ?
Oui, donc le backstage est un porteur de développeur.
Il était originalement...
Il était originalement développé à Spotify.
Et c'est juste un moyen
pour des très grands équipes
pour partager l'information,
pour partager les processus,
pour ne pas réinventer le boulot
en temps et temps et temps et temps,
donc, avec la très...
avec la très minimum installation
du produit,
ça va accélérer votre organisation GitHub.
Et juste, Mery,
faites-vous que chaque personne
dans l'organisation
comprenne
quel est le property intellectuel
qui existe à l'organisation.
Et puis,
il invertit le contrôle
pour que
si vous avez un repo GitHub,
vous avez à vérifier un file de YAML
et ça va raconter le backstage.
C'est mon projet,
c'est comment vous l'intégrer,
et vous pouvez
réglager votre documentation
pour avoir un site de documentation
qui est sur le site,
et ainsi.
Donc,
comme vous avez mentionné
la rencontre
dans le repo GitHub,
c'est un peu...
Il faut essayer de déterminer
une chose très similaire
pour les gens et les organisations
pour que,
si vous avez besoin d'un truc,
vous êtes moins probable
d'inventer sur votre propre.
Ou, si vous avez besoin
de documentation,
vous n'avez pas besoin de DM
quelqu'un sur Slack,
et vous dites,
« Hey, comment vous faites-vous ça ? »
Vous pouvez juste regarder
et c'est là, publiément.
Donc, tout ça
est partie de
retirer cette friction.
Donc,
c'est...
Je pense que c'est un important piece
dans le toolkit,
surtout pour
très, très, très large.
Je veux dire,
nous parlons de la développement de la équipe
de plus de 500 personnes.
Vous commencez à expérir
beaucoup de
losses
de gens
qui ne connaissent pas.
Il y a un component de la chelonne
qu'ils peuvent réutiliser
à l'intérieur de l'organisation.
Oui, absolument.
Je suis surpris que le backstage
a été
brouillé
pas surprise,
comme,
« Oh, c'est pas bon ».
Mais je suis juste surpris.
C'est un truc cool.
Donc, quand je travaillais en arts,
je pense que c'est quand ça a été mis.
Et on a eu
un problème similaire,
c'est que,
si vous avez un grand enough organisation
et que vous avez des équipes
qui sont en train de se séparer,
ils ont besoin de apprendre
toutes les choses
qu'ils ont besoin de se séparer.
C'est cool que Spotify
aille être un product de source
où ils ont besoin
de se séparer.
Il y a un feature de cliquet
qui va vous montrer le catalogue
de les services
que vous pouvez opérer
à l'intérieur de l'organisation.
Oui, je ne sais pas.
C'est vraiment cool.
Oui, oui.
C'est aussi que vous êtes
offertant
l'aide
de l'intégrer
cet projet d'open source
et
d'aider
à accélérer
l'expérience de la développement.
Et
donc,
nous voulons vraiment parler
aujourd'hui
d'un des projets d'open source
mais
avant de nous changer
à ce sujet,
je voulais juste
poser une question
qui est
comment vous balancez
l'heure
entre payer
le travail de consultat
et l'open source?
C'est une très, très
difficulte
ou,
une très bonne question.
Je ne sais pas
que c'est un problème

associé à cette question
et
je peux vous dire ce que nous fais.
Je ne sais pas
si c'est optimal.
Donc,
avant de vous dire,
c'est
et c'est-à-dire
quand j'étais jeune
et pas beaucoup plus
plus,
c'est juste
que vous vous mettez
une extra heure
après
le travail.
Maintenant,
je ne fais pas
ça trop
beaucoup.

si,
si,
quand c'est vraiment
travaillé,
l'opensource
travail
est très
beaucoup
sur
le long
end
de
la
cycle de développement.
Et ce que je veux dire
c'est
que nous allons
aller à un client,
nous allons faire du travail,
nous allons,
encore,
faire de
de
de

trois ou quatre fois
et dire
ah,
ok,
je vois un pattern ici.
Et
ça peut être
vous savez,
ça peut être
difficile de résister
quand vous
quand vous
travaillent avec un client
pour dire
comme je vais vous construire un framework
parce que vraiment ce qu'ils veulent vous faire
c'est qu'ils veulent vous résister
à un problème
qu'ils ont.
Mais,
quand vous
avez
fait
le même problème
quatre ou cinq fois,
alors
ça peut être très
facile
pour
en between
des projets
dire
dans un
trois ou quatre
semaines
de temps
de prototype
ce n'est pas
pas
assez un framework
à ce point
mais ça signifie que vous
allez pouvoir
utiliser
sur
le prochain projet.

même si
vous ne vous
vous introduisent pas
un framework
ce que vous faites
c'est que vous
vous le solvez
que vous savez
qu'ils vont avoir
déjà
beaucoup plus
rapidement.
Et puis
vous
vous le
et puis
vous avez
une approche
de concept
mais vous ne vous
vous le promotez pas
comme un projet
d'open source
et
vous
vous le evolvez
et vous le evolvez
à un moment
vous vous dites
OK
ce
vous avez
peut-être
cinq
plates comme ce
qui se tournent
et vous réalisent
OK
ce
ceci est
spécial
il y a quelque chose
qui
a besoin
d'une grande option
que les gens
peuvent vraiment
bénéficier
donc
je dirais
que
en réponse
à la question
la seule solution
que j'ai vraiment
trouvé
c'est que
vous devez être
vraiment patient
et vous devez
être
très
pas
rassuré
pour essayer
de faire
la

solution
vous devez vraiment
laisser
l'améliorer
en temps
et parfois
ça peut
vous
ça peut prendre
une très longue
temps
je dirais
dans le cas
de l'affection
c'est
vous savez
presque 7 ans
et
et
et plusieurs versions
mais je me sens
que nous
avons vraiment
l'aider
dans
maintenant
sur quelque
chose
qui est
très
bénéficiant
cool
c'est un grand segway
pour en parler
de l'affection
mais avant
nous faisons
ça
je pense que nous devons
mettre le stage
un peu
et parler
de la
structure
de la concurrence
et ce que ça
est
et pourquoi
je dois
le faire
donc
convainc-moi
OK
convainc-vous
donc
donc
avant
je vais juste
commencer
à partir de la
top
c'est
ce que je vous recommande
pour vous
et pour
tous les listeners
et vraiment
juste
quelqu'un
qui fait
le programme
ou
est
pour aller
et
lire
le blog
post
qui
a kind
de
commencé
au moins
je
ne pourrais pas
être
le
qui
coigne
la termine
structure
et la concurrence
mais je dirais
c'est
le
qui
a
fait
le
prominence
et
c'est
vous savez
pour moi
c'est
il y a
je peux
compte
sur
une
main
le nombre
de blog
post
qui
a
changé
ma vie
et ce
c'est
l'une de
et je
je ne souhaite
que je ne savais
que le nom de
l'autor
de la
Pieds
en
Libération
Tréot
qui
est
une
concurrence

et
et
ce qui
s'agissait
dans l'article
qui est
une grande
mélange
de
être
académique
et
très
approche
donc c'est
très
très
très
très
très
très

très
très
très


accessible
argument
un

un

parle
de
ce
ce
ce
fait
l'obstraction
possible
et
il parle
de
l'original
conception
de
l'organisation structure
qui
nous
apprécient
l'organisation structure
maintenant
parce que c'est
comme
un
p'tit
c'est l'eau
qu'on
tombe
c'est comme
l'air
qu'on
tombe
on ne
pense
pas
les
garanties
que
les
statements
sont
que
les
lobes
sont
que
les
fonctions
sont
mais
il
encourage
est




tighten

60
et
l'an

sne
70
on
maan

il
ce qui nous permet de faire des abstractures,
parce que quand je dis une fonction,
par exemple,
je sais que le seul endroit que je peux retourner
est à ce site de fonction.
Et donc,
je peux construire des abstractures sur cette fonction,
parce que avant l'existence de la programmation structurelle,
si vous étiez à la sœur,
cette sœur pourrait aller à quelque part en membre,
et vous commencez à exécuter des instructions et vous ne pourrez jamais retourner.
Et donc,
vous pouvez un peu de flow de contrôle.
Et donc,
ce concept de la programmation structurelle
à la sœur,
est que vous voulez
ou est-ce que vous venez de la vie
de procédures concurrentes à une scope lexicale ?
Et ce que ça veut dire, c'est que ce que vous voyez est ce que vous avez.
Donc, si je suis en train de regarder un piece de mon programme,
et je regarde une scope lexicale,
je sais que tout ce que je crée en là
sera déçue après que je exécuterai ce scope lexicale.
Et ce est quelque chose qui a été appliqué, pas juste de flow de contrôle,
mais qui est très familier à nous en termes de membre.
Donc, nous n'avons pas de...
Ce n'est pas comme si nous étions en train de faire un JavaScript,
ou si nous étions en train de faire un Java, ou si nous étions en train de faire un Go,
ou si nous étions en train de faire un Modernisation de la programmation.
Quand vous allociez un variable,
vous n'avez pas de pensée,
si vous allociez un variable à l'intérieur d'une fonction,
vous n'avez pas de déalicité,
parce que vous savez que, si vous utilisez un système de collection de garbage,
vous verrez que ce n'est pas partie du set de route,
et les collectors de garbage vont réclamer,
si vous faites quelque chose comme Rust, vous allez dire,
OK, ceci est...
Il n'y a pas d'adresse pour cet objet.
Nous allons détruire.
C'est le même chose pour les processus concurrents.
Donc, chaque processus concurrent,
et un système de collection de garbage,
sera boundé à un scope lexical.
Donc, quand je visse cet scope lexical,
ce n'est pas possible de survivre.
Je ne serai pas capable de visse lexical
jusqu'à tous les processus qui sont terminés.
Et pourquoi ça est important,
c'est que vous voulez deux choses,
le raison superficielle,
c'est que vous ne pouvez pas faire des ressources.
Parce que chaque ressource a un temps de vie très limité.
Et puis je dirais que le plus grand est que vous pouvez construire les abstractures
autour de ça.
Parce que chaque single opération est atomique.
Je pense que c'est important de parler de la
JavaScript native,
ou les places où vous vous faites ce problème native.
Donc, les promesses ne sont pas
vraiment de la grande concept de l'ASync.
Et c'est bien de parler un peu plus de ça.
Et puis vous parlez de la somme de ressources.
Donc, il y a un nouveau aspect pour le...
Qu'est-ce que c'est ?
Le ressource explicitaire.
Oui, donc on a des nouvelles tools
qui ont aidé à faire ça.
Si vous voulez déallocer quelque chose,
vous voulez le déallocer sur le scope.
Mais, historiquement, on n'a pas eu ça.
C'est vraiment facile.
Vous ne vous arrêtez pas de la connecteur database
quand vous pensiez que vous devriez faire ça.
Et puis, quelque chose se passe plus tard.
Donc,
quel est le path que vous voulez parler ?
Si vous voulez parler de la ressource de la clean air,
ou peut-être des promesses,
parce que c'est quelque chose de général,
je pense que les deux, je pense,
vont vraiment se faire un peu plus vite.
OK.
Donc, on peut parler de la
ressource de la clean air.
Donc,
en effet, et je dirais en
structuriel, les systèmes concurrents en général,
vous n'avez pas juste un
task, ou un promesse,
ou un code concurrent,
mais tout ce qui a été state
est associé à ce contexte lelexical.
Donc, c'est comme un variable
qui est allocé sur le stack.
Et quand le stack est pop,
vous vous assurez que cette ressource
sera nettoyée.
Et je vais vous donner pourquoi
la management de ressource explicite et de la synchronisation
sont vraiment pas adéquates
à ce task,
ce qui est pourquoi les autres
langues runtimes ne sont pas adoptées.
Vous verrez que c'est unique à JavaScript
et que personne n'est en train de le faire.
Donc,
l'allocation de la ressource est vraiment
juste à l'allocer un variable sur le stack.
Mais c'est plus que ça,
parce que vous devez être
capable de faire des choses comme
erreurs
dans un façon uniforme.
Donc, si j'ai
une scope
qui s'occupe d'un erreur,
je dois faire sure que l'erreur est prête.
C'est un problème en Async08.
Si vous vous voyez,
vous pouvez voir beaucoup de gens,
si je fais un race promise,
et je suis en train de faire 20 promesses contre l'un de l'autre,
et un de eux ne va pas,
qu'est-ce que je fais avec le 19?
Et l'idée est qu'ils vont juste continuer à râner.
Vous avez baisse de les procédures.
C'est une chose que vous pouvez regarder
quand vous voyez une race promise,
vous êtes presque toujours en train de regarder un leak de membre.
Et la chose qui est la plus insidieuse de ça,
c'est que ce leak de membre ne peut pas
s'appliquer jusqu'à la scale.
Parce que
ce n'est pas le cas de l'outre-de-route,
dans le sens que, en fait,
probablement, peut-être,
ces promesses vont résolver.
Peut-être qu'elles résolvent après 10 secondes,
peut-être qu'elles résolvent après 10 secondes.
Ils sont toujours en train de se faire râner dans l'éther.
Et si vous êtes en développement,
et vous vous rendez en train de prendre un petit load de requêtes,
ou que votre stream de réveil est un truc,
ce n'est pas un problème,
vous ne verrez pas,
ce n'est pas un impact large
dans votre membre relative
au total impact du système.
Vous avez le même code,
et vous vous mettez en train de mettre un load très grave,
et votre stream de réveil est plus de un hôpital.
Puis, tout de suite,
chaque événement qui est le plus petit
de votre emploi est encore très très très grave.
Et donc,
l'une des choses que je pense que nous combattons les plus,
quand nous essayons d'évangéliser cet approche,
c'est de se faire passer l'idée
de ne pas toujours voir ces problèmes
jusqu'à ce que c'est trop tard à les fixer,
et que vous êtes en production,
et que vous êtes en train de prendre un grand load,
et que vous êtes comme, oh mon Dieu,
je suis en train de les mettre dans le couloir,
tout à l'heure.
Le même chose se passe avec un programme dot all,
excepté dans l'arrêt.
Donc, si je suis en train de mettre 20 promesses,
avec le programme dot all et un de ces promesses,
je vais en mettre l'arrêt immédiatement,
et le deuxième, le deuxième 19 est lié.
Donc, le racisme, vous avez le positif,
le positif, le résol, vous avez lié le 19.
Tout le monde a faim, vous avez lié le 20.
Mais je pense que le racisme est aussi positif et négatif.
Donc, c'est l'une des raisons
que les primitives et la ligue de la scie ne sont pas adéquates.
Donc,
où est-ce que l'affection que vous avez faim pour le déjeuner chaque année?
Donc, si l'une des opérations,
les opérations concurrentes,
ne perdent pas,
il va procurer l'application.
L'autre raison,
et c'est un grand, grand, grand raison,
c'est qu'il n'y a pas de manière
pour résumer,
ou pour récréer le contrôle d'une fonction de la scie,
quand il est en train de s'éteindre un promesse.
Et ce qui est vraiment
le plus grand et le plus délicat de la scie,
c'est que si j'ai une fonction de la scie,
et je dis que je vais aller à nouveau,
et que cette promesse ne résolue pas,
je vais avoir lié la fonction de la scie.
Donc, vous n'avez pas de contrôle.
Donc, quand vous s'éteignez,
en tant que promesse,
ce qui s'est passé,
peut-être que ça pourrait être 5 ans,
que ça a pris le promesse à résolver,
cette fonction de la scie
qui est en train de s'éteindre,
ne peut pas résolver,
ne peut pas se résolver
pendant 5 ans.
Et c'est un cas extreme,
mais vous avez encore le même cas,
que si vous...
Si vous...
Pardon,
c'est très extreme,
mais vous avez encore le même cas,
que si vous êtes en train de s'éteindre un peu de promesses,
et vous avez pris un long temps,
il n'y a pas de manière à vous remettre.
Et donc, tout ce que vous avez fait
dans cette chaine de causation est aussi lié.
Donc, je peux avoir un promesse,
je peux avoir un call stack,
c'est d'incliner un module de NPM,
c'est d'incliner un module de NPM,
c'est d'incliner un module de NPM,
et à l'intérieur,
il y a un promesse qui ne résolue pas,
et ça va causer tout ce que vous avez fait
au call stack,
pour le lier.
Donc, l'un des requérements
de la concurrence structurelle
est que la vie,
la vie d'une opération de l'asynchrone
doit être contrôlée par la scope de l'automose,
pas par la scope d'intermossage.
Et c'est le problème avec l'asynchro-8,
c'est que la vie d'une opération de l'asynchro-8
est déterminée par la vie d'une opération de l'intermossage.
Alors que,
dans l'affection de l'opération de l'automose,
dans les systèmes de concurrence structurelle,
l'opération d'intermossage de l'opération de l'automose
a le contrôle de dire que
nous sommes prêts.
Je ne sais pas si vous ne le avez pas besoin
et que vous vous en faites tout
en bas en bas.
Et donc, ça ne se démarre pas
ce qui se passe à l'intermossage.
C'est un problème insidieux aussi,
parce que vous ne pouvez pas voir ça.
Le code, vous regardez et vous dites
que ça ressemble à ce que je fais
avec javascript,
je suis en train de prendre des erreurs
et ensuite vous avez ces problèmes
qui sont en train de se battre et de la faire.
Et ça se multiplie
si il y a des fonctions multiples
entre vous et ce promise.
C'est vrai.
C'est vraiment mal.
Et donc, je pense que part de les problèmes
avec le propose d'explicit ressource de management,
c'est que ça ne s'adresse pas à ce mécanique
qui est que,
quand vous vous attendez un promesse,
si ça ne se résolve, vous êtes déçus.
Et donc, ça va être en train de se battre
sur le point de la tâche de la tâche.
Comme c'est un cause en train de se battre,
ou pardon, c'est un mécanisme en train de se battre,
c'est un problème qui est subjet à tout ça.
Je pense aussi que ce sont des problèmes
et que c'est optionnel.
Donc, pas seulement vous pouvez être déçus,
parce que
pas seulement vous pouvez être déçus,
parce qu'il y a un promesse qui va se battre.
Mais vous pouvez aussi être déçus,
parce que vous n'oubliez pas
de faire quelque chose avec l'utilisation.
Et donc, ce que je voudrais
foresee est que
nous allons avoir une nouvelle règle de l'ESLIT
qui est de ne pas utiliser constat,
ne pas utiliser l'ESLIT,
utiliser pour tout.
C'est un peu méchant,
mais c'est l'un des moyens de l'enforcer
le sain, c'est l'un des moyens de l'esprit.
Et donc, je pense que l'optionnel est un peu étrange
et que le syntaxe est extrêmement complexe.
Donc, je ne m'en souviens pas,
mais si vous regardez sur la table,
vous avez 4 utilisant un weight,
4 utilisant un constat,
c'est presque impossible de comprendre.
Et je pense que ça aussi
peut être un problème de l'adjacent,
c'est que l'esprit est
un peu étrange,
l'écosystème JavaScript
et l'application de l'application
sont une pièce de synchronisation
falsée et de synchronisation.
Donc, une des choses
de l'affection est que
si l'opération est synchroniste,
elle résolve synchroniquement.
La seule fois que c'est synchroniste,
c'est si c'est en attendant quelque chose.
Et donc, ce qui veut dire
que c'est que, en tant que synchroniste,
vous pouvez utiliser l'affection
pour un handler d'évent.
Donc, une des raisons de ne pas utiliser un handler d'évent
pour un handler d'évent
est que la cancellation et la protection des défauts
sont une opération synchroniste.
Donc, même si je dirais que l'opération d'évent
de la bouton, comme les clics de la handling,
est très élégantement modélée
comme un éterne d'éthique,
vous ne pouvez pas le faire.
Parce que ça va résolver
la prochaine bout de ronde
et que l'évent est terminée.
Vous ne pouvez pas le faire.
Donc, comme résultat,
nous avons sorti de faire des ronds
et nous sommes en train de mettre en place
des callbacks.
Si vous voulez,
si vous voulez réagir des éventes,
bien.
Et puis, il y a un peu de différents problèmes,
aussi, à l'évent,
comme le caching,
ou si vous voulez vérifier quelque chose synchroniste
et faire surement que c'est en cachement,
mais ensuite, vous devez le faire synchroniste,
et puis, en fait,
en étant capable de le faire
avec des fonctions de synchroniste et de combination
des fonctions de synchroniste,
c'est un problème extrêmement vaché.
Et si vous googlez, vous verrez
beaucoup de gens
qui sont très frustrés.
Et puis,
finalement,
cela veut dire que chaque API
doit être bifurcée
dans un de nos états.
Donc, nous avons un symbole iterateur,
un symbole iterateur,
un symbole disposable,
un symbole disposable.
Et donc, la autre raison que je n'aime pas,
comme l'explicit ressource de management,
c'est que ça se débrouille
sur cette idée
qu'il y a deux
mondes de synchronisation et de synchronisation

et que vous ne pouvez pas communiquer entre eux.
Donc, je veux dire, c'est mieux
que, je dirais,
si vous allez en campagne dans les voies
et vous venez de survivre,
avoir une tarp est mieux que ne pas avoir une tarp,
mais je voudrais plutôt avoir une cabine
avec un endroit de feu,
et un fil de feu.
Bien sûr, sur cette note,
donc, la tarp est la cabine avec le endroit de feu
et le fil de feu.
On va parler un peu de comment
la tarp réserve ce problème.
Et je pense que, si vous voulez,
on peut parler de
si il y a une motivation d'internation
de pourquoi vous l'avez construite.
Bien sûr, je peux parler de ceux qui sont là.
Donc, la raison d'internation
que nous avons construite
est que nous travaillions sur les end-deux web.
Il y avait deux projets,
nous travaillions sur les end-deux web
et nous étions en train de utiliser Ember,
J.S.
Et donc, Ember a eu
une structure concurrence de l'Université.
Et la façon, les patterns
que vous pouvez faire, des requêtes âgées,
qu'on a automatiquement cancelées,
que vous soyez en train de s'arrêter,
que vous ayez buen magasin,







Autocomplete,
으-sorry.
über attendsrying.
Il contraint l'auteおっ.
ou tu voulais managé,
l'autre chose que nous avons utilisé était managé
10 uploads concurrents.
Mais si tu as changé d'une autre upload, tu voulais le cuire.
Mais si tu as touché les autres fonctionnaires
que je m'ai mentionnés, si tu exécutes les pages
ou tu exécutes les routes, tu veux canceler tous les articles.
Les patterns pour managé la vie du cycle
et les articles de concurrents opérations
étaient extrêmement élevé.
Je n'ai jamais vraiment rencontré quelque chose comme ça.
L'amount de pensée, je n'avais pas besoin de
de faire des choses en s'entraînant,
d'understand quand les choses ont besoin de se faire
et je pouvais juste dire que si c'est
le cas de cette scope lelexique,
c'est la vie du task.
C'était mon premier rencontre avec les concurrents structurels.
Je me suis dit que c'était vraiment quelque chose.
Et après, le blog post est arrivé,
je me suis réveillé pour le réveiller,
mais on a travaillé sur un framework custom test.
Il était un service d'orchestration
qui m'a managé 5 ou 6 processus.
Il m'a managé un browser,
un playwright.
Il m'a managé un set de simulators
qui m'ont managé.
Il y avait un build bundler
qui m'a managé.
C'était le pattern de la front-end.
On a réalisé que nous pouvons
utiliser la concurrence structurelle
pour avoir un nightmare.
Si on essaie de le manager,
on va le faire.
C'était l'envers de l'affection.
C'était une conception de la front-end
que nous avons utilisée en Ember.
Nous avons développé
l'idée de la concurrence structurelle
pour avoir plus de traction,
surtout au sein de la communauté JavaScript.
On a aussi des plateformes mobiles
qui sont en train de se faire
en basse et en Java,
qui sont les langues de développement
pour Android et iOS.
On a aussi des plateformes mobiles
qui sont en train de se faire
en code de l'événement.
Pour eux, c'était très bénéficial.
Javascript est un victime
de son propre succès.
On ne veut pas trop rassurer
que j'ai un sens de ne pas avoir un code de l'événement
avant Javascript.
Il y a un réel pouvoir
d'avoir des routines de code suspendibles.
On a presque le temps.
Mais l'événement est formelé en 2013, 2014
et la concurrence structurelle
est formelée en 2018.
Je pense que nous avons
parlé beaucoup de l'affection.
Mais c'est quoi que ça a fait
en pratique?
J'ai regardé des libraires similaires
dans le space et ils sont très difficiles
à apprendre.
L'affection est un point d'affection
pour lesquels vous avez besoin
d'affection.
La première chose que nous avons besoin
de apprendre est la concurrence structurelle
et les effets structurels.
En fait, les ressources.
Tout d'autre doit être Javascript.
Les gens ont spent beaucoup de temps
en apprendre Javascript.
Ils ont spent beaucoup de temps en apprendre Javascript APIs.
Ils ont spent beaucoup de temps en interactuant avec le Javascript écosystème.
Nous avons besoin de
99%
de ce qu'on a besoin
d'affection.
Si vous savez comment faire quelque chose
dans Javascript, vous savez comment faire
l'affection.
Si vous regardez l'affection,
il est immédiatement
recognisable.
Il faut comprendre
ce que vous avez besoin de l'affection.
Avec des substitutions,
vous pouvez transporter
des quantités de fanilla,
et d'affection.
C'est le grand but.
Je pense que
Andrew a fait un petit tour.
Il a voulu
le plus grand library
dans le space.
Il a parlé
d'affection.
Il a fait beaucoup de choses.
Il a essayé de faire des choses
de la construction,
et je me sens
comme si c'était
une élevé et un type.
Il a vraiment
fait un paradigm.
C'est un shift.
C'est une chose que je suis pas
heureux de faire.
Il y a des choses
qui font l'affection.
Je me suis demandé
si c'est un peu

Il y a des choses
qui font l'affection.
Il y a des opinions
d'affection.
Vous avez des erreurs.
Vous avez des garanties de construction.
Vous avez des questions
d'affection.
Vous avez des questions
d'affection.
Vous avez des différences
d'affection
sur les prémotives?
Je ne suis pas un expert
sur comment l'affection
s'affecte.
Je vais dire
que le moyen que vous vous
l'affectez dans l'affection est le même
que le moyen que vous l'affectez en JavaScript.
C'est le mot de la façon dont ça fonctionne.
Vous vous faites un bloc de

et vous pouvez
l'affection.
Si vous voulez que vous le rétablissiez,
vous faites un bloc d'affection.
C'est le cas de la façon Where it out,





Je pense que vous devez être mindre de la type de code que vous avez écrit.
Si vous vous faites des codes framework, c'est très approprié de traiter les acceptations comme des valeurs.
Parce que dans le code framework, vous avez explicitement managé le contrôle de l'autre code.
Et donc, les handles d'exception, ou les exceptions qui ont décliné votre stack,
sont vraiment onores, parce que vous avez explicitement connu avec le contrôle de l'autre code, et vous avez connu avec ces erreurs.
Donc, si vous regardez dans l'affection, vous verrez que nous nous faisons toujours des erreurs comme objectif résultat.
Et nous faisons un peu de cheques comme, c'est ok, c'est possible, mais nous sommes toujours en train de traiter les erreurs comme valeurs de retour.
Mais si vous êtes dans l'usage de l'usage, et que 99% de l'heure, il n'y a rien à faire avec l'exception,
et pourquoi est-ce que je parle de tout ça ?
Et je veux être concentré sur mon contrôle d'exception dans un seul endroit.
Et donc, c'est le puriste que je vis de la vie, c'est que si je suis en train de traiter les erreurs,
et le travail de ma code est de traiter les erreurs, et de traiter les erreurs de valeur.
Si je ne suis pas en train de traiter, et il n'y a rien que je peux faire pour récupérer d'une erreur,
je ne peux pas. Et donc, c'est une façon de dire, c'est comme si vous pouvez faire les deux.
Mais, la façon d'affection est que vous pourriez vous dépasser les erreurs de la manière que vous ne pourriez pas.
C'est cool que vous ne faites pas des opinions en bas et que vous faites les deux features pour coexistir avec l'un l'autre.
Je veux aller un peu sur comment ça effectue.
Vous avez dit que c'est juste JavaScript, mais c'est en utilisant le partage de JavaScript
que probablement 99% des gens n'ont pas interactué avec, qui est des générateurs.
Comment les générateurs aient de l'aide avec ce problème de concurrence structure et de façon dont ils ne peuvent pas le promouvoir ?
Je vais me remercier, pour que l'affection fondamentale, en fait, ne soit pas le générateur, mais l'interateur.
Et ce que l'affection de l'opération est, c'est juste une iteration d'effects.
Vous avez donc utilisé un iterateur pour exprimer une routine de co-opération qui peut être pausée et résumée.
C'est un peu de la même façon que ça, mais c'est le même processus en effet TS.
C'est le même processus en évaluation scolonatique.
C'est comme vous étiez les functions pure avec les side effects.
Vous avez une liste de functions pure interlèves avec les side effects,
où les side effects sont évaluées.
Vous étiez donc passés par une fonte pure, qui vous donne l'effet de votre next.
Tout cela a été dit, un générateur est un moyen très, très clean pour exprimer l'irrateur.
Je pense que les générateurs sont des routines de co-opération.
C'est très similaire à une function de co-opération,
dans le sens que le state de la function peut être pausée
à ses points de co-opération,
qui est la même chose que un point de co-opération à l'intérieur de la function.
Et quand l'effet s'exprime, vous pouvez passer ce valeur à l'intervention de la routine de co-opération.
Et en effet, les générateurs prédentent le co-opération.
Ils ont été partagés par un JavaScript pour plus de temps que le co-opération.
Et plus tard, le co-opération a été originalement construit par les générateurs,
car les générateurs sont des routines de co-opération en général.
Et ce qui signifie, entre autres choses,
c'est que, parce que c'est la première façon que vous exprimez ces générateurs en effet,
c'est que, avec les générateurs, vous pouvez exprimer un niveau général
de l'effet avec votre yield que vous pouvez avec un weight.
Parce que le weight est un cas spécial
d'une résumé de co-routine,
qui est l'effet qui peut seulement
traiter la résolution de promesse, la sèlement de promesse.
A un point de yield,
il y a un nombre infinit de effets qui peuvent être résolus.
Vous voyez cette infection,
pas tout est une operation de synchronisation.
À un moment, nous faisons quelque chose d'un contexte.
C'est un effet synchronisé,
mais c'est une idée similaire.
C'est un effet infinitaire, plus puissant.
Il s'en prédate, c'est plus simple que le weight de synchronisation.
C'est beaucoup plus puissant.
C'est quelque chose que nous essayons de dire.
C'est juste JavaScript.
Tous les supports de runtime ne sont pas plus nécessaires.
Les outils de biais sont tous lesquels ils sont.
La chose que je vous ai demandé,
une des choses les plus difficiles
de la promesse,
c'est de débarter la code synchronisation.
C'est spécial, parce que c'est un effet de splitter.
Et beaucoup de fois,
on a des traces de splitter,
parce que c'est comme,
quelque chose de la suite est mis en place,
et le loop de l'événement
se démarre en quelque temps,
et quelque chose se démarre.
Comment ça a été arrivé ?
Qu'est-ce que je trouve ?
Qu'est-ce que tu trouves avec l'effet
que tu peux...
Je ne sais pas,
quand l'effet de l'effet
se démarre,
c'est qu'il y a un meilleur trace de stack.
Je ne sais pas, comment ça fonctionne ?
Le problème est,
oui,
et le problème est que ça peut être meilleur.
Donc, maintenant,
parce que,
et c'est parce que
on utilise des générateurs,
et qui sont fondamentaux,
harmonies,
avec le temps d'éloignage,
Node, V8,
JS Core,
et les runs de JavaScript,
ils ont créé ces traces de stack pour toi.
Donc, j'ai l'impression que je n'ai pas
ceci, ceci, ceci, ceci, ceci,
ou si tu en as un callback,
et je vois que
ta trace de stack
est la entrée du trace de stack
de ton TCP
d'envergateur,
et tu es comme, quoi ?
Et la trace de stack est de deux niveaux
d'éloignage, et ça ne vous dit pas
ce qui se passe.
L'effet de l'effet
vous donnera la trace de stack,
en utilisant les syntaxes de générateur,
juste comme vous le verrez avec le syntaxe de weight.
L'un des problèmes,
si vous avez utilisé le JS observable,
c'est l'un des plus
plus...
l'un des plus complérences
de stack,
parce que, en fait,
vous avez des calls de function
qui sont venus de quelque callback,
si vous regardez le stack overflow,
vous verrez
1 000 questions complétant.
Je pense que les systèmes,
si vous utilisez un système
de composition
à la phase de core,
si vous utilisez la composition de fonctionnel
à la base,
et que vous avez les générateurs sur le top,
vous avez besoin d'une extra tournage
pour vous capturer
où l'opération originait.
C'est un peu
naturellement
dans l'effet.
Quand les gens utilisent ça, ils disent
que les traces de stack sont discrétables
et que ça fonctionne.
Et ils disent, wow, c'est révolutionnaire.
Mais
c'est part de notre approach
de être sympathique
avec la plateforme en délire,
parce que ça signifie que vous allez
être en grande sympathie
avec tout le système d'éco
et les tools de développement,
et les libraries de 3e partie.
Le fact que les traces de stack sont
rétables est tellement énorme.
Je suis un développeur réact,
et c'est le même problème
où on se dit, oh,
ma fonction a été appelée, et le sondage
est 15 frames de ce que le réact
a fait. Je ne me dis pas, je ne me dis pas.
C'est vrai.
C'est vrai.
Vous avez mentionné que ça va mieux,
et je sais que vous êtes en train de faire
un V4 élevé,
qui je suis très excité.
Vous pouvez nous donner
un teaser de ce qui est en train de faire un V4 ?
Oui, je dirais
que vous pouvez regarder le V4
et que tout est en train de faire un V4.
Et je veux dire,
que je ne me dis pas que tout est en train de faire un V4.
Donc,
la quantité des changements
va être très petite.
Donc, le public
de l'API ne change pas
vraiment tout.
En fait, nous sommes en train
de faire un V4
de l'API, en train de faire un V3.
Parce que nous trouvons, 1, qu'il est très, très aidant.
Et 2, que ça va
faire un upgrade plus facile.
Si ces API sont déjà disponibles.
Donc, l'affection n'est pas un grand library.
Il y a peut-être 20 fonctions,
et il y a
4,5K
d'un JavaScript compressible.
Donc,
ce n'est pas un changement
sur l'au-delà de l'extérieur.
Sur l'intérieur,
ce n'est pas un changement.
Donc,
originalement,
nous avons
créé notre propre
de la continuation de la continuation.
Pour
construire l'affection.
Et donc,
c'est un autre canne,
un concept
de la programmation functional.
Mais en résultat,
nous avons construit
cette composition éternelle
sur l'inter deutschen library.
Et donc, c'est très confusant
de ce contexte que vous êtes dans.
Tout ça a été
envoyé
à l'affection
avant,
pour que nous avons
les continuations déliminées
et qu'ils sont tous implémentés.
Et c'est très clair de ce type de code que vous êtes en train de travailler.
La deuxième chose,
et c'est là que vous êtes en train de
faire plus de...
Encore une fois, c'est un détail très subtil.
Il y a un seul tour de tour,

et donc, ce qui s'est passé
avant en V3, ou ce qui s'est passé en V3,
est que chaque single task
va avoir sa propre route de tour.
Et donc, c'est possible
d'avoir une évaluation non-déterminisant
de résolution de l'événement.
En V4, tout est
mis en absolute
et cela signifie que les choses sont plus
déterminisées, mais ça signifie
que nous pouvons prioriser
certaines tasks sur les autres.
Donc, par exemple, les tasks parent
sont allés être en operations parent,
et ils ont toujours une priorité.
Donc, si vous avez deux événements
qui résoluent,
et que vous avez évalué quelque chose d'autre,
le task parent
va venir devant vous.
Et ce qui veut dire que si le parent
va faire quelque chose qui va canceler le child,
le task child ne va jamais rater.
Donc, c'est vraiment important
pour la supervision et pour les
rails de garde
de structure et de concurrence.
Le parent toujours
décide de la vie
d'eux-mêmes et de ses enfants.
Le autre
est que
nous allons avoir
une, nous avons un moyen
de représenter
ce qui est un point subtil.
Je vais le mettre de cette façon.
Les traces de stack sont encore plus belles.
Donc,
actions, et
des calls de fonction,
et des tasks,
et des ressources,
ont tous leur propre iterateur
dans l'affection v3.
Maintenant,
il y a seulement un task et une ressource
qui va obtenir sa propre iterateur.
Tout ce qui est fait dans le même
iterateur.
Ce qui veut dire
que si je suis invoqué en action
ou que je suis
en train de déclencher une function
ou que je fais quelque chose comme ça,
je serai
en train de
réciter la stack.
Vous
verrez
les stacks segmentés
et vous ne verrez pas la picture
maintenant.
C'est un des
effets harmoniaux que nous réalise.
Le stack de traces sont très belles.
On peut les faire mieux.
Je dirais que la dernière chose
que nous pouvons attendre sur v4
est
plus performant.
L'affection est déjà performante.
C'est vraiment performant.
Mais nous avons des benchmarks
qui consomment moins de mémoire
et qui
s'amuse plus vite.
C'est l'abstraction
d'une fois.
Avant de nous rappeler,
nous aimons toujours poser une question
de la prochaine fois.
Nous sommes en train de
changer le programme.
Est-ce que
on va
banniser les promesses
et assailler
notre code?
Je pense que c'est absolument
changer le programme.
Je pense que dans 10 ans,
ce sera l'expectation
d'une ronde
qui sera
structurelle.
Je pense que
une nouvelle langue qui va arriver
après la prochaine couple de années
va avoir une structurelle
de currency.
C'est la même façon
que c'était
un programme très controversé
dans les années 60 et 70.
Les gens disent que
c'est un statement de ma
« cold dead hands »
qui ne peut pas être
pas en train de s'en prendre.
Et maintenant,
en hindsight, c'est très
obvious.
Il y a toujours des gens
qui sont investis
dans une technologie particulière
parce qu'ils ont un sainte
cost en apprenant et en
développant une expertise.
Mais je crois
que la SYNC, comme nous le savons,
peut avoir une keyword.
On peut avoir une keyword
de la « await » mais ça ne veut pas
être la même chose dans la JavaScript.
Parce que, en fait, la JavaScript
a une forme de
« new promise constructor »
pour pouvoir invoquer une function
sans le trouver dans un contexte
qui est qu'il y a
l'équilibre concurrent
de la « go to » statement.
Je pensais que c'était très
un « go to » mais
c'est pas
explicit.
C'est comme si vous étiez en même code.
Merci pour votre attention Charles.
C'était un bon défi
d'affection.
Vous avez fait des trucs
très cool et je vais
faire un tour de la suite
pour faire un type de programming.
Merci pour votre attention.
Oui, merci.
La toute
de la « affection »
est en fait
une « affection » pour la
JavaScript et la communauté.
Et en parlant de la sympathie plate-forme.
C'est donc fait en bas
dans le nom
de la « affection »

de la « job script »
si vous avez des problèmes
avec la synchronisation ou pas.
Juste vous la vous
essayer, vous allez
aller dans le discord.
C'est une bonne time.
Merci Charles.
Une de les libraries
que je vais continuer de faire
pour l'inspiration et de l'inviter.
Je suis content de
vous en parler.
Je vous recommande
d'avoir fait quelque chose
très fort et
très petit.
Merci.

Episode suivant:


Les infos glanées

Je suis une fonctionnalité encore en dévelopement

Signaler une erreur

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
Card title

Lien du podcast

[{'term': 'Technology', 'label': None, 'scheme': 'http://www.itunes.com/'}]

Go somewhere