Deno: Le temps de Node.JS est écoulé?


Environ 18 mois se sont écoulés depuis la sortie interne de Deno, une version préliminaire a été publiée, plusieurs articles ont été publiés sur Habré et Ryan va à des conférences et parle de lui. Cependant, je n'ai jamais vu d'analyse réfléchie de ce projet nulle part - pour une raison quelconque, tout le monde se limite à traduire la documentation ...


Eh bien, essayons de le faire maintenant. Depuis 5 ans, j'écris sur Node.JS, et la société OneTwoTrip, où je travaille actuellement, écrit des projets sur le nœud depuis environ 9 ans (oui, j'ai écrit l'histoire d'environ 9 ans dans un monolithe sur le nœud ). Donc, l'analyse devrait être bonne. De plus, je lui ai déjà dit lors du Meetup 10 du Node.JS de Moscou , et c'était intéressant. Soit dit en passant, si c'est plus pratique pour vous d'écouter, pas de lire, alors vous pouvez écouter et regarder ici . Mon deuxième discours, je suis un mec en chemise rose.


Curieusement, pour comprendre d'où vient le projet et pourquoi, il faut tomber dans le passé. Nous jetons donc du plutonium, ouvrons les portes de notre Delorean et nous embarquons pour un voyage - regardez les 10 années importantes qui ont fait de Node.JS ce que nous voyons maintenant.



Vers le passé


2009


Ryan Dahl annonce Node.JS, la voici - la toute première présentation au JSConf 2009.


2010


Express, socket.io apparaît - les briques principales pour le moment sont presque tous les services.


Il y a des fous qui écrivent vraiment du code serveur là-dessus!


2011


Les gros gars commencent à flirter avec Node.JS - y compris Uber et Linkedin.


Version Npm 1.0.


Le nœud commence à fonctionner sous Windows.


2012


Ryan s'éloigne du développement de Node.JS. N'oubliez pas . C'était en 2012. Ryan est donc certainement le créateur et a fait beaucoup pour l'écosystème - mais les 7 prochaines années se sont écoulées sans sa participation.


2013


Node at Paypal, Walmart, eBay.


Koa apparaît - rappelez-vous combien de copies ont été cassées sur les générateurs?


2014


Node chez Netflix. Des tentatives commencent à officialiser le projet en quelque chose de plus mature, avec un modèle ouvert de gestion d'un conseil consultatif. Il y a une stagnation technique menant à la fourche d'io.js.


2015


Travaillez sur les bugs. La fusion d'io.js et de Node en extase sous les auspices de la Node Foundation et la sortie de Node 4. Je dois dire que c'est la version que je considère comme la première sur laquelle il était vraiment possible de développer quelque chose. Si quelqu'un a écrit sur les versions 0.xx - alors vous vous souvenez de var, callback hell, un tas de bibliothèques différentes pour simplifier le travail asynchrone (comme step et async. Oui, async n'est pas seulement async en attente, mais aussi une bibliothèque npm).


2016


L'incident avec le pad gauche, qui est encore de mauvaises langues, rappelle l'écosystème. Combien d'articles et d'attaques. Les haineux vont détester. Cependant, d'importantes leçons en ont été tirées.


2017


Année révolutionnaire. Je ne mentionnerai pas toutes les versions du nœud et l'augmentation du nombre d'installations de modules avec npm, cependant cette année le nombre de services sur Node.JS a dépassé 8 millions, et le nombre d'installations était de 3 milliards par semaine. Des figures absolument cosmiques difficiles à imaginer.


La N-API est également apparue et Node.JS a de nouveau été bifurqué dans Ayo.js. Une histoire très drôle et instructive à propos de SJW - cela vaut un article séparé, donc je ne m'y attarderai pas - je recommande simplement de la lire à votre guise. Ce n'est qu'au prospoiler que la fourche est morte en toute sécurité.


2018


La deuxième hystérie de masse depuis le clavier gauche - maintenant sur la façon dont le flux d'événements vole les bitcoins. Des centaines de messages sur l'insécurité des écosystèmes. Des articles fantastiques sur la façon dont les packages npm volent les informations de carte de crédit. La communauté pulvérise de la boue comme un tuyau. Je dois dire que cela a été très utile et des conclusions ont également été tirées - à leur sujet un peu plus tard.


De plus, Ryan fait soudain exploser les messages de la communauté sur le fait que des services sérieux méritent d'être écrits sur Go, décrit 10 choses dans Node qu'il regrette et annonce Deno, qui résout tous les problèmes.


2019


Deno passe à la version préliminaire, un tas d'articles apparaissent sur le hub, et maintenant vous lisez l'un d'eux.



Retour au présent


J'espère qu'après cette tournée, il est devenu plus clair quel type de points douloureux l'écosystème avait et comment il s'est développé - dans ce contexte, il est beaucoup plus facile de comprendre ce qui se passe maintenant.


10 choses que Ryan Dahl regrette à propos de Node.JS


Malheureusement, je n'ai pas trouvé l'article avec la traduction du rapport, je vais donc les énumérer ici brièvement, et ici je commenterai.


  1. Manque de soutien aux promesses au début du voyage . Oui, cela aurait été plus simple si Ryan n'avait pas tenu ses promesses, les considérant comme une complication supplémentaire qui n'a pas décollé au début du développement du nœud. Le temps perdu pour tout cet enfer de rappel est certainement dommage - mais en 2019, toutes les bibliothèques sensées ont des promesses comme interface principale. De plus, même les bibliothèques système fournissent enfin des promesses.
  2. Sécurité des appels système et des appels réseau. D'une part - oui, c'est bien quand tout est en sécurité. D'un autre côté, on ne sait pas comment, à cet égard, le nœud s'est avéré pire que tout autre médium ...
  3. Créez des modules natifs à l'aide de GYP. Oui, c'était probablement superflu, mais qui pourrait savoir que le chrome la quitterait. Encore une fois - si le chrome a disparu, nous pouvons aussi partir ...
  4. Package.json excessif. NPM en tant que registre de monopole. L'argument concernant package.json est un peu étrange. Par exemple, Ryan dit qu'il y a des déchets comme une licence. Mais si ce n'était pas le cas, comment pourriez-vous trouver rapidement les licences des modules utilisés dans votre projet? .. L'argument concernant NPM ressemble plus à la vérité, mais nous nous attarderons sur cela plus en détail plus tard.
  5. Modules de nœuds. La résolution complexe des dépendances ne fonctionne pas comme dans un navigateur. Oui, c'est vrai. Les dépendances stables ont commencé à être mises sans miracle uniquement sur la version 4-5 de npm. Mais le mécanisme fonctionne et vous permet de faire des choses incroyables - pour le moment, ça va. En ce qui concerne la compatibilité avec le navigateur, peu importe ce que vous faites, il y aura toujours des étapes de traitement du code comme la compilation et la collecte de bundles. Il est donc peu probable que les modules de nœuds aient une signification dans ce contexte.
  6. Exige sans extension et son incertitude . Oui, probablement mauvais. Mais pas assez pour le mentionner ...
  7. index.js comme complication inutile. Point trop trivial et ennuyeux à décrire.

Soit dit en passant, rappelez-vous, j'ai dit que Ryan regrette environ 10 choses, mais seulement 7 points. Ce n'est pas une erreur, j'ai examiné son rapport plusieurs fois et les critiques du rapport. Soit c'était une blague compliquée sur le sujet du traitement des valeurs numériques, soit Ryan était tout simplement trop timide pour nommer 3 autres points ...


Mais bon, nous avons compris les problèmes et avons continué. Logiquement, à Deno, Ryan a décidé de se débarrasser de tous les problèmes de Node.JS. Voyons ce qui lui est arrivé.


En quoi consiste Deno


  1. Deno est écrit en rouille.
  2. En tant que boucle d'événement, Deno utilise Tokio, réécrit en rouille.
  3. Deno prend en charge Typescript prêt à l'emploi.
  4. Eh bien, le code est exécuté en utilisant le même V8, qui a capturé le monde entier.

À première vue, cela semble bon, mais regardons de plus près ces points.


Rouille . Non, s'il vous plaît, comprenez-moi bien - je crois que Rust and Go sont des langues merveilleuses, et je suis sincèrement heureux qu'elles le soient. Ils permettent d'écrire du code bas niveau plus rapidement et en toute sécurité qu'en C ++. Cependant, il y a une nuance - dans le meilleur des cas, elle ne sera pas plus lente que l'implémentation en C ++. Donc, personnellement, je ne vois pas l'intérêt d'écrire un analogue complet des brins du système et une boucle d'événement - il est peu probable qu'il apporte un réel avantage, car ce sont des choses qui atteignent à un moment donné l'état optimal et ne sont pas réellement optimisées davantage.


TypeScript Encore une fois - je n'ai rien contre TS. Un grand nombre d'entreprises et de développeurs l'utilisent, et il a déjà fait ses preuves. Mais Deno cache simplement le transpilateur dans le binaire et le code transpilé dans des répertoires spéciaux. Autrement dit, tout est le même sous le capot, et il n'y a aucun avantage à cela, sauf pour l'esthétique. Mais il y a un inconvénient - la version transpiler est étroitement liée à la version Deno. Je ne suis pas sûr que ce soit bon - il est facile d'imaginer une situation où vous souhaitez mettre à jour le transpilateur ou le runtime. Mais pas les deux à la fois.


Donc, alors que rien de savoureux n'est visible. Allons plus loin, regardons les principales fonctionnalités.


Les principales différences entre Deno et Node.JS


Deno n'utilise pas npm. Il n'y a pas de registre central. Les modules sont importés par URL. Pas de package.json.


Autrement dit, le code ressemble à ceci:


import { test, runIfMain } from "https://deno.land/std/testing/mod.ts";
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";

test(function t1() {
  assertEquals("hello", "hello");
});

, . . , . :


  1. . , , . . , :
    1.1. , , .
    1.2. , , , .
    1.3. , . 2012 , npm , ? , " "?
  2. , . github, gitlab, , . . . npm , , — , ? — . Entropic, , , — .

. , - ( ) — … … 2019? , , 2012 Node.JS shrinkwrap, lock file? , ?


, URL — , — .


Deno Promise.


, . 2012 — . . - .


Deno Uncaught Errors


. Node.JS . .


ES Modules, require


, , . , Node.JS ES Modules...


Deno , .


! … — allow-read, allow-net, allow-run, allow-env. - :


deno --allow-read=/etc https://deno.land/std/examples/cat.ts /etc/passwd

:


  1. .
  2. , --allow-all.
  3. . . , , . . , — .
  4. . , , . . , 2019 2012, — ...

. . NPM.



, npm 2012 :


  1. . .
  2. Lock file .
  3. . github, snyk npm.
  4. .
  5. .
  6. — , , .
  7. .

npm … , . , , … " ", — facebook, google, microsoft, gitlab… , npm .



:


  1. Rust — .
  2. TypeScript — .
  3. URL NPM — .
  4. — .
  5. . . . !


Deno. " , " — , , Deno — .


, , , , . Deno , , Moscow Node.JS Meetup — . — , - ?

Source: https://habr.com/ru/post/fr476972/


All Articles