Deno ist eine radikal einfache Lauf­zeit­um­ge­bung für Ja­va­Script und Ty­pe­Script. Sie bietet ihren Usern einen neuen, einfachen Weg ser­ver­sei­tig Ja­va­Script und Ty­pe­Script zu schreiben. Die Plattform steht noch am Anfang ihrer Ent­wick­lung, stellt aber bereits im frühen Stadium unter Beweis, dass sie lang­fris­tig die alt­be­währ­te Node.js-Runtime ablösen könnte. Diesen Schritt muss dann al­ler­dings auch die Ja­va­Script-Ent­wick­ler-Community mitgehen.

Es gibt Produkte, die werden von der Community geliebt, obwohl sie nicht perfekt sind. Die Skript­spra­che Ja­va­Script ist dafür ein gutes Beispiel. Trotz klarer Defizite ist sie eine der weltweit meist ver­wen­de­ten Sprachen mit un­zäh­li­gen Frame­works und Bi­blio­the­ken. Auch Node.js, der Quasi-Vorgänger von Deno, erfreut sich in der Community großer Be­liebt­heit. Der ver­ant­wort­li­che Ent­wick­ler Ryan Dahl will mit seinem neuen Deno-Projekt von den alten Er­fah­run­gen mit Node.js pro­fi­tie­ren und eine neue, sicherere, bessere Plattform bieten. Ob und wie das funk­tio­niert, wird in diesem Artikel geklärt.

Domain kaufen
Re­gis­trie­ren Sie Ihre perfekte Domain
  • Inklusive 1 SSL-Wildcard-Zer­ti­fi­kat pro Vertrag
  • Inklusive Domain Lock
  • Inklusive Domain Connect für einfache DNS-Ein­rich­tung

Was ist Deno?

Deno befindet sich noch in seiner Frühphase. Schnitt­stel­len, Ar­chi­tek­tur- und De­sign­ent­schei­dun­gen sind noch nicht in Stein gemeißelt und werden sich si­cher­lich im Laufe der Ent­wick­lung ändern. In einigen Punkten ist deshalb ein direkter Vergleich mit dem oben erwähnten Node.js nur schwer möglich. Eine grobe Ge­gen­über­stel­lung hat der Ent­wick­ler beider Platt­for­men in folgendem YouTube-Video selbst vor­ge­nom­men:

Deno und Node liegen nicht nur na­ment­lich nah bei­ein­an­der. Auch ihre Grundidee ist die gleiche: Sie bieten eine Plattform zur Aus­füh­rung von Ja­va­Scripts abseits vom Browser und die Mög­lich­keit, ser­ver­sei­ti­ges Ja­va­Script – oder Ty­pe­Script – zu schreiben. Dafür bedienen sie sich bei ver­schie­de­nen, bereits vor­han­de­nen Projekten – sie sind also keine voll­stän­di­ge Ei­gen­im­ple­men­tie­rung. Für die Aus­füh­rung von Ja­va­Script in ver­schie­de­nen Um­ge­bun­gen kommt bei­spiels­wei­se stan­dard­mä­ßig die Google-Engine V8 zum Einsatz, die in den Browsern Chrome und Edge bereits in­te­griert ist. Ser­ver­sei­tig setzt Deno daher wie Node.js auf V8.

So viel zu den Ge­mein­sam­kei­ten, doch im Gegensatz zu Node, das mit C++ ge­schrie­ben ist, nutzt Deno die in­no­va­ti­ve und we­sent­lich sicherere Pro­gram­mier­spra­che Rust von Mozilla Research. Damit er­mög­licht Deno das direkte Schreiben von statisch ty­pi­sier­tem Code, was nahezu ein Al­lein­stel­lungs­merk­mal ist.

Die Features von Deno: Out of the box

Deno hat zwei Funk­tio­nen, die zu einer extremen Ver­ein­fa­chung des Workflows führen: Zum einen setzt die Lauf­zeit­um­ge­bung auf ein einfaches Mo­dul­sys­tem, bei dem URLs und Module in Eins-zu-eins-Kor­re­spon­denz stehen. Zum anderen er­mög­licht Deno, Ty­pe­Script-Codes frei aus­zu­füh­ren.

