Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.
10:04

Deno soll Node.js-Probleme beheben

Auf der JS-Conf EU 2018 teilte Entwickler Ryan Dahl ordentlich gegen Node.js aus. Das kennt er gut, schließlich ist er der Erfinder der serverseitigen Javascript-Laufzeitumgebung. Viele der Kritikpunkte sind daher ein Mea Culpa, seine neue Mission heißt Deno.

Node.js ist nach wie vor sehr beliebt, gerät aber aufgrund verschiedener Architektur-Entscheidungen auch immer wieder in die Kritik. Das weiß kaum einer besser als der Node.js-Urheber Ryan Dahl, der auf der Berliner JS-Conf EU 2018 einen Vortrag mit dem Titel „10 things I regret about Node.js“ hielt. Das Video ist auf Youtube zu sehen.

Darin streut Dahl Asche auf sein Haupt und will in einem neuen Projekt aus seinen Fehlern lernen. Ohne Frage, beginnt er seinen Vortrag, sei Node.js sehr erfolgreich geworden, habe eine Menge erreicht und entwickle sich noch weiter. Er sehe aber als Urheber der Software deren Designfehler um so deutlicher.

So bereut er beispielsweise, Promises 2009 eingeführt, aber Anfang 2010 wieder entfernt zu haben. Sie hätten die Implementierung von Async/Await deutlich vereinfacht. Die jetzigen Async-APIs würden „schlecht altern.“

Auch in Sachen Sicherheit habe er Fehler gemacht. Zwar sei V8 eine gute Security-Sandbox, aber Node selbst hätte einige Sicherheitsgarantien bieten können, die andere Programmiersprachen nicht mitbringen. Als Beispiel nennt er den Linter, der Zugriff auf den kompletten Rechner und das Netzwerk hat, aber das gilt auch für andere Node-Komponenten.

Buildsystem und NPM

Am schlimmsten sei aber das Buildsystem Gyp: Das Node-Projekt hatte es adaptiert, nachdem die V8-Entwickler, die auch an Chrome arbeiten, Gyp verwendeten. Doch weil die Chrome-Entwickler von Gyp auf GN wechselten, blieb das Node-Projekt einziger Nutzer von Gyp. Das aber verwendet laut Dahl eine Art Python-Version von Json. Ein Foreign Function Interface (FFI) sei eine mögliche Lösung für das Dilemma gewesen, diese habe er damals aber ignoriert.

Nicht zuletzt hält er das zentralisierte NPM-Repository für einen Fehler, in dem die Node-Module stecken. Auch „package.json“ sei ein Fehler gewesen, es enthalte zu viel Boilerplate-Code. Weiterhin nennt er den Algorithmus, um Node-Module aufzulösen, die fehlende Dateiendung „js“ beim Modulimport. Auch die „index.js“ bereut er, sie habe das Module-Ladesystem verkompliziert. Insgesamt gefalle ihm nicht, wie Node mit Usercode umgeht.

Deno zur Hilfe

Das Mea Culpa kam aber nicht aus heiterem Himmel. Node.js lasse sich dank seiner weiten Verbreitung nun nicht mehr fundamental umbauen. Dahl arbeitet jedoch an einer Node.js-Alternative namens Deno, die seiner Meinung nach in der Lage wäre, viele der Fehler von Node.js auszubügeln.

Bei Deno handelt es sich um eine sichere Typescript-Laufzeitumgebung auf V8-Basis. Oberstes Ziel sei die Sicherheit, mit Typescript setzt Dahl nun auf eine typsichere Javascript-Alternative. Deno will Javascript als sichere Sandbox verwenden. Nutzer müssen dann Skripten explizit erlauben, auf das Dateisystem oder Netzwerk zuzugreifen.

Native Funktionen lassen sich zudem nicht in V8 einbinden. Mit „send“ und „recv“ gibt es nur zwei native Funktionen, Systemaufrufe erfolgen über Protobuf-Serialisierungen. Auch das Modulsystem möchte er einfacher machen und den Typescript-Compiler direkt in die ausführbare Datei integrieren. Ohnehin will Dahl Deno als eine einzige ausführbare Datei ausliefern, mit so wenig Verlinkungen wie möglich.

Deno befindet sich noch in einem extrem frühen Stadium, einige künftige Entwicklungsrichtungen stehen noch nicht fest. So käme für die Nicht-Javascript-Teile neben Go auch Rust in Frage oder C++. Der bisherige Deno-Code ist auf Github zu finden, es dürfte spannend sein, zu beobachten, wie er sich in den nächsten Jahren entwickelt.

Der Beitrag Deno soll Node.js-Probleme beheben erschien zuerst auf Linux-Magazin.

Don't be the product, buy the product!

Schweinderl