Der Autor von Node.js stellte die sichere JavaScript-Plattform Deno 1.0 vor

Nach zwei Jahren Entwicklungszeit eingereicht erste große Veröffentlichung Gib mir 1.0, eine Plattform zur eigenständigen Ausführung von Anwendungen in JavaScript und TypeScript, mit der Handler erstellt werden können, die auf dem Server ausgeführt werden. Die Plattform wurde von Ryan Dahl entwickelt (Ryan Dahl), Schöpfer von Node.js. Wie Node.js verwendet Deno eine JavaScript-Engine V8, das auch in Chromium-basierten Browsern verwendet wird. Gleichzeitig ist Deno kein Fork von Node.js, sondern ein neues Projekt, das von Grund auf neu erstellt wurde. Projektnummer vertrieben von unter MIT-Lizenz. Versammlungen bereit für Linux, Windows und macOS.

Die signifikante Versionsnummer hängt mit der Stabilisierung der APIs im Deno-Namespace zusammen, die für die Interaktion von Anwendungen mit dem Betriebssystem verantwortlich sind. Softwareschnittstellen, die bisher vorhanden sind nicht stabilisiertsind standardmäßig ausgeblendet und nur verfügbar, wenn sie im „--unstable“-Modus ausgeführt werden. Wenn neue Versionen erstellt werden, werden solche APIs nach und nach stabil. Die API im globalen Namensraum, die gängige Funktionen wie setTimeout() und fetch() umfasst, kommt der API herkömmlicher Webbrowser möglichst nahe und wird gemäß Webstandards für Browser entwickelt. Die von Rust bereitgestellten APIs, die direkt im Plattformcode verwendet werden, sowie die Schnittstelle zur Entwicklung von Plugins für die Deno-Laufzeit sind noch nicht stabilisiert und werden weiterentwickelt.

Die Hauptmotive für die Schaffung einer neuen JavaScript-Plattform waren der Wunsch, konzeptionelle Fehler zu beseitigen, zugelassen in die Node.js-Architektur integrieren und Benutzern eine sicherere Umgebung bieten. Um die Sicherheit zu verbessern, ist die V8-Engine in Rust geschrieben, wodurch viele der Schwachstellen vermieden werden, die durch Speichermanipulation auf niedriger Ebene entstehen, wie z. B. After-Free-Zugriff, Nullzeiger-Dereferenzierung und Pufferüberläufe. Die Plattform dient der Bearbeitung von Anfragen im nicht blockierenden Modus Tokyo, ebenfalls in Rust geschrieben. Mit Tokio können Sie leistungsstarke Anwendungen erstellen, die auf einer ereignisgesteuerten Architektur basieren, Multithreading unterstützen und Netzwerkanforderungen im asynchronen Modus verarbeiten.

Haupt- eigenschaften Deno:

  • Sicherheitsorientierte Standardkonfiguration. Dateizugriff, Netzwerk und Zugriff auf Umgebungsvariablen sind standardmäßig deaktiviert und müssen explizit aktiviert werden. Anwendungen werden standardmäßig in isolierten Sandbox-Umgebungen ausgeführt und können nicht auf Systemfunktionen zugreifen, ohne explizite Berechtigungen zu erteilen.
  • Integrierte Unterstützung für TypeScript über JavaScript hinaus. Der Standard-TypeScript-Compiler wird zum Überprüfen von Typen und zum Generieren von JavaScript verwendet, was zu einem Leistungseinbruch im Vergleich zum JavaScript-Parsing in V8 führt. In Zukunft planen wir, eine eigene Implementierung des TypeScript-Typprüfungssystems vorzubereiten, die die TypeScript-Verarbeitungsleistung um eine Größenordnung verbessern wird;
  • Die Laufzeit liegt in Form einer einzelnen, eigenständigen ausführbaren Datei („deno“) vor. Es reicht aus, Anwendungen mit Deno auszuführen hochladen Für seine Plattform gibt es eine ausführbare Datei mit einer Größe von etwa 20 MB, die keine externen Abhängigkeiten aufweist und keine spezielle Installation auf dem System erfordert. Darüber hinaus ist deno keine monolithische Anwendung, sondern eine Sammlung von Crate-Paketen in Rust (deno_core, rusty_v8), die separat verwendet werden können;
  • Beim Starten des Programms sowie beim Laden von Modulen können Sie die URL-Adressierung nutzen. Um beispielsweise das Programm „welcome.js“ auszuführen, können Sie den Befehl „deno https://deno.land/std/examples/welcome.js“ verwenden. Code von externen Ressourcen wird heruntergeladen und auf dem lokalen System zwischengespeichert, aber nie automatisch aktualisiert (die Aktualisierung erfordert die explizite Ausführung der Anwendung mit dem Flag „--reload“);
  • Effiziente Verarbeitung von Netzwerkanfragen über HTTP in Anwendungen; die Plattform ist für die Erstellung leistungsstarker Netzwerkanwendungen konzipiert;
  • Die Möglichkeit, universelle Webanwendungen zu erstellen, die sowohl in Deno als auch in einem normalen Webbrowser ausgeführt werden können;
  • Verfügbarkeit Standardsatz von Modulen, deren Verwendung keine Bindung an externe Abhängigkeiten erfordert. Module aus der Standardsammlung wurden zusätzlichen Audit- und Kompatibilitätstests unterzogen;
  • Zusätzlich zur Laufzeit fungiert die Deno-Plattform auch als Paketmanager und ermöglicht den Zugriff auf Module per URL innerhalb des Codes. Um beispielsweise ein Modul zu laden, können Sie im Code „import * as log from „https://deno.land/std/log/mod.ts“ angeben. Über die URL von externen Servern heruntergeladene Dateien werden zwischengespeichert. Die Bindung an Modulversionen wird durch die Angabe von Versionsnummern innerhalb der URL bestimmt, zum Beispiel „https://unpkg.com/“[E-Mail geschützt] /dist/liltest.js";
  • Die Struktur umfasst ein integriertes Abhängigkeitsprüfsystem (den Befehl „deno info“) und ein Dienstprogramm zur Codeformatierung (deno fmt);
  • Alle Anwendungsskripte können in einer JavaScript-Datei zusammengefasst werden.

Unterschiede zu Node.js:

  • Deno verwendet keinen npm-Paketmanager
    und ist nicht an Repositorys gebunden, Module werden über eine URL oder einen Dateipfad angesprochen und die Module selbst können auf jeder Website platziert werden;
  • Deno verwendet „package.json“ nicht zum Definieren von Modulen;
  • API-Unterschied: Alle asynchronen Aktionen in Deno geben ein Versprechen zurück.
  • Deno erfordert eine explizite Definition aller erforderlichen Berechtigungen für Dateien, Netzwerk- und Umgebungsvariablen;
  • Alle Fehler, die nicht mit Handlern versehen sind, führen zum Abbruch der Anwendung;
  • Deno verwendet das ECMAScript-Modulsystem und unterstützt require();
  • Der integrierte HTTP-Server von Deno ist in TypeScript geschrieben und läuft auf nativen TCP-Sockets, während der HTTP-Server Node.js in C geschrieben ist und Bindungen für JavaScript bereitstellt. Die Entwickler von Deno haben sich auf die Optimierung der gesamten TCP-Socket-Schicht und die Bereitstellung einer allgemeineren Schnittstelle konzentriert. Deno HTTP Server bietet einen geringeren Durchsatz, garantiert aber eine vorhersehbar niedrige Latenz. Im Test konnte beispielsweise eine einfache Anwendung auf Basis des Deno-HTTP-Servers 25 Anfragen pro Sekunde mit einer maximalen Latenz von 1.3 Millisekunden verarbeiten. In Node.js verarbeitete eine ähnliche Anwendung 34 Anfragen pro Sekunde, die Latenzen lagen jedoch zwischen 2 und 300 Millisekunden.
  • Deno ist nicht mit Paketen für Node.js (NPM) kompatibel, wird aber separat entwickelt Zwischenschicht Aus Gründen der Kompatibilität mit der Standard-Node.js-Bibliothek werden im Laufe der Entwicklung immer mehr Anwendungen, die für Node.js geschrieben wurden, in Deno ausgeführt werden können.
  • Source: opennet.ru

Kommentar hinzufügen