Mehr Freiheit für die Ent­wick­ler bedeutet in der Regel ein höheres Si­cher­heits­ri­si­ko bei der Anwendung. Deno ist in punkto Si­cher­heit aber sehr aus­ge­reift. Für ge­wöhn­lich werden Skripte in einer vom Be­triebs­sys­tem ab­ge­trenn­ten Sandbox aus­ge­führt. Ent­wick­ler haben begrenzt die Mög­lich­keit, weitere Funk­tio­nen hin­zu­zu­fü­gen.

Deno ist im Vergleich viel näher an die User-Ex­pe­ri­ence im Web angelehnt: Per Standard ist der Zugriff aufs System ver­rie­gelt und der User muss den Zugriff einer Ap­pli­ka­ti­on auf das System erst erlauben, an­dern­falls sind beide perfekt von­ein­an­der isoliert. Ver­gleich­bar ist das mit dem Verhalten eines Browsers, wenn bei­spiels­wei­se bei einer Web-Vi­deo­kon­fe­renz nach dem Zugriff auf die Webcam und das Mikrofon gefragt wird. Erst durch die Zu­stim­mung des Users kann auf die Res­sour­cen zu­rück­ge­grif­fen werden. Ver­ein­facht aus­ge­drückt verhält sich Deno wie ein Browser für Kom­man­do­zei­len-Skripte.

Ferner greift Deno den be­deu­tends­ten Trend in der Ja­va­Script-Ent­wick­lung auf: Die native Un­ter­stüt­zung von Ty­pe­Script.

Hinweis

Ty­pe­Script un­ter­schei­det sich von der Pro­gram­mier­spra­che Ja­va­Script vor allem im Feld der Ty­pi­sie­rung. Ja­va­Script lässt bei der Ty­pi­sie­rung von Variablen und Funk­tio­nen (zu) viel Freiheit. Hier werden keine Vorgaben erwartet, welcher Typ eine Variable sein oder eine Funktion ausgeben soll. Das erschwert das Lesen und Verstehen eines Codes. In Ty­pe­Script ist es Standard, jede Variable mit einem Typ zu versehen. Funktion und Ausgabe sind also bereits im Vorfeld typisiert. Eine feh­ler­haf­te Zuordnung wird außerdem sofort gemeldet.

Um den mit Deno ge­ne­rier­ten Ty­pe­Script-Code in Ja­va­Script um­zu­wan­deln und aus­zu­füh­ren, muss kein zu­sätz­li­cher Compiler-Schritt mehr gemacht werden. Immer, wenn Daten aus­ge­tauscht werden, passiert das in Paketen. Dem­zu­fol­ge braucht Deno kein externes Paket wie ts-node, das sich bei­spiels­wei­se in Node.js um den Com­pi­lie­rungs­pro­zess kümmert.

Auch beim Pa­ket­ma­nage­ment sorgt Deno für Über­ra­schun­gen: Einer der Er­folgs­fak­to­ren von Node ist der Pa­ket­ma­na­ger npm. npm gehört zwar grund­sätz­lich zur GitHub-Community und ist damit kein fester Be­stand­teil von Node, die Kom­bi­na­ti­on gilt aber als in­of­fi­zi­el­ler Standard. Deno hingegen kommt ganz ohne externen Pa­ket­ma­na­ger aus bzw. ist im Grunde sein eigener Pa­ket­ma­na­ger. Das Mo­dul­sys­tem kann Pakete über Da­tei­sys­tempfa­de oder URLs auflösen und die Res­sour­cen, die er­for­der­lich sind, direkt her­un­ter­la­den.

Wie funk­tio­niert Deno?

