Webentwicklung: Deno 1.0 soll Node.js als Framework für Skriptsprachen ersetzen
Der Erfinder von Node.js hat eine neue Laufzeitumgebung zur Webentwicklung mit JavaScript und TypeScript herausgebracht. Deno soll alte Designfehler wettmachen.
![Webentwicklung: Deno 1.0 soll Node.js als Framework für Skriptsprachen ersetzen](https://heise.cloudimg.io/width/610/q85.png-lossy-85.webp-lossy-85.foil1/_www-heise-de_/imgs/18/2/8/9/4/6/2/8/Deno_Dinoland_2020-05-14_123613-7f5bcf380905c422.png)
(Bild: Deno.Land)
- Silke Hahn
Vor rund zwei Jahren kündigte Ryan Dahl, der Erfinder von Node.js, eine neue, unabhängige JavaScript-Laufzeitumgebung an – heute ist Deno 1.0 veröffentlicht worden. Mit der neuen Laufzeitumgebung für JavaScript und TypeScript sollen die beiden Skriptsprachen außerhalb von Webbrowsern ausführbar sein. Deno soll Webentwicklern als Standalone-Werkzeug das reibungsfreie Skripten komplexer Funktionalitäten ermöglichen.
Grundgerüst ist in Rust verfasst
Dahl hatte Node.js im Jahr 2012 an seinen ehemaligen Kollegen Isaac Schlueter (damals Joyent, Inc.) übergeben, Schlueter übernahm für seinen Arbeitgeber die Leitung der Weiterentwicklung von Node.js. Bei der JSConf EU 2018 hielt Dahl einen Vortrag über Designfehler von Node.js ("10 Things I regret about Node.js") und gab bei der Gelegenheit den Startschuss für das neue Projekt Deno ab. Kompatibilität mit Node.js wurde von ihm nicht angestrebt, die neue Umgebung und ihr Modulsystem sollten eigenständig und etwas anders gestrickt sein.
Deno bleibt laut seinen Entwicklern weiterhin eine einzelne, ausführbare Datei, die wie ein Webbrowser externen Code aufrufen kann. Zusätzliche Konfigurationsdateien seien nicht nötig. Deno enthält als Primärkomponente ein Command-Line Interface (CLI), erstmals veröffentlicht mit Version 1.0. Das CLI ist laut Release Notes in Rust geschrieben und erlaubt wohl die Integration verschiedener Layer – das deno-core
crate sei der eigentliche Kern von Deno.
Die Rust-API soll an die C++-API der Virtuellen Maschine V8 anknüpfen, es handele sich dabei um ein "Zero-Cost-Binding": Objekte, die Rust aufruft, seien identisch mit denen, die Entwickler in C++ bearbeiten könnten. Der gesamte Quellcode für V8 sei im Rust-Crate enthalten. Abstraktionen von Rust (genannt Futures) seien ähnlich wie das Konzept der Promises bei JavaScript, die erst nach der Einführung von Node entstanden. In Deno rühren wohl alle Callbacks in der einen oder anderen Form von Promises her.
Sicherheit durch Ausführung in der Sandbox
Sicherheitsaspekte stehen bei der neuen Laufzeitumgebung offenbar im Zentrum, so wird Code wohl stets in einer abgesicherten Sandbox ausgeführt. So können Skripte aus Deno heraus nur auf einen begrenzten Bereich einwirken, nicht auf die Festplatte zugreifen, keine Netzwerkverbindungen herstellen oder unerlaubt sonstige potentiell bösartige Aktionen durchführen. Zwar stellt der Browser APIs zum Beispiel für den Kamerazugriff bereit, die Nutzer müssten aber vorab eine Genehmigung erteilen. Im Terminal funktioniert Deno offenbar ähnlich und erfordere ein zusätzliches Genehmigungs-Kommando für das Ausführen des Skripts.
Zu den APIs von JavaScript sei es vollständig kompatibel, und auch TypeScript unterstütze es, ohne zusätzliche Tools zu benötigen. Die Standardmodule für Deno sind offenbar in TypeScript geschrieben.
Webentwicklung mit dynamischen Skriptsprachen
An Node.js wird unterdessen von dessen Entwicklern ebenfalls weitergearbeitet: Nach einer zwischenzeitlichen Community-Abspaltung "io.js" (2014) wurde Node.js an die Node.js-Foundation übergeben, die es seither weiterentwickelt. Die Stiftung ging 2019 in der OpenJS-Foundation auf.
Weitere technische Details zu der neuen Laufzeitumgebung Deno stehen in den Release Notes. Dahls Rede über die Designfehler bei Node finden Interessierte auf YouTube.
[Update 14.05.2020: Ergänzungen zu Node.js in Abgrenzung zu Deno, Absatz zu dynamischen Skriptsprachen entfernt]
(sih)