Gabriel Nordeborn - Rescript
Durée: 48m11s
Date de sortie: 06/10/2025
This week we talk to Gabriel Nordeborn, a core member of the Rescript team. Rescript is a langauge that compiles to JS but has some serious superpowers. Whether it is it's awesome pattern matching, or greate react integartoin there is a lot to love. Come learn about it with us.
https://rescript-lang.org/
https://github.com/zth
https://x.com/___zth___
La philosophie est que avec quelques outils très fortes, vous pouvez aller très loin.
Nous voulons des choses simples,
comme des structures simples, des types simples,
pas trop de magie essentiellement,
parce que nous pensons que cela fait les choses plus maintenables, plus approchables.
Bonjour, bienvenue à DevTools FM. C'est un podcast de DevTools et des gens qui vous font des choses.
Je suis Andrew et je suis ma co-host, Justin.
Salut tout le monde, nous sommes vraiment excitées d'avoir Gabriel Nordborn avec nous. Gabriel,
vous travaillez sur la team de rescript et rescript est une langue que j'ai eu à mon
avis depuis longtemps. Ça a l'air vraiment cool. C'est comme une langue purement fonctionnelle,
strongment typique, qui a un système de sound type, mais qui compile sur le JavaScript.
Nous sommes vraiment excitées de vous parler et de parler plus sur ça.
Mais avant de nous parler, nous aimerons entendre un peu plus sur vous.
Vous voulez dire à nos listeners un peu plus sur vous-même ?
Bien sûr. Salut tout le monde,
j'ai été en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en
train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les
gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train de parler avec les gens qui sont en train
C'était le premier projet, comme l'intersection de votre degree en programmation, ou c'était juste un projet ?
Non, c'était un expérience vraiment bizarre.
Il y a une...
une psychologie de couleur, un petit branch de psychologie, avec pas beaucoup de ressources,
mais il y a un peu d'une théorie sur les couleurs et comment les couleurs peuvent nous affecter et comment c'est culturellement boundé.
C'est donc que j'ai fait un expérience où j'ai installé un site de Wordpress qui me fait mal à un site de médicale.
Et puis j'ai aussi mon cousin, qui est une étudiante de médecine, qui a fait un déceus.
Et puis j'ai installé ce déceus dans le site de la web.
Et puis les gens ont pu trouver de l'information sur le déceus,
et ont ingesté des questions d'answer.
Et puis la manipulation a été trois couleurs différentes.
Donc, a-t-il l'affecté de la vitesse et de l'élevage de compréhension et de ces trucs ?
Je n'ai pas vraiment l'affecté.
Il y avait une interaction de trois ou trois de la manière entre un mail et un theme de couleur rouge,
qui avait un impact, les gens étaient un peu plus lent sur le theme rouge,
et que vous pourriez s'éteindre un peu de choses.
Oh, c'est parce que, en retour à la Stone Age, quand votre héros a été agréable sur vous,
ils avaient une face rouge et ça vous fait peur.
Et la compréhension se dévise.
Oui, vous avez le point.
Oui, c'est intéressant.
Je me sens comme que Blue peut avoir des associations.
Il y a une raison pour laquelle chaque company utilise ce genre de choses.
Donc Blue est vraiment, c'est la soudure et la calmation.
Mais apparemment, c'est différent dans les cultures occidentales,
comparé aux cultures occidentales.
Le rouge est plus soudure, apparemment.
Donc c'est...
Oui, c'est intéressant.
C'est un truc, mais quand j'ai fait ça, et après que j'ai fait ça,
et que je suis allé en train de faire un travail,
ça a été fait en 2014 ou ceci.
Il y avait deux projets en Suisse pour des scientifiques de comportement
et deux milliers de projets pour les développeurs.
C'était une choisi logique.
Donc je suis là, sur le PC pour le reste de ma vie.
Je pense que je l'ai donné au moins un shot.
Comment ça vous lead,
et où vous avez fait votre tour, ou ce que vous avez fait à découvrir le rechip?
J'ai commencé par le PHP.
C'était mon base, en commençant.
Et puis, comme toutes les choses que j'ai vécues,
j'ai hâte de les faire à l'un des deux sites.
On a fait beaucoup de travail client,
j'ai travaillé sur le web, vous le voyez.
Et parfois il y a des choses plus interactives
que vous pouvez délivrer avec juste le rendering de service.
Donc, la nature, le JavaScript.
Et en même temps, c'était juste quand React a sorti, essentiellement.
Il y avait encore la nouvelle chose sur le bloc.
Angler One était la grande chose,
Backbone, ces fréquences.
Un ami de mine m'a montré React,
j'ai instantanément hâte de le faire.
Il a l'air terrible.
Pourquoi vous le faites?
Je pense que j'ai spécialement dit,
pourquoi vous ne faites jamais de quoi avec le JavaScript
si vous avez juste le PHP et le service?
Vous avez vos paramètres de courant, vous pouvez juste le re-render.
Mais on a eu quelques requises,
qui ont fait que nous devions utiliser ça.
Et donc, j'ai l'aimé, j'ai l'aimé.
Et puis, en même temps,
j'aimerais penser à ces choses,
et en même temps, je l'ai vu flow.
Backbone, c'était...
Backbone, c'était la chose de la hot.
Avant le JavaScript,
quand le JavaScript était la chose,
mais n'était pas vraiment la hot.
C'est...
C'est l'heure où ça a existé.
Maintenant, en regardant les graphes,
vous ne vous en pensez pas.
Mais c'était...
Back...
Flow était une hot,
intéressant Facebook project.
Facebook a un grand...
un grand momentum de React,
et tout les trucs d'open source.
J'ai regardé Flow,
et j'ai vu que...
Wow, il y a un moyen de découvrir les bugs
et les problèmes avant.
On a envoyé le client.
Excellent.
Je n'ai pas un background
dans les langues de type.
En ce sens,
j'ai fait un peu de C,
mais ça ne compte pas.
Donc, je pensais que Flow était vraiment intéressant.
Et puis, je l'ai aussi,
d'ailleurs,
d'abord, dans le JavaScript.
Mais on a utilisé Flow,
on a utilisé le JavaScript.
Il y avait toujours...
Je cherchais toujours plus,
en parlant de la sécurité type.
Et puis, en plus,
c'était peut-être le premier temps
que j'ai vu ça.
Le JavaScript de ReasonML
et de Bucklescript.
Donc, j'ai coupé dans ce genre de choses
et j'ai rapidement réalisé
que c'est ce que j'aimerais
flow ou type JavaScript
pour me devenir heureux.
Peut-être pas.
Ce n'était pas parfait en même temps.
Il n'y a pas de ça maintenant,
mais si vous comparez
à les goals de Flow
ou TypeScript
et les goals de
Bucklescript de ReasonML.
En même temps,
c'était beaucoup plus
important de faire.
Le son de type,
l'influence,
les structures de data
qui sont facile à travailler
avec la mutabilité.
Et non,
je n'ai pas de tout
de la programmation functionnelle
de Hardcore.
En ce sens,
je suis très un pragmatiste.
Je veux faire des choses
qui travaillent,
que je ressente,
et que je peux prouver
que le long-temps fonctionne.
Et un type de système
qui est un son
que vous pouvez croire
avec des types nominaux
et des types structurels
et des types de choses
dans des places où ça se passe.
Ça m'a réconnée
avec moi beaucoup.
Donc j'ai commencé à en faire.
C'est comme j'ai en train
de faire de la première partie.
Cool.
On est un grand fan
de TypeScript
sur le podcast.
J'ai vraiment
un typeScript sweatshirt
à l'heure.
On le vend à shop.devtools.fm.
Mais
une des features
de TypeScript
que j'ai vécu
et que beaucoup de gens
aient,
c'est
un système de type
mais vous pouvez le faire.
Je pense que
j'adore
l'insouvenance
dans des places où
je peux être
l'arbitre de ma propre destinée
même si les types ne sont pas
assez travaillés.
Qu'est-ce que
un système de type de sound
en pratique?
En pratique,
un système de type de sound
signifie que
si il s'y compilera,
ça fonctionne.
Si
c'est vrai
pour les choses internes,
donc si vous compiliez le programme,
la garantie de compilera
que la code que vous avez
écrit
fonctionne
dans le moyen
que vous avez
écrit,
le moyen
est out-line,
donc en fait.
Ensuite,
vous avez
les éditions,
donc en fait,
les valeurs
qui viennent de l'au-delà
vous devez les mettre
de la bonne façon
ou les prendre de la bonne façon
parce que
les choses peuvent se réglir.
Mais si vous avez un programme
qui est écrit
seulement en RISCIP,
pour exemple,
et qui compilera,
ça fonctionne
selon ce que vous avez écrit,
donc en fait.
C'est
la garantie
d'un système de type de sound.
Et,
encore,
c'est intéressant que vous
en avez l'insouvenance.
Et je pense que
nous probablement
pensons
plus malin
que
vous l'imaginez,
même si je
passe par le système de type de sound.
Je ne trouve pas vraiment
je trouve les systèmes de type de type
fascinés et fun,
mais je suis seulement intéressé
dans ce que je donne en pratique.
Et ce système de type de sound
donne à moi en pratique
est
que je peux croire
que
les choses que j'ai évoquées,
les choses que j'ai évoquées
vont fonctionner
selon le moyen que j'ai écrit.
Je peux faire des facteurs
facilement,
mais le plus grand chose pour moi
est
si je fais un changement
en mode massive,
un Oakland coulda bread
et
des dermis Île dans leTIA
l'astérité
à whom j'ai
écrit un book
iniz
d' très t Respillon
J'ai marre l' Gerry
freins
j'ai Champions
désespoề
cases
que vous êtes supposed à contrôler pour cela, pour travailler dans toutes les
branches que vous avez, essentiellement. Si vous avez un ennemi, pour exemple, et vous voulez faire
quelque chose avec l'ennemi,
Riscope vous va faire sure que vous contrôlez tous les cases possibles
de l'ennemi,
si vous expliquez, expliquez, expliquez, que vous ne vous allez pas, essentiellement.
Et il y a une grande
productivité pour moi,
de cela.
Donc,
en revanche, je pense que ce que vous décrions,
vous pouvez juste s'occuper d'un moment où vous voulez avoir les gains de productivité.
Je me sens exactement la même façon que si je le fais
par le coup, je prends les gains de productivité dans un autre genre de l'arrière,
en tant que,
mais il y a un whole category de langues programmes et programmes qui
se préparent profondément sur le son pour le sake de l'onir.
Et je n'ai pas l'un de ces.
En ce sens, ce n'est pas vraiment ce qui me intéresse, c'est cool si c'est le cas,
mais je suis intéressé par la productivité, ce qui me donne et la garantie que je donne.
On va prendre un moment de temps pour parler de rescript.
Plus généralement, rescript est un langage programme
qui comporte un JavaScript et a un système de sound.
Qu'est-ce que vous diriez ?
Le rescript est un langage programme qui est
focussé, je dirais, il est focussé sur le web.
Il est focussé sur la simplicité et la vitesse.
La vitesse est une feature importante, c'est quelque chose que nous careons
d'une fois que nous avons un compilé rapide, que nous avons un
rapide en cours de l'édit, que nous avons un rapide en cours de l'édit,
où il y a une interaction avec le langage.
Nous careons d'une fois que la simplicité, la façon dont je le disais,
c'est si vous voulez le contraster à un type-script,
un type-script veut que vous typez le JavaScript que vous avez déjà écrit
ou le JavaScript que vous avez écrit, vous avez écrit un JavaScript
et vous voulez que vous typez tout en JavaScript,
et ça le fait vraiment bien.
Le type-script est fantastique à ce que cela le fait.
C'est un système d'amazing type,
un système d'amazing, qui fait de l'ingénierie de la vie.
Il tient de type le JavaScript et le JavaScript a
créé dans les années pour être un taux de taux assez massive.
On ne peut pas vraiment
le faire trop vite, parce que vous vous arrêtez beaucoup de la web,
ce qui n'est pas nécessaire.
Vous pouvez développer le langage,
le TC39 est en train de développer le langage,
mais l'évolution est sain et
il y a encore un nombre de features massive.
Il y a un nombre massive de
des choses qui font des choses.
Imaginez qu'il y a un chède de
20 taux.
Certains de ces taux sont vraiment jolies,
sont vraiment bons, très bien pensés.
Beaucoup de ces taux ne sont pas si jolies,
ils ne sont pas bien bien ensemble,
ou il y a 4 ou 5 taux différents
qui font le même chose
que les autres générations de la taux,
comme dans la ligne de producteur, etc.
Les scripts, la philosophie et l'idée
est que si vous ouvrez le taux de script,
vous allez essayer de faire le mal.
Vous regardez autour et vous tryz de trouver les taux.
Mais le point est de
nous voulons avoir quelques taux,
mais qui sont vraiment jolies et qui travaillent très bien ensemble.
La philosophie est que
avec quelques taux très jolies, vous pouvez aller très loin.
Et nous voulons des choses simples,
comme des structures simples, simples,
pas trop magique essentiellement,
parce que nous pensons que ça fait
les choses plus compétentables, plus approchables,
et tout ça.
C'est cette philosophie, essentiellement.
Ok, je l'ai lu dans les docks,
et l'une des différences avec le script type
que ça liste, c'est que, comme vous l'avez dit,
le script type t'essaie de mettre
l'entire JavaScript, comme l'API,
qui est fou, il y a beaucoup de choses qui peuvent arriver.
Juste même le moyen que l'on peut
savoir que les paths de code ont des valeurs disponibles,
et les types de choses qui se passent.
Des trucs fou à l'entire.
Mais sur la page de la maison, vous vous dites que vous vous faites
seulement un subset de JavaScript.
Donc, en pratique, ce que ça veut dire,
ce que je n'ai pas disponible pour moi,
ce que je fais pour les constructeurs,
ce que je vais aller à autre chose.
Il y a plein de choses que vous n'avez pas disponibles.
En fait, les classes sont les mêmes,
peut-être, dans le script.
Vous pouvez avoir un workflow de développement
très similare à l'ergonomique des classes
et des méthodes, mais vous n'avez pas
des classes en langue, vous n'avez pas des
inheritance, ce sont fonctionnelles,
comme on vous encourage à
faire des fonctions qui opérent des données
et que vous pouvez changer les choses.
Donc, un exemple, il y a plein d'autres.
En fait, les services de JavaScript,
les services de JavaScript sont massifs.
Nous n'avons pas de générateur,
par exemple, des fonctions générataires,
même si nous sommes intéressés en les avoir.
Mais essentiellement, quand nous regardons
les choses que nous pourrons
faire dans le script de JavaScript,
nous voulons les travailler bien
avec ce que nous avons déjà.
Donc, les features de la langue,
par exemple, variants, records,
les matchs, ces choses, nous voulons
les travailler vraiment bien avec eux.
Il faut aussi ajouter quelque chose,
parce que nous regardons tout le...
Pour ajouter quelque chose dans la langue,
c'est un grand cost
que vous vous donnez à des gens
d'autres tools, que ils ne peuvent ou ne peut pas
utiliser, mais ça peut créer confusion
sur si je vais utiliser ça ou ça,
ou ça ou ça, etc.
Donc, nous voulons être simple comme possible.
Donc, la barbe pour ajouter des choses
est très high, mais nous voulons aussi
rester très près de ce que les développeurs
de JavaScript, souvent, veulent utiliser.
Donc, un exemple est un programme de synchronisation.
Nous ne pouvons pas probablement
aller avec un peu d'autres
moyens de faire ça que le de la façon native
de la JavaScript.
Il y a des tonnes de priorité
dans lesquelles nous avons
des langues de la mère,
au Camel, mais aussi dans d'autres langues
pour comment faire
la synchronisation et la concurrence.
Mais nous voulons
construire un langage de la synchronisation
juste comme ça fonctionne en JavaScript,
juste parce que c'est familier.
C'est quelque chose qui est virtuellement
partout dans l'écosystème de la JavaScript.
Et il y a des trucs intéressants.
Il y a des traits intéressants dans le re-script
qui le font plus ergonomique,
je dirais, si je suis là,
que dans le JavaScript et le type script.
Ce sont des trucs intéressants.
C'est un exemple bon
quand il y a quelque chose dans le travail
et qui fonctionne bien avec l'existe langage,
qui a un bon effectu de synergie.
Donc, pour un moment,
spécifiquement, dans le re-script,
tout est une expression,
qui signifie que si vous avez
fait un component réacte et que vous avez
deux layers de divs,
et que vous voulez
faire un if,
et que vous ne pouvez pas,
parce que c'est pas un...
Vous ne pouvez pas faire des expressions
dans le milieu de JSX,
vous avez à faire un tournerie
ou un autre,
faire une fonction,
computed avant,
ou oui,
tout le monde a fait ça.
Dans le re-script, tout est une expression,
vous pouvez mettre un if,
ou tout le monde,
le bloc de code,
tout le monde,
essentiellement.
Et ce qui est bien pour ça,
ça ne ressemble pas beaucoup
à la GATCO,
mais ce qui est bien pour ça,
c'est que ça vous permet de collocer
votre logique,
où il est supposed à être.
Donc, si vous êtes forcé
de faire quelque chose de la fonction,
si c'est seulement pour ce endroit,
vous êtes forcé de faire
une fonction immédiate,
ou une éteinte de 5 niveaux,
ou quelque chose d'autre.
Si vous êtes forcé de faire ces choses,
vous faites-vous de leur cause
parce que c'est une limitation
dans les quotas de la langage,
pas parce que c'est ce que vous voulez faire,
et des expressions à chaque place,
c'est un très bon truc
qui vous permet de mettre un code
où cela ne s'agit pas.
Et pour un weight,
dans le risque,
le grand chose est de changer,
essentiellement,
ça vous permet de combattre
sur tout le monde.
C'est comme le switch
en JavaScript,
mais sur le stylo,
c'est généralement ce que vous voulez dire.
Donc, vous avez un switch,
et ensuite vous pouvez changer
sur une structure de l'adresse
et le compiler vous permet
de prendre en sorte que vous
déclare tous les cas possibles
pour cette structure.
Et vous pouvez aussi changer
sur un weight.
Vous pouvez changer un weight
et quelque chose se passe.
Et ensuite, vous pouvez combattre
sur ce plan de promesse
qui est en train de faire ou de déclare,
et sur ce que vous avez réussi.
Donc, vous pouvez bien
déclare un point d'erreur
qui est très succinct.
C'est vraiment une ligne extra.
Et cela comporte
le régulier de la tricatch
et vous avez le variable
que vous avez défendu
et vous assignez-le,
ou le use de R,
si vous êtes ce type de personne.
Et puis, vous avez votre tricatch
et vous avez le tricatch
et vous avez le tricatch.
Mais ça vous permet de l'intégrer
et de l'intégrer dans le code
où cela se passe.
Donc, vous n'avez pas
à faire cette cérémonie
de l'éteindre un tricatch,
même si ce n'est pas vraiment
ce que vous avez vu
après.
Donc, c'est un exemple
de quand
un feature de JavaScript
s'amuse très bien
dans les features corporelles
de la langue.
Et c'est ce genre de choses
que nous essayons de trouver.
Donc, quand nous prenons
un nouveau truc,
qui, comme
il y a un bar high,
mais bien sûr,
nous voulons
être as productives
comme ils peuvent être
avec le JavaScript
par le Rousscript.
Donc, nous voulons
mettre des trucs
de JavaScript aussi.
Mais il y a un bar high,
mais quand nous faisons ça,
c'est important
que ça fonctionne très bien
avec le reste de la langue.
Oui, le switch
de la langue est vraiment
bien, parce que
je pense que l'un des problèmes
que j'ai avec les Asignalwey
est que so many people
ne font pas de l'air de l'éteindre.
C'est juste qu'ils ne sont pas
le seul code pour le path de l'épée.
Parce que c'est un peu
un peu délicieux,
et vous voyez
beaucoup de libraries
qui sont en train de
Il y a un que
j'ai utilisé pour longtemps,
qui est essentiellement
de râper
tout ce que vous allez
attendre et attendre
ce que vous allez
faire, et puis ça va
retourner
à la tue,
comme un arrêt
avec deux items.
L'un est le succès
et l'autre est l'air.
Et ça mérite
la conférence de type
et beaucoup d'autres trucs.
Je ne sais pas, c'est bien.
Je voudrais plus
qu'il y ait
beaucoup de belles cities
parce que c'est un langage
fonctionnel.
Vous avez mentionné
le pattern de la langue
propre,
c'est très bien.
J'ai utilisé le pattern
de TS
해�re qu'il n'est pas
sites.
Mais
beaucoup de problèmes et assez éligent aussi.
Et c'est, encore une fois, vous pouvez émuler ça bien dans les typescript,
je dirais comme les tés, par exemple, c'est très cool.
Il y a un peu d'autres libraries de pâle match, mais c'est une période de
temps, ce n'est pas la première classe dans la langue en rescript.
Il s'agit d'une compilation d'une compilation de JavaScript aussi.
Il s'agit d'une compilation de ce que vous avez à la main si vous avez
à l'optimer, ce qui est un peu de bâtiment, essentiellement.
Mais vous ne voulez pas regarder ça, vous voulez regarder un bon switch
d'abord.
C'est un des choses qui s'étendent sur le switch.
On a un autre très bon point de faire avec un système de sound
type, c'est que vous pouvez faire beaucoup de analyses stadiques
ou analyses stadiques autour de votre programme.
Donc, un exemple est que nous avons un tour qui se débrouille dans le
rescript, qui peut aller par votre programme entier et se
figure exactement, par exemple, si vous avez un cas de varié
ou que vous avez un record, vous pouvez se figure que ce record
fiel n'est jamais red.
C'est constructé, mais vous ne le readez pas, par exemple.
Vous pouvez se figure que ce n'est jamais red, mais
écrit ou créé.
Et en regardant A sinc, et le handling d'erreur,
il peut aussi se figure que
il y a un promesse qui pourrait réjecter
si vous n'avez pas réjecté le possible.
Donc, ça peut faire ce type de linting pour vous.
Et c'est un tout programme et c'est aussi très rapide.
C'est quelque chose que j'utilise tout le temps.
Et une des choses que je...
Peut-être que je n'ai...
Une des choses que je n'ai plus de la plus, je dirais,
quand je fais des trucs types, parce que je fais
beaucoup de trucs types, et de pouvoir
réanalyzer et analyser le code base
et me dire que les choses sont de la code.
Donc, par exemple, dans l'ensemble du programme,
que les choses ne m'utiliseront pas, et au niveau de l'entrée.
C'est pour moi qui fais beaucoup de travail
dans les codes de base, des types de linting.
De pouvoir réellement réunir l'old code,
c'est en fait l'une des plus grandes victimes pour moi
avec le type de système.
Juste parce que d'ailleurs, tu sais comment ça est.
Les expériences d'old, les choses se sont dépassées.
La nouvelle personne vient,
ils s'en appuient à la base de code,
ils sont supposés de trouver information
sur quelque chose de l'AI, maintenant.
Aussi, l'agent s'en appuie à la base de code,
il tente de figureir l'information,
il y a un peu de codes qui sont vraiment dents
ou d'autres, ou d'autres conventions, ou...
Ou quoi que ce soit,
ce qui devrait être retiré, essentiellement.
Au-delà de l'objet de la gaine de la compétition,
la vitesse de la compétition et tout ça.
C'est quelque chose que j'ai vraiment...
C'est un bénéfice de la soundness
que tu peux faire avec le type de système.
En parlant de la soundness,
tu as mentionné...
Tu as mentionné que
il y a des types sur le système de l'Edge
que tu dois définir.
Et c'est votre barrière de soundness,
les choses au-delà de la code de réscription
sur le sound.
Le type de script a le même problème.
Ils ont besoin de définir les definitions de type pour tout.
Les types de script sont très différents
à ce point de l'époque,
et il y a beaucoup de différences de type pour tout.
Il y a beaucoup de types,
mais il y a beaucoup de libraries.
Ils ont évoqué leurs types de scripts.
Quand tu penses sur les re-scripts interrompés
avec le reste du système d'Edge,
ou des types qui sont définis pour les choses au-delà,
c'est ce qui est un histoire.
Je dirais que c'est un des...
les points de la langue où on a beaucoup plus de travail à faire,
ou plutôt dans le système d'édge,
dans le re-script interrompés avec le type de script,
tu as des bindings qui sont essentiellement des moyens de décrire
que si tu n'as pas appelé cette fonction en JavaScript,
tu es supposed à attendre ces paramètres,
ça retient à cette chose,
et c'est une description de ce qu'un monde au-delà a.
Et ensuite, tu as accès à ces fonctions en re-script,
et la version de JavaScript est
juste ce que tu as prévu pour les calls pour le JavaScript.
Les grandes problèmes que nous avons sur ce sujet
sont que,
en re-script et en JavaScript, il y a beaucoup de similarities,
il y a aussi un bunch de choses que tu fais en re-script,
en type script et en JavaScript que tu ne fais pas en re-script
ou que tu ne fais pas en re-script, en tout cas.
L'envers est un exemple.
Le re-script n'a pas le concept d'envers,
ce qui est quelque chose que j'ai vraiment apprécié
dans le sens que c'est très clair,
comme exactement ce que les choses peuvent faire.
Mais ça veut dire que
tu ne peux pas, en un à un, exprimer un type script
avec des overloads en re-script
sans breaking out each overload
pour sa propre fonction de bindage.
Il y a des différences dans les types de systèmes
qui font...
Parce que ce que les gens viennent de toujours
c'est que tu ne peux pas construire un outil
qui automatique génère un re-script de type scripts.
Et avant tout,
la version de type script,
c'était quelque chose que les gens ont exploré,
mais les résultats n'étaient jamais vraiment satisfactifs
parce que, en tout cas,
c'est des types de systèmes très différents,
mais aussi que l'éteindre des bindings
n'est pas de l'art, en tout cas.
Normalement, quand tu utilises un élément,
tu te ré-sale les libraires en utilisant tout.
La plupart des fois, tu utilises un petit part de ça
et tu veux l'utiliser dans ta manière spécifique
et il y a un peu de moyens pour éteindre les bindings
en re-script de la lettre de la API un peu,
dans le sens où tu peux...
Tu peux éteindre des valeurs defaults pour arguments,
par exemple.
Un exemple classique est le API de la lettre de la API
ou de la lettre de la lettre de la lettre.
Ce n'est pas la version de la lettre de la lettre,
mais ça prend un petit part
et ensuite tu peux passer le string de l'encodement.
Les encodements, en plupart cas,
vont être utf-8.
Tu peux créer un bindings en re-script
qui a un valeur default du string utf-8
pour les options parmi les paramètres.
Tu n'as jamais de droit de re-script utf-8,
mais l'émittre de la lettre Java
a toujours le re-script utf-8.
Mais ce n'est pas un autre fonction.
Ce n'est pas un rapport sur le top de la lettre de la API.
C'est construit dans le bindings.
Le bindings en re-script est un art, en fait.
Mais on a aussi un autre moyen
d'utiliser le code de re-script type.
Et là, on a un peu de bonnes choses en re-script.
On a un truc qui s'appelle GenType,
qui peut annoter les types et les functions de re-script.
Et puis, un file type-script pour chaque module re-script
est créé avec tous les types en re-script,
mais qui sont translés par re-script.
Donc, on peut les utiliser.
Mais le bindings en re-script
est un problème très grand,
et il s'est mis en place,
en tant que communauté,
donc, un type différent.
Maintenant, il y a tout et puis un autre.
Mais en fin de jour,
quand le type-script était en train de se battre avec Flow,
il a aussi un peu de choses,
mais les plus grands étaient Annie Stubbs.
Le même avec FlowType,
et tout ce genre de choses.
Donc, à ce point,
si, je vais dire,
quand on se développe,
quand on se développe beaucoup,
il y aura une bonne qualité de bindings.
Mais c'est aussi un point où je pense que
les gens ont estimé
combien de fois ils utilisent les libraries
et combien de temps ils ont expéré
et les bindings pour les libraries.
Mais c'est un point où
c'est difficile de dire
qu'un autre chose que ce soit un problème.
L'AI va en aider,
comme en enseigner l'AI
pour faire des bindings.
On expérimite aussi
pour que le re-script
puisse émettre le type-script
comme un layer interop,
donc, on peut appeler le code re-script
et émettre le type-script.
Mais on expérimite aussi
pour que le re-script
soit un compiler ou un type de genre.
On peut émettre un file
qui vérifie que les bindings
que vous avez émetties
travaillent avec les types de type
de cette libraries.
Si j'ai cette bindings
pour, on dirait le re-acte,
pour exemple,
pour le use memo,
ou autre chose,
si ceci est un signe de fonction
de la bindings que j'ai émettie,
est-ce compatible
avec le use memo
de la package de re-acte ?
On fait un peu d'exploration
sur comment on peut imposer
cette situation,
parce que c'est un problème.
Si vous êtes dans un path blessé,
comme vous venez et
vous travaillez avec le re-acte,
pour exemple,
où nous avons des bindings
et un peu d'autres libraries,
où vous avez des bindings très bonnes,
vous êtes plutôt bien
comme si ça va être bien,
mais si vous avez besoin
de vous amener à l'intervention
dans les bindings de la re-acte,
ça peut être un peu grand.
Donc, le code est juste
le tip de l'iceberg
quand il vient
de l'évolution de la scripte Java.
Pour mieux ou pour le worse,
nous avons beaucoup
et beaucoup de tooling.
Nous avons
lintes, test,
bundles,
des tools,
des tools de construction,
tous les différents types de tools.
Qu'est-ce qui est la histoire
pour le re-script
de l'intégrer avec ces?
Est-ce que,
en fait,
vous avez l'air de boire
et vous faites tout pour vous?
Ou est-ce que
vous êtes interoperables
avec les tools communs
que nous avons utilisé?
Oui,
l'un des goals
de la re-script
est de l'intégrer
comme rapidement possible
dans le monde de la re-script.
Donc, ça veut dire,
par exemple,
vous utilisez
NPM ou PNPM
ou tout ce qu'on veut utiliser,
mais vous utilisez
l'écosystème de la re-script
pour l'exposition,
par exemple,
vous utilisez
comme les mêmes bindings,
ce que la re-script
fait,
pour chaque file re-script,
elle va émettre un file re-script
qui ressemble
comme on peut le faire,
essentiellement,
c'est supposed
de se faire
rassurer que ce que vous avez
écrit en hand
en re-script.
Notre goal
est de l'intégrer
comme
rapidement
dans toutes ces choses.
Vos bindings,
l'interprète,
bien sûr,
c'est un truc
où ça fait plus de sens
pour le faire
dans la re-script
en-deux,
pour l'interprète.
Nous aussi,
l'interprète
est un autre topic,
mais
nous n'avons pas
que beaucoup de lintes
parce que nous avons
un système
de type
qui a un couple
de warnings
de la compilée
donc
nous n'avons pas
vraiment vu
que vous pouvez
lindre
et je sais que les gens
font
lindre
l'output de la re-script
on utilise
les outils de re-acte
pour exemple
on a fait un bunch de travail
et on a un verson 12
qui est venu ici
donc on a fait
un bunch de travail
pour
faire sure
que
l'output de re-script
peut travailler
avec le compiler de re-acte
pour exemple
efficacement
toutes ces choses
qui viennent
de faire un rôle
d'interprète
comme possible
avec la re-script
je vais
demander
quand on a
l'interprète
dans la re-acte
si c'est l'intégrer
avec le
outil de la re-acte
de la re-acte
d'écosystème
c'est super cool
que vous pouvez
faire des choses
sur l'outil
et
c'est bon
d'enlever l'outil
que vous pouvez
transmettre
ça
à la re-script
code
oui
Justin
tu typiquement
c'est un peu de
un côté
mais tu typiquement
check
dans
la code de re-script
je ne
pas
c'est
un problème
comme
on
on
vous recommande
à checker
je trouve un peu
brouillant
mais je
j'ai
travaillé
très rapidement
sur
ok
si on ne check
dans la code
comment
nous faire
que nous ne
n'avons pas
d'accident
des changements
parce que
imaginez
que nous
voulons
que nous
avons un
système de son
je le fais
je le compile
je peux le entrer
donc
c'est bon
mais il y a
un autre
lait
dans la re-script
qui est
la re-script
donc
ce que
il y a des changements
dans
la re-script
que je n'ai
anticipé
maintenant
le compiler
est
très bien testé
donc
c'est pas
vous pouvez
croire
l'output
mais
quand vous faites
refacteur
quand vous faites
les bindings
quand vous faites
les versions
de la
compiler
ou d'autres versions
de la
libraries
et
c'est bon
juste scroll
dans
l'actuel
comme
la re-script
changement
aussi
comme
quand vous faites
une re-script
que c'est
purement
sur le type
niveau
ou quelque chose
comme
que vous restructurez
ce travail
c'est bon
pour
quand
il compile
et vous aussi
vous voyez
qu'il n'y a pas
des changements
dans la re-script
et
ça va
quand on parle de la re-acteur
on aussi
doit parler de la re-script
qui est
comme un
feature de la langue
comme
qu'un autre
chose
donc
comment
vous
ré-acteur
et
ce que le re-script
a l'air
comme un
re-script
la re-script
commence
à la fin
la re-script
est
une
feature de la re-script
qui signifie
que c'est
intégré
dans
l'actuel
parcer
c'est
une
ré-script
des notes
sont
des notes
dans la
compiler
et
c'est
la 1re
class
ce genre
tout
tout
bien
avec
J6
alors
on a
réacteur
c'est
ce qu'on a
mis
spécialement
historiquement
on a
mis
tous
nos
efforts
en
parlant de
tentons
de faire
une
case
qui
fonctionne
bien
et
nous
tentons
de
et
la re-acteur
est
bien
avec
la
popularité
et
la
route du project
la re-acteur
est
très
grande
donc
je dirais
que
on a
une
très bonne
support
c'est
quelque qu'on
beaucoup
c'est
officiellement
on a aussi
commencé
de
travailler
beaucoup
en
essayant
de
faire
d'autres
frameworks
qui
travaillent
différemment
et
travaillent
bien
bien
bien
dans
la
re-script
donc
on a
été
étranger
solid
J6
pour exemple
réacteur
mais c'est
le
parce que
c'est
réacteur
mais aussi
autres
cases
parce que
J6
est
cool
et spécialement
quand
vous avez
toutes
ces
belles
features
sur
la
pade
et
et ce
ce
vous pouvez
faire
beaucoup de
cool choses
donc
je
pour exemple
j'ai
bêlé
une
frameworks
base
sur
le
ban
c'est
pure
le
service
de
mais
il y a
des
components
juste
comme
vous
vous
vous
app
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
vous
et
et
ce
que
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
ce
A part de ce, on n'a pas parlé de ça, mais votre packaging de relais rescript
rescript est phenomenal.
Il n'y a pas d'autre que le README, le API est très beau.
Merci d'avoir regardé ce que nous faisons sur le rescript.
Merci beaucoup de m'avoir regardé.
C'est très enjoyable. Merci.
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