Deno steht gerade erst am Anfang. Der Fokus liegt klar auf der Si­cher­heit und auf den grund­le­gen­den Ar­chi­tek­tur­fra­gen. Das fängt schon bei der In­stal­la­ti­on an, die nicht bequem über ein Installer-Paket läuft, sondern aus­schließ­lich über GitHub bzw. Shell-Skripte oder den Pa­ket­ma­na­ger des Be­triebs­sys­tems zu erledigen ist. Um zu prüfen, ob die In­stal­la­ti­on er­folg­reich war, muss dann auch – ganz alte Schule – der Befehl deno - version in die Kom­man­do­zei­le ein­ge­ge­ben werden. Dadurch erhalten Sie aber auch gleich einen Ge­samt­über­blick der in­stal­lier­ten Deno-Version sowie der Versionen von V8 und Ty­pe­Script. Wer Deno nicht auf einem System in­stal­lie­ren will, kann es auch in einem Docker Container ein­rich­ten und ausführen.

Sobald Deno in­stal­liert ist, gibt es zwei Arten der Aus­füh­rung. Die Lauf­zeit­um­ge­bung kann entweder in­ter­ak­tiv als Shell oder mit einer Datei als Eingabe verwendet werden. Ersteres ist sinnvoll für kleinere An­wen­dun­gen – und zum Ex­pe­ri­men­tie­ren mit der Node.js-Al­ter­na­ti­ve. Letzteres ist die gängige Anwendung von Deno. Dabei wird der Name einer Datei an die Plattform übergeben und die Arbeit mit Deno kann beginnen.

Die bekannten Ja­va­Script-Keywords wie zum Beispiel import, export, promise usw. stehen in Deno direkt zur Verfügung und müssen nicht erst im­por­tiert werden. Neben den Standards bietet die Plattform ein globales Objekt, für das sich die Ent­wick­ler keinen eigenen Namen überlegt haben, weshalb es auch schlicht Deno heißt. Das Deno-Objekt bildet die Basis für jede Ap­pli­ka­ti­on. Es agiert als Schnitt­stel­le zum System – so können Ent­wick­ler zum Beispiel auf das Da­tei­sys­tem zugreifen und aus der Sandbox aus­bre­chen. Wie bereits oben erwähnt müssen diese Ausnahmen aktiv bestätigt werden, damit un­be­merk­te Angriffe von einer Ap­pli­ka­ti­on auf das System aus­ge­schlos­sen werden können.

Deno bietet alle Stan­dard­mo­du­le; aus der Community kommen darüber hinaus aber bereits weitere, ex­pe­ri­men­tel­le bis nützliche Zu­satz­mo­du­le, die den Funk­ti­ons­um­fang erweitern.

Deno: Vor-und Nachteile im Überblick

Ist bzw. wird Deno besser als Node? Der Ent­wick­ler Ryan Dahl ist davon überzeugt. Altlasten, Fehler und Kom­pro­mis­se sollen aus­ge­bü­gelt werden, um eine moderne, stabile und sichere Plattform für ser­ver­sei­ti­ges Ja­va­Script und Ty­pe­Script zu schaffen. Das Potenzial ist in jedem Fall da, ins­be­son­de­re dank dem Schritt, im Kern auf Mozillas Pro­gram­mier­spra­che Rust zu setzen und ein zentrales Be­rech­ti­gungs­sys­tem zu schaffen. Dieses lässt sich nicht nur intuitiv verwenden, sondern ver­hin­dert auch den un­er­wünsch­ten Ausbruch einer Ap­pli­ka­ti­on aus der Sandbox.

Der stark ver­ein­fach­te Ar­beits­ab­lauf hat (noch) seine Nachteile: Deno ist mit be­stehen­den Öko­sys­te­men nicht immer kom­pa­ti­bel. So läuft ein Node-Modul nicht einfach auch auf Deno – oder umgekehrt. Wenn sich die Plattform aber weiterhin bewährt, wird es lang­fris­tig wohl keine gra­vie­ren­den Kom­pa­ti­bi­li­täts­pro­ble­me mehr geben. Für Deno gibt es bei­spiels­wei­se schon jetzt eine mit Node kom­pa­ti­ble require-Funktion.

Fazit

Deno befindet sich noch im Pro­jekt­sta­tus. Die ersten Lösungen für einige der größten Schwächen von Node.js sind aber schon heute be­mer­kens­wert.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive
Zum Hauptmenü