Projektveröffentlichung , eine Plattform ähnlich Node.js für die isolierte Ausführung von Anwendungen in JavaScript und TypeScript, die zur Ausführung von Anwendungen ohne Browserbindung verwendet werden kann, beispielsweise zur Erstellung von Server-Handlern. Deno verwendet die JavaScript-Engine , die auch in Node.js und Chromium-basierten Browsern verwendet wird. Der Projektcode ist unter der MIT-Lizenz. Das Projekt wird von Ryan Dahl () entwickelt, dem Schöpfer der JavaScript-Plattform Node.js.
Eines der Hauptziele bei der Erstellung einer neuen Laufzeit für JavaScript besteht darin, eine sicherere Umgebung bereitzustellen. Um die Sicherheit zu erhöhen, ist die Umhüllung um die V8-Engine in Rust geschrieben, was viele Verwundbarkeiten vermeiden hilft, die durch niedrigstufige Arbeit mit dem Speicher entstehen, wie z. B. der Zugriff auf Speicherbereiche nach deren Freigabe, das Dereferenzieren von Nullzeigern und Pufferüberläufe. Für die Verarbeitung von Anfragen wird eine nicht blockierende Plattform verwendet. , 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 Deno:
- Sicherheitsorientierung in der Standardkonfiguration. Dateizugriffe, Netzwerkfähigkeiten und der Zugriff auf Umgebungsvariablen sind standardmäßig blockiert und müssen ausdrücklich aktiviert werden;
- Integrierte Unterstützung für TypeScript neben JavaScript;
- 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, eine ausführbare Datei für die eigene Plattform, die etwa 10 MB groß ist, keine externen Abhängigkeiten hat und keine besondere Installation im System erfordert;
- 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;
- 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 Werkzeug zur Codeformatierung (deno fmt).
- Für Anwendungsentwickler ein Satz standardisierter Module, die einer zusätzlichen Prüfung und Kompatibilitätsüberprüfung unterzogen wurden;
- 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.
Quelle: opennet.ru
