Der Autor von Node.js hat die sichere JavaScript-Plattform Deno 1.0 vorgestellt.

Nach zwei Jahren Entwicklung wurde vorgestellt die erste bedeutende Version Deno 1.0, eine Plattform für die isolierte Ausführung von Anwendungen in den Sprachen JavaScript und TypeScript, die zur Erstellung von Server-Handlern verwendet werden kann. Die Plattform wird von Ryan Dahl entwickelt (Ryan Dahl), dem Schöpfer von Node.js. Wie bei Node.js wird in Deno die JavaScript-Engine genutzt, V8, die auch in Chromium-basierten Browsern verwendet wird. Dabei ist Deno kein Fork von Node.js, sondern ein komplett neu erstelltes Projekt. Der Code des Projekts wird unter der GPLv3-Lizenz bereitgestellt. steht unter der MIT-Lizenz. Die Builds werden sind für Linux, Windows und macOS verfügbar.

Die signifikante Versionsnummer hängt mit der Stabilisierung der APIs im Namensraum Deno zusammen, die für die Interaktion von Anwendungen mit dem Betriebssystem verantwortlich sind. Die Schnittstellen, die bisher nicht stabilisiert sind, standardmäßig verborgen und nur im "—unstable"-Modus verfügbar. Mit der Entwicklung neuer Versionen wird diese API schrittweise stabilisiert. Die API im globalen Namensraum, die allgemeine Funktionen wie setTimeout() und fetch() umfasst, ist so nah wie möglich an der API gewöhnlicher Webbrowser orientiert und entwickelt sich gemäß den Webstandards für Browser. Die bereitgestellten Rust-APIs, die direkt im Code der Plattform verwendet werden, sowie die Schnittstelle zur Entwicklung von Plugins für die Deno-Laufzeit sind derzeit noch nicht stabilisiert und werden weiterhin weiterentwickelt.

Die Schlüsselmotive für die Schaffung der neuen JavaScript-Plattform waren der Wunsch, konzeptionelle Fehler zu beseitigen, die in der Architektur von Node.js gemacht wurden, und den Benutzern eine sicherere Umgebung zu bieten. Um die Sicherheit zu erhöhen, wurde die Umhüllung um die V8-Engine in Rust geschrieben, was viele Schwachstellen vermeidet, die durch die niedrige Speicherarbeit entstehen, wie z.B. das Zugreifen auf Speicherbereiche nach deren Freigabe, das Dereferenzieren von Nullzeigern und das Überschreiten von Puffergrenzen. Für die Verarbeitung von Anfragen im nicht blockierenden Modus wird die Plattform Tokio, auch in der Programmiersprache Rust geschrieben. Tokio ermöglicht die Erstellung von leistungsstarken Anwendungen auf der Basis einer ereignisgesteuerten Architektur, die Multithreading und die asynchrone Verarbeitung von Netzwerk-Anfragen unterstützen.

Haupt Eigenschaften Deno:

  • Sicherheitsorientierte Voreinstellungen. Zugriffe auf Dateien, Netzwerkfunktionalitäten und Umgebungsvariablen sind standardmäßig blockiert und erfordern eine explizite Aktivierung. Anwendungen werden in isolierten Sandbox-Umgebungen ausgeführt und haben ohne ausdrückliche Berechtigungen keinen Zugriff auf Systemfunktionen;
  • Eingebaute Unterstützung für die Programmiersprache TypeScript neben JavaScript. Der standardmäßige TypeScript-Compiler wird zur Typprüfung und zur Generierung von JavaScript verwendet, was zu einem Leistungsabfall im Vergleich zum JavaScript-Parsing in V8 führt. Zukünftig wird eine eigene Implementierung des TypeScript-Typprüfsystems geplant, die die Verarbeitungsgeschwindigkeit von TypeScript erheblich steigern wird.
  • Die Runtime wird als eine einzige, selbständige ausführbare Datei („deno“) bereitgestellt. Für den Einsatz von Deno zur Ausführung von Anwendungen ist es ausreichend, heruntergeladen werden Für seine Plattform gibt es eine ausführbare Datei mit einer Größe von etwa 20 MB, die keine externen Abhängigkeiten hat und keine besondere Installation im System erfordert. Dabei ist Deno keine monolithische Anwendung, sondern eine Sammlung von Crate-Paketen in Rust (deno_core, rusty_v8), die einzeln verwendet werden können;
  • Beim Starten des Programms sowie zum Laden von Modulen kann die Adressierung über URLs verwendet werden. Zum Beispiel kann das Programm welcome.js mit dem Befehl „deno https://deno.land/std/examples/welcome.js“ gestartet werden. Der Code von externen Ressourcen wird auf dem lokalen System heruntergeladen und zwischengespeichert, jedoch nie automatisch aktualisiert (für ein Update muss die Anwendung ausdrücklich mit dem Flag „—reload“ gestartet werden);
  • Effiziente Verarbeitung von HTTP-Netzwerkanfragen ist die Plattform ausgelegt auf die Erstellung von hochperformanten Netzwerk-Anwendungen;
  • Die Möglichkeit zur Erstellung universeller Webanwendungen, die sowohl in Deno als auch in einem regulären Webbrowser ausgeführt werden können;
  • Vorhandensein von Standardmodulsammlung, deren Nutzung keine Bindung an externe Abhängigkeiten erfordert. Module aus der Standardkollektion wurden einer zusätzlichen Prüfung und Kompatibilitätskontrolle unterzogen;
  • Neben der Runtime-Plattform Deno fungiert auch als Paketmanager und ermöglicht es, in Code auf Module über URL zuzugreifen. Zum Beispiel kann zum Laden eines Moduls im Code «import * as log from «https://deno.land/std/log/mod.ts» angegeben werden. Dateien, die von externen Servern über URL geladen werden, werden zwischengespeichert. Die Versionsbindung von Modulen erfolgt durch Angabe der Versionsnummern innerhalb der URL, wie zum Beispiel «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
  • In das System ist ein Abhängigkeitsinspektionssystem integriert (Befehl „deno info“) sowie ein Tool zur Codeformatierung (deno fmt);
  • Alle Anwendungsskripte können in eine einzige JavaScript-Datei zusammengefasst werden.

Unterschiede zu Node.js:

  • Deno verwendet keinen Paketmanager npm
    und ist nicht an Repositories gebunden, die Adressierung von Modulen erfolgt über URL oder Dateipfad, und die Module können auf jeder Website gehostet werden;
  • In Deno wird «package.json» nicht zur Definition von Modulen verwendet;
  • Unterschiede in der API, alle asynchronen Vorgänge in Deno geben ein Promise zurück;
  • Deno erfordert die explizite Angabe aller benötigten Berechtigungen für Dateien, Netzwerk und Umgebungsvariablen;
  • Alle Fehler ohne Handler führen zum sofortigen Abbruch der Anwendung;
  • In Deno wird das ECMAScript-Modulsystem verwendet und require() wird nicht unterstützt.
  • Der eingebaute HTTP-Server von Deno ist in TypeScript geschrieben und läuft auf nativen TCP-Sockets, während der HTTP-Server von Node.js in C geschrieben ist und Bindungen für JavaScript bereitstellt. Die Entwickler von Deno haben sich darauf konzentriert, die gesamte TCP-Socket-Schicht zu optimieren und eine allgemeinere Schnittstelle bereitzustellen. Der HTTP-Server von Deno hat zwar eine geringere Durchsatzrate, garantiert jedoch vorhersehbar niedrige Latenzen. Beispielsweise konnte eine einfache Anwendung basierend auf dem Deno HTTP-Server 25.000 Anfragen pro Sekunde mit einer maximalen Latenz von 1,3 Millisekunden verarbeiten. In Node.js konnte eine ähnliche Anwendung 34.000 Anfragen pro Sekunde verarbeiten, jedoch schwankten die Latenzen zwischen 2 und 300 Millisekunden.
  • Deno ist nicht mit Paketen für Node.js (NPM) kompatibel, entwickelt sich jedoch unabhängig. Schicht Für die Kompatibilität mit der Standardbibliothek von Node.js, sodass im Laufe der Entwicklung von Deno immer mehr Anwendungen, die für Node.js geschrieben wurden, ausgeführt werden können.
  • Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster