Deno: Node.JS läuft die Zeit davon?


Ungefähr 18 Monate sind seit Denos interner Veröffentlichung vergangen, eine Vorschau-Veröffentlichung wurde veröffentlicht, mehrere Artikel sind auf Habré erschienen, und Ryan geht zu Konferenzen und spricht über ihn. Ich habe jedoch noch nie eine sorgfältige Analyse dieses Projekts gesehen - aus irgendeinem Grund beschränkt sich jeder darauf, die Dokumentation zu übersetzen ...


Versuchen wir es jetzt. In den letzten 5 Jahren habe ich auf Node.JS geschrieben, und die Firma OneTwoTrip, in der ich jetzt arbeite, schreibt seit ungefähr 9 Jahren Projekte auf dem Knoten (ja, ich habe die Geschichte in einem Monolithen über 9 Jahre auf dem Knoten geschrieben ). Die Analyse sollte also gut sein. Außerdem habe ich es ihm bereits in Moscow Node.JS Meetup 10 gesagt, und es war interessant. Übrigens, wenn es für Sie bequemer ist, zuzuhören und nicht zu lesen, können Sie hier zuhören und zuschauen. Meine zweite Rede, ich bin ein Typ in einem rosa Hemd.


Seltsamerweise ist es notwendig, in die Vergangenheit zu geraten, um zu verstehen, woher das Projekt kam und warum. Also werfen wir etwas Plutonium ein, öffnen die Türen unseres Delorean und begeben uns auf eine Reise - schauen Sie sich die wichtigen 10 Jahre an, die Node.JS zu dem gemacht haben, was wir jetzt sehen.



Vorwärts in die Vergangenheit


2009


Ryan Dahl kündigt Node.JS an, hier ist sie - die allererste Präsentation auf der JSConf 2009.


2010


Express, socket.io erscheinen - die Hauptbausteine ​​im Moment sind fast alle Dienstleistungen.


Es gibt verrĂĽckte Leute, die wirklich Server-Code schreiben!


2011


GroĂźe Jungs beginnen mit Node.JS zu flirten - einschlieĂźlich Uber und Linkedin.


Npm 1.0 Version.


Der Knoten beginnt unter Windows zu arbeiten.


2012


Ryan entfernt sich von der Entwicklung von Node.JS. Erinnere dich . Es war 2012. Ryan ist mit Sicherheit der Schöpfer und hat viel für das Ökosystem getan - aber die nächsten 7 Jahre vergingen ohne seine Teilnahme.


2013


Knoten bei Paypal, Walmart, eBay.


Koa taucht auf - erinnerst du dich, wie viele Kopien von Generatoren kaputt waren?


2014


Knoten bei Netflix. Die Versuche beginnen, das Projekt zu einem etwas ausgereifteren zu machen, mit einem offenen Modell fĂĽr die Leitung eines Beirats. Es gibt eine technische Stagnation, die zur Gabelung von io.js fĂĽhrt.


2015


Arbeite an den Bugs. Die Fusion von io.js und Node in Ecstasy unter der Schirmherrschaft der Node Foundation und die Veröffentlichung von Node 4. Ich muss sagen, dies ist die Version, die ich für die erste halte, auf der es wirklich möglich war, etwas zu entwickeln. Wenn jemand über die Versionen 0.xx geschrieben hat - dann erinnern Sie sich an var, callback hell, eine Reihe verschiedener Bibliotheken zur Vereinfachung der asynchronen Arbeit (wie step und async. Ja, async ist nicht nur async await, sondern auch eine npm-Bibliothek).


2016


Der Vorfall mit dem Linkspad, der immer noch böse Zungen sind, erinnert an das Ökosystem. Wie viele Artikel und Angriffe. Nun, Hasser werden hassen. Hieraus wurden jedoch wichtige Lehren gezogen.


2017


Durchbruchjahr. Ich werde nicht alle Releases des Knotens und die Zunahme der Anzahl der Installationen von Modulen mit npm erwähnen, jedoch überstieg die Anzahl der Dienste auf Node.JS in diesem Jahr 8 Millionen, und die Anzahl der Installationen betrug 3 Milliarden pro Woche. Absolut kosmische Figuren, die schwer vorstellbar sind.


Die N-API wurde ebenfalls angezeigt, und Node.JS wurde erneut in Ayo.js aufgeteilt. Eine sehr lustige und lehrreiche Geschichte ĂĽber SJW - es ist einen separaten Artikel wert, damit ich nicht weiter darauf eingehen werde - ich empfehle nur, sie in Ruhe zu lesen. Nur an den Prospoiler, dass die Gabel sicher gestorben ist.


2018


Die zweite Massenhysterie seit leftpad - jetzt darüber, wie Event-Stream Bitcoins stiehlt. Hunderte von Beiträgen über die Unsicherheit des Ökosystems. Fantasy-Posts darüber, wie Npm-Pakete Kreditkarteninformationen stehlen. Die Gemeinde versprüht Schlamm wie einen Schlauch. Ich muss sagen, es war sehr nützlich und es wurden auch Schlussfolgerungen gezogen - etwas später.


Außerdem bläst Ryan plötzlich Community-Posts auf, die darauf hinweisen, dass es sich lohnt, seriöse Dienste auf Go zu schreiben, beschreibt 10 Dinge in Node, die er bedauert, und kündigt Deno an, der alle Probleme löst.


2019


Deno wechselt zur Vorschau-Version, eine Reihe von Artikeln werden im Hub angezeigt, und jetzt lesen Sie einen davon.



ZurĂĽck in die Gegenwart


Ich hoffe, dass nach dieser Tour klarer wurde, welche wunden Stellen das Ă–kosystem hatte und wie es sich entwickelte - in diesem Kontext ist es viel einfacher zu verstehen, was jetzt passiert.


10 Dinge, die Ryan Dahl an Node.JS bereut


Leider habe ich den Artikel mit der Ăśbersetzung des Berichts nicht sofort gefunden, daher werde ich sie hier kurz auflisten und hier kommentieren.


  1. Mangelnde Unterstützung für Versprechen zu Beginn der Reise . Ja, es wäre einfacher gewesen, wenn Ryan die Versprechen nicht eingehalten hätte, da sie eine zusätzliche Komplikation darstellen, die zu Beginn der Entwicklung des Knotens nicht aufgeht. Verlorene Zeit für all diese Callback-Hölle ist sicherlich schade - aber im Jahr 2019 haben alle vernünftigen Bibliotheken Versprechen als Hauptschnittstelle. Darüber hinaus versprechen auch Systembibliotheken endlich etwas.
  2. Sicherheit von Systemanrufen und Netzwerkanrufen. Einerseits - ja, es ist gut, wenn alles sicher ist. Andererseits ist unklar, wie sich der Knoten in dieser Hinsicht als schlechter als jedes andere Medium herausstellte.
  3. Erstellen Sie native Module mit GYP. Ja, wahrscheinlich war es überflüssig, aber wer könnte wissen, dass das Chrom sie verlassen würde. Nochmal - wenn das Chrom weg ist, können wir auch gehen ....
  4. Übermäßige package.json. NPM als Monopolregister. Das Argument über package.json ist etwas seltsam. Zum Beispiel sagt Ryan, dass es dort irgendeinen Müll wie eine Lizenz gibt. Aber wenn es nicht da wäre, wie könnten Sie schnell die Lizenzen der in Ihrem Projekt verwendeten Module herausfinden? Das Argument über NPM ist eher die Wahrheit, aber wir werden später genauer darauf eingehen.
  5. Knotenmodule. Die komplexe Auflösung von Abhängigkeiten funktioniert nicht wie in einem Browser. Ja das stimmt Stabile Abhängigkeiten begannen sich ohne Wunder nur auf die 4-5-Version von npm zu übertragen. Aber der Mechanismus funktioniert und Sie können erstaunliche Dinge tun - im Moment ist das in Ordnung. Was die Kompatibilität mit dem Browser anbelangt, wird es unabhängig von Ihrer Arbeit immer noch Stufen geben, in denen der Code verarbeitet wird, z. B. das Kompilieren und Sammeln von Bundles. Daher ist es unwahrscheinlich, dass Knotenmodule in diesem Kontext eine Bedeutung haben.
  6. Fordern Sie ohne Erweiterung und deren Unsicherheit . Ja, wahrscheinlich schlecht. Aber nicht genug, um es zu erwähnen ...
  7. index.js als unnötige Komplikation. Auch zu trivial und langweilig zu beschreiben.

Ăśbrigens, wohlgemerkt, ich sagte, dass Ryan 10 Dinge bedauert, aber nur 7 Punkte. Dies ist kein Fehler, ich habe seinen Bericht mehrmals ĂĽberprĂĽft und die Bewertungen des Berichts. Entweder war es ein komplizierter Witz ĂĽber die Verarbeitung von Zahlenwerten, oder Ryan war einfach zu schĂĽchtern, um drei weitere Punkte zu nennen ...


Aber alles klar, wir haben die Probleme verstanden und sind weitergefahren. Logischerweise hat Ryan in Deno beschlossen, alle Probleme von Node.JS zu beseitigen. Mal sehen, was mit ihm passiert ist.


Woraus besteht Deno?


  1. Deno ist in Rust geschrieben.
  2. Als Event-Loop verwendet Deno Tokio, das erneut in Rust geschrieben wurde.
  3. Deno unterstĂĽtzt ab Werk Typescript.
  4. Nun, der Code wird mit demselben V8 ausgefĂĽhrt, der die ganze Welt erfasst hat.

Auf den ersten Blick klingt es gut, aber schauen wir uns diese Punkte genauer an.


Rust . Nein, bitte verstehe mich richtig - ich glaube, dass Rust and Go wunderbare Sprachen sind, und ich bin aufrichtig froh, dass sie es sind. Sie ermöglichen es, Code auf niedriger Ebene schneller und sicherer als in C ++ zu schreiben. Es gibt jedoch eine Nuance - im besten Fall ist sie nicht langsamer als die Implementierung in C ++. Ich persönlich sehe es also nicht als sinnvoll an, eine vollständige Analogie von Systemsträngen und einer Ereignisschleife zu schreiben - es ist unwahrscheinlich, dass dies einen wirklichen Nutzen bringt, da dies Dinge sind, die irgendwann einfach den optimalen Zustand erreichen und tatsächlich nicht weiter optimiert werden.


TypeScript Wieder - ich habe nichts gegen TS. Es wird von einer Vielzahl von Unternehmen und Entwicklern eingesetzt und hat sich bereits bewährt. Aber Deno versteckt nur den Transpiler in der Binärdatei und den transpilierten Code in speziellen Verzeichnissen. Das heißt, unter der Haube ist alles gleich, und es gibt keinen Vorteil, außer der Ästhetik. Aber es gibt ein Minus - die Transpiler-Version ist fest an die Deno-Version genagelt. Ich bin mir nicht sicher, ob dies gut ist. Man kann sich leicht eine Situation vorstellen, in der Sie entweder den Transpiler oder die Laufzeit aktualisieren möchten. Aber nicht beides gleichzeitig.


So ist zwar nichts Leckeres zu sehen. Gehen wir weiter und schauen uns die Hauptfunktionen an.


Die Hauptunterschiede zwischen Deno und Node.JS


Deno verwendet keine npm. Es gibt keine zentrale Registrierung. Module werden per URL importiert. Kein package.json.


Das heißt, der Code sieht ungefähr so ​​aus:


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/de476972/


All Articles