Deno (software)
![]() | |
Originalautor (en) | Ryan Dahl |
---|---|
Entwickler (en) | Deno Land Inc[1] und Mitwirkende |
Erstveröffentlichung | 13. Mai 2018[2] |
Stabile Version | 1.24.0[3] ![]() |
Repository | Github |
Geschrieben in | Typoskript, JavaScript, Rost, C ++ (V8 -Bindungen) |
Betriebssystem | Linux, Mac OS, Microsoft Windows |
Typ | Laufzeitumgebung |
Lizenz | MIT -Lizenz[4][5] |
Webseite | Deno![]() |
Deno ist ein Laufzeit zum JavaScript, Typoskript, und WebAssembly das basiert auf dem V8 JavaScript -Engine und die Rost Programmiersprache. Deno wurde gemeinsam von erstellt von Ryan Dahl, der auch geschaffen hat Node.js.[6]
Deno übernimmt explizit die Rolle von Runtime und Paket-Manager innerhalb eines einzigen ausführbar, anstatt ein separates Paketmanagementprogramm zu benötigen.[7][8]
Geschichte
Deno wurde von Ryan Dahl in seinem Vortrag "10 Dinge, die ich über Node.js" in JSConf EU 2018 von Ryan Dahl angekündigt hat.[9] In seinem Vortrag erwähnte Dahl sein Bedauern über die ersten Entwurfsentscheidungen mit Node.js und konzentrierte sich auf seine Entscheidungen, nicht zu verwenden Versprechen in API Design, Verwendung des Legacy Build -Systems Gyp, node_modules und package.json, die Dateierweiterungen, magische Modulauflösung mit index.js und die Sandbox -Umgebung von V8 auslassen.[10] Er präsentierte schließlich den Prototyp von Deno und zielte darauf ab, Systemanrufbindungen durch Nachrichten zu erreichen Protokollpufferund um Befehlszeilenflags für bereitzustellen Zugangskontrolle.
Deno wurde ursprünglich in geschrieben gehen und verwendet Protokollpuffer Für die Serialisierung zwischen privilegierten (GO, mit Systemanrufzugriff) und nicht privilegierten (V8) Seiten.[11] GO wurde jedoch bald durch ersetzt durch Rost Aufgrund von Bedenken der Doppellaufzeit und Müllsammlung Druck.[12] Tokio wurde anstelle von vorgestellt libuv als asynchrone ereignisgesteuerte Plattform,[13] und Flatbuffer wurde für schneller, "Zero-Copy" -Serialisierung und -deserialisierung übernommen[14] Aber später im August 2019 wurde FlatBuffers entfernt[15] Nach der Veröffentlichung von Benchmarks, die im April 2019 einen signifikanten Aufwand der Serialisierung gemessen haben.[16]
Eine Standardbibliothek, die nach der Standardbibliothek von GO modelliert wurde, wurde im November 2018 erstellt, um umfangreiche Tools und Dienstprogramme bereitzustellen, wodurch das Problem der Explosion von Node.JS teilweise gelöst wird.[17]
Der offizielle Deno 1.0 wurde am 13. Mai 2020 freigelassen.[18]
Deno -Einsatz, inspiriert von Wolkenflare Arbeitskräfte,[19] wurde am 23. Juni 2021 freigelassen.[20] Die angekündigte Ankündigung am 4. Mai 2022 BETA 4 verbessert das Dashboard und fügt Abrechnungsfunktionen hinzu. Die allgemeine Verfügbarkeit des Deno -Einsatzes ist für das dritte Quartal von 2022 beäugt.[21]
Deno Fresh 1.0 wurde am 28. Juni 2022 angekündigt.[22] Es verfügt über ein neues volles Stack -Web -Framework für Deno, das Zero JavaScript an den Client sendet. Das Framework hat keinen Build -Schritt, der eine Reihenfolge der Größengrößenverbesserungen in den Bereitstellungszeiten ermöglicht.
Überblick
Deno zielt darauf ab, produktiv und sicher zu sein Scripting Umgebung für den modernen Programmierer.[7] Ähnlich wie node.js betont Deno ereignisgesteuerte Architektureine Reihe von einer Reihe von nicht blockierend Core -I/O -Dienstprogramme, zusammen mit ihren Blockierungsversionen. Deno könnte verwendet werden, um zu erstellen Webserverführen Sie wissenschaftliche Berechnungen durch usw. Deno IS durch Quelloffene Software unter dem MIT -Lizenz.[23]
Vergleich mit node.js
Deno und Node.js sind beide Runtimes basieren auf Google's V8 JavaScript Engine, der gleiche Motor in verwendet in Google Chrome. Sie beide haben intern Ereignisschleifen und sorgen Befehlszeilenschnittstellen zum Ausführen von Skripten und einer Vielzahl von Systemversorgungsunternehmen.
Deno weicht hauptsächlich von node.js in den folgenden Aspekten ab:[7]
- Unterstützt nur ES -Module wie Browser, bei denen Node.js beide ES -Module unterstützt und CommonJS. CommonJS -Unterstützung in Deno ist mit einer Kompatibilitätsschicht möglich.[24][25][26]
- Nur unterstützt URLs zum Laden lokaler oder entfernter Abhängigkeiten, ähnlich wie Browser. Node.js unterstützt beide URLs [27] und Module.
- Erfordert keinen Paketmanager für das Abholen von Ressourcen, daher ist keine Registrierung erforderlich NPM.[28]
- Unterstützt Typenkript außerhalb der Box,[29] Verwenden eines Schnappschreibers -Typs Compiler oder der SWC Compiler [30] mit Caching -Mechanismen.
- Ziel ist eine bessere Kompatibilität mit Browsern mit einer Vielzahl von Web -APIs.
- Beschränken Sie standardmäßig das Dateisystem und den Netzwerkzugriff, um Sandbox -Code auszuführen.
- Unterstützt eine einzelne API, um Versprechen zu verwenden, Es6 und TypeScript -Funktionen, während Node.js sowohl Versprechen- als auch Rückruf -APIs unterstützt.
- Minimiert die Kern -API -Größe und bietet gleichzeitig eine große Standardbibliothek ohne externe Abhängigkeiten.
- Verwendet Nachrichten, die Kanäle zum Aufrufen privilegierter System -APIs und Verwendung von Bindungen verwenden.
Finanzierung
Am 29. März 2021 wurde Deno Land Inc angekündigt, wobei sich Millionen von Dollar von einem Rückstand befinden Shasta Ventures, Mozilla Corporation und ein paar andere. Es wurde eingerichtet, um die Entwicklung von Deno zu fördern und den Benutzern ein kommerzielles Angebot zu bieten.[1]
Ein Jahr später kündigte Deno weitere 21 Millionen US -Dollar in der Serie -A -Finanzierung an, die von Sequoia Capital.[31]
Veröffentlichungen
Ausführung | Neueste Patch -Veröffentlichung | Veröffentlichungsdatum | Datum der letzten Patch -Veröffentlichung | Beschreibung |
---|---|---|---|---|
0,1,0 | 0,1.12 | 2018-08-23 | 2018-11-12 | Rost -Umschreiben und V8 Snapshot |
0.2.0 | 0.2.11 | 2018-11-27 | 2019-02-08 | Leicht nutzbar |
0.3.0 | 0.3.10 | 2019-02-18 | 2019-04-25 | Anstatt ein "Deno" -Modul zu importieren, gibt es jetzt eine globale Variable namens "Deno" namens "Deno". |
0.4.0 | 0.4.0 | 2019-05-03 | 2019-05-03 | - |
0.5.0 | 0.5.0 | 2019-05-11 | 2019-05-11 | - |
0,6,0 | 0,6,0 | 2019-05-20 | 2019-05-20 | - |
0,7,0 | 0,7,0 | 2019-05-29 | 2019-05-29 | - |
0,8,0 | 0,8,0 | 2019-06-08 | 2019-06-08 | - |
0.9.0 | 0.9.0 | 2019-06-15 | 2019-06-15 | - |
0,10.0 | 0,10.0 | 2019-06-25 | 2019-06-25 | - |
0.11.0 | 0.11.0 | 2019-07-06 | 2019-07-06 | - |
0,12.0 | 0,12.0 | 2019-07-16 | 2019-07-16 | - |
0,13.0 | 0,13.0 | 2019-07-31 | 2019-07-31 | - |
0,14,0 | 0,14,0 | 2019-08-09 | 2019-08-09 | - |
0,15,0 | 0,15,0 | 2019-08-13 | 2019-08-13 | - |
0,16,0 | 0,16,0 | 2019-08-22 | 2019-08-22 | - |
0,17,0 | 0,17,0 | 2019-09-04 | 2019-09-04 | - |
0,18,0 | 0,18,0 | 2019-09-13 | 2019-09-13 | - |
0,19,0 | 0,19,0 | 2019-09-24 | 2019-09-24 | - |
0.20.0 | 0.20.0 | 2019-10-06 | 2019-10-06 | - |
0,21,0 | 0,21,0 | 2019-10-19 | 2019-10-19 | - |
0,22,0 | 0,22,0 | 2019-10-28 | 2019-10-28 | - |
0,23.0 | 0,23.0 | 2019-11-04 | 2019-11-04 | - |
0,24,0 | 0,24,0 | 2019-11-14 | 2019-11-14 | - |
0,25,0 | 0,25,0 | 2019-11-26 | 2019-11-26 | - |
0,26,0 | 0,26,0 | 2019-12-05 | 2019-12-05 | - |
0,27,0 | 0,27,0 | 2019-12-18 | 2019-12-18 | - |
0,28,0 | 0,28,1 | 2020-01-02 | 2020-01-03 | - |
0,29,0 | 0,29,0 | 2020-01-09 | 2020-01-09 | - |
0,30,0 | 0,30,0 | 2020-01-17 | 2020-01-17 | - |
0,31,0 | 0,31,0 | 2020-01-24 | 2020-01-24 | - |
0,32,0 | 0,32,0 | 2020-02-03 | 2020-02-03 | - |
0,33,0 | 0,33,0 | 2020-02-13 | 2020-02-13 | - |
0,34,0 | 0,34,0 | 2020-02-20 | 2020-02-20 | - |
0,35,0 | 0,35,0 | 2020-02-28 | 2020-02-28 | - |
0,36,0 | 0,36,0 | 2020-03-11 | 2020-03-11 | - |
0,37,0 | 0,37,1 | 2020-03-23 | 2020-03-23 | - |
0,38,0 | 0,38,0 | 2020-03-28 | 2020-03-28 | - |
0,39,0 | 0,39,0 | 2020-04-03 | 2020-04-03 | - |
0,40,0 | 0,40,0 | 2020-04-08 | 2020-04-08 | - |
0,41,0 | 0,41,0 | 2020-04-16 | 2020-04-16 | - |
0,42.0 | 0,42.0 | 2020-04-29 | 2020-04-29 | - |
1.0.0 | 1.0.5 | 2020-05-13 | 2020-06-03 | Erste Produktionsveröffentlichung mit CLI, erstklassiger Typ-Support, Rost-APIs und Verbesserungen der HTTP-Serverleistung |
1.1.0 | 1.1.3 | 2020-06-12 | 2020-07-03 | Verschiedene Ergänzungen und Korrekturen an der CLI, Rost 1.44.0 |
1.2.0 | 1.2.3 | 2020-07-13 | 2020-08-08 | Verschiedene Ergänzungen und Korrekturen an der CLI |
1.3.0 | 1.3.3 | 2020-08-13 | 2020-09-04 | Verschiedene Ergänzungen ANF -Fixes in der CLI, verschiedene Verbesserungen der Deno -Sprache, TypeScript 3.9.7 |
1.4.0 | 1.4.6 | 2020-09-13 | 2020-10-10 | Neue Web -Standard -Websocket -API, automatische Neustarts in der Dateiänderung, integrierte Testabdeckung |
1.5.0 | 1.5.4 | 2020-10-27 | 2020-11-23 | Schnelleres Baumschütteln und Bündelung, refaktorierte Reply |
1.6.0 | 1.6.3 | 2020-12-08 | 2020-12-30 | Kompilieren Sie eigenständige Binärdateien über "Deno Compile", Support TypeScript 4.1, Experimentelle Unterstützung für MAC ARM64 |
1.7.0 | 1.7.5 | 2021-02-05 | 2021-02-19 | Cross Compilation und 60% kleinere Binärdateien für Deno Compile, eine DNS -Resolver -API, Unterstützung für Daten -URLs in Importanweisungen und Webarbeiter |
1.8.0 | 1.8.3 | 2021-03-02 | 2021-04-02 | Experimentelle Unterstützung für WebGPU-API, integrierte Internationalisierungs-APIs aktiviert, Unterstützung für das Abrufen privater Module, überarbeitete Deckungs-Tools, Unterstützung für Typscript 4.2 |
1.9.0 | 1.9.2 | 2021-04-13 | 2021-04-23 | Native HTTP/2 -Webserver, schnellere Anrufe mit serde_v8, BLOB -URL -Unterstützung und Verbesserungen zum Abrufen von API, importieren Abschlüsse in der LSP, interaktive Berechtigte Eingabeaufforderung |
1.10.0 | 1.10.2 | 2021-05-11 | 2021-05-17 | Verbesserungen des integrierten Testläufers, strukturierter Klonunterstützung in Webarbeitern, Webspeicher -API, Unterstützung für Remote -Importkarten |
1.11.0 | 1.11.3 | 2021-06-08 | 2021-06-29 | Offizielle Docker -Bilder, mehr Web Crypto API |
1.12.0 | 1.12.2 | 2021-07-13 | 2021-07-26 | Unterstützung für generateKey, signieren und verifizieren Sie Web -Crypto -APIs, native Support von WebSocket -Server, TypeScript -Unterstützung in Repl, Unterstützung für MessagePort und MessAgechannel |
1.13.0 | 1.13.2 | 2021-08-10 | 2021-08-23 | Native HTTP -Webserverstabilisierung, Unterstützung für self.structuredClone (), ABortSignal -Unterstützung, Unterstützung für Navigator |
1.14.0 | 1.14.3 | 2021-09-14 | 2021-10-04 | URLPATTERN, Dateisperr -APIs, gegenseitige TLS -Unterstützung in Fetch, TypeScript 4.4, URL -Analyse und STD/HTTP -Leistungsverbesserungen |
1.15.0 | 1.15.3 | 2021-10-12 | 2021-10-25 | Neue Krypto -APIs, Deno -Deinstallation Unterbefehl, verschachtelte Test -API, FFI -Verbesserungen, neues - Kompat -Flag für eine verbesserte Knotenkompatibilität |
1.16.0 | 1.16.4 | 2021-11-09 | 2021-12-03 | Fetch -Unterstützung für Datei -URLs, neue Instabilen Signal -Listener -API, Unterstützung für die Angabe eines Grund |
1.17.0 | 1.17.3 | 2021-12-16 | 2022-01-12 | Importbehandlungen und JSON -Module, Verbesserungen der Web -Kryptographie -API, Unref -Timer, instabile Unterstützung für die Verhandlung von ALPN, TypeScript 4.5 |
1.18.0 | 1.18.0 | 2022-01-20 | 2022-01-20 | Konfigurationsdatei Auto-Discovery, Abschluss der Web-Kryptographie-API, Stabilisierung der Testschritte API, FFI-Verbesserungen, LSP-Verbesserungen |
1.19.0 | 1.19.3 | 2022-02-17 | 2022-03-10 | Neue Abhängigkeit von Deno -Anbieter, Standardberechtigungsaufforderung, neue Webströme für Dateien, Netzwerkhöhlen und Stdio, Kompressionenstream und DekompresssionStream, besser |
1.20.1 | 1.20.6 | 2022-04-14 | 202-03-16 | Schnellere Anrufe in Rost, Auto-Kompression für HTTP-Antwortkörper, neue Unterbefehle (Deno-Bank, Deno-Aufgabe), Sicherheitsverbesserungen, strengere Standardeinstellungen in der programmatischen Genehmigung, Typecript 4.6, v8 10.0 |
1.21.0 | 1.21.3 | 2002.04-20 | 2022-05-12 | Verschiedene Verbesserungen der Deno -Sprache, der VSCODE -Erweiterung und der Repl. Verbesserungen des Deno -Tests |
1.22.0 | 1.22.3 | 2022-05-18 | 2022-06-09 | Aktualisiertes Standard -Überprüfungsverhalten, verschiedene Verbesserungen der Deno -Sprache, Aktualisierungen des Testläufers |
1.23.0 | 1.23.4 | 2022-06-15 | 2022-07-12 | Standardmäßig keine Typ-Überprüfung, verschiedene Verbesserungen der Deno-Sprache, erzwingen Sie eine neue Zeile in Repl, TypeScript 4.7 |
1.24.0 | 1.24.0 | 2022-07-210 | Typ -Prüf- und -ausgabe -Leistungsverbesserungen, verschiedene Verbesserungen der Deno -Sprache, Verbesserungen des Deno -Tests, Aktualisierungen der neuen Subprozess -API, LSP -Verbesserungen, Zugabe des SEMVER -Moduls | |
Legende: Alte Version Letzte Version Zukünftige Veröffentlichung |
Die obige Tabelle wurde unter Verwendung der offiziellen Releases -Seite erstellt.[32]
Beispiel
Dies führt ein grundlegendes Deno -Skript ohne Dateisystem oder Netzwerkberechtigungen aus (Sandkasten Modus):
Deno run main.ts
Explizite Flags sind erforderlich, um Berechtigungen zu aktivieren:
Deno Run --allow-Read-Allow-Net Main.ts
Verwenden Sie die Abhängigkeitsbaum des Skripts, um den Abhängigkeitsbaum zu inspizieren die Info
Unterbefehl:
Deno info Main.ts
Ein grundlegender Hallo Welt! Programm In Deno sieht es genauso aus wie in Node.js:
Konsole.Protokoll("Hallo Welt!");
Ein globaler Deno
Der Namespace enthält APIs, die im Browser nicht verfügbar sind. EIN Unix Katzenprogramm könnte wie folgt implementiert werden:
/ * cat.ts */ /* Deno -APIs werden über den "Deno` -Namespace" entlarvt. */ Const { Stdout, offen, Kopieren, Args } = Deno; // Warten auf Top-Level wird unterstützt zum (Lassen i = 0; i < Args.Länge; i++) { Const Dateiname = Args[i]; // erhält Befehlszeilenargumente. Const Datei = erwarten offen(Dateiname); // öffnet die entsprechende Datei zum Lesen. erwarten Kopieren(Datei, Stdout); // führt eine asynchrone Kopie von `file`` to` stdout` durch. }
Das Deno.Copy
Die oben verwendete Funktion funktioniert ähnlich wie Go's io.copy
, wo Stdout
(Standardausgabe) ist das Ziel Schriftsteller
, und Datei
ist die Quelle Leser
. Um dieses Programm auszuführen, müssen wir die Leserlaubnis an die ermöglichen Dateisystem:
Deno Run --alle les Cat.ts myfile
Das folgende Deno -Skript implementiert eine grundlegende HTTP -Server:
// Importiert `serve 'aus der Remote -Deno -Standardbibliothek mit URL. importieren { Dienen } aus "https://deno.land/[email protected]/http/server.ts"; // `serve` -Funktion gibt einen asynchronen Iterator zurück, der einen Strom von Anfragen ergibt zum erwarten (Const Req von Dienen({{ Hafen: 8000 }))) { Req.antworten({{ Karosserie: "Hallo Welt! \ N" }); }
Beim Ausführen dieses Programms lädt Deno die Remote -Standardbibliotheksdateien automatisch herunter und speichert sie durch und kompiliert den Code. Ebenso können wir ein Standard -Bibliothekskript ausführen (wie z. Dateiserver) Direkt ohne explizit herunterzuladen, indem Sie die URL als Eingabedateinamen bereitstellen (-EIN
schaltet alle Berechtigungen ein):
$ Deno run -a https://deno.land/std/http/file_server.tsDownload https://deno.land/std/http/file_server.ts Kompilieren Sie https://deno.land/std/http/file_server.ts ... HTTP -Server hören auf http://0.0.0.0:4500/
Verweise
- ^ a b Ryan Dahl, Bert Belder (2021-03-29). "Ankündigung der Deno -Firma".
- ^ "Mitwirkende, Denoland/Deno, Github". GitHub. Abgerufen 5. Juli 2019.
- ^ https://github.com/denoland/deno/releases/tag/v1.24.0; Veröffentlichungsdatum: 21. Juli 2022; Abgerufen: 24. Juli 2022.
- ^ "Deno/Lizenz bei Main". GitHub. Abgerufen 5. Juli 2019.
- ^ "Die MIT -Lizenz". Open Source Initiative. 17. September 2018. Abgerufen 17. September 2018.
- ^ "Deno: Secure V8 TypeScript -Laufzeit von Original Node.js Creator". Infoq. Abgerufen 2019-05-17.
- ^ a b c "Deno Handbuch". Deno.land. Abgerufen 2019-05-17.
- ^ Paul Krill (2018-06-21). "Ryan Dahls Knoten.js bedauert zu Deno". InfoWorld.
- ^ JSConf (2018-06-06), 10 Dinge, die ich über Node.js - Ryan Dahl - JSConf EU 2018 bereue, abgerufen 2019-05-17
- ^ Dahl, Ryan (2018-06-06). "Designfehler im Knoten" (PDF). Github.
- ^ "Denoland/Deno, Zweig" Golang "". Github.
- ^ "Vorschlag: Schauen Sie sich das Portieren auf Rost und verwenden Sie Tokio". GitHub.
- ^ "Tokio - Die asynchrone Laufzeit für die Rust -Programmiersprache". Tokio.rs.
- ^ "Protobuf scheint für diesen Anwendungsfall viel Overhead zu sein?". Github.
- ^ "Flatbuffers entfernen". GitHub.
- ^ "Flatbuffer ersetzen". GitHub.
- ^ "DENOLAND/DENO_STD: DENO Standardmodule". Github. 3. März 2022.
- ^ "Deno 1.0". Deno.land. Abgerufen 2020-05-14.
- ^ Dahl, Ryan (4. Mai 2022). "JavaScript -Container". TinyClouds.org. Archiviert von das Original am 4. Mai 2022.
- ^ Krill, Paul (2021-06-24). "Deno Company enthüllt den serverseitigen JavaScript-Hosting-Service". InfoWorld. Archiviert von das Original am 27. Juni 2022. Abgerufen 2022-04-14.
- ^ Krill, Paul (2022-06-03). "Deno -Bergbewegungen in Richtung GA, fügt bezahlten Plan hinzu". InfoWorld. Abgerufen 2022-07-24.
- ^ Luca, Casonato (2022-07-22). "Einführung frisch 1.0 als neuer Full Stack Web Framework für Deno". Deno Blog. Abgerufen 2022-07-24.
{{}}
: CS1 Wartung: URL-Status (Link) - ^ "Deno ist bereit für die Produktion". Infoq. Abgerufen 2020-07-01.
- ^ "Module: ECMascript -Module | Node.js v17.6.0 Dokumentation".
- ^ "Deno - Eine moderne Laufzeit für JavaScript und TypeScript".
- ^ https://deno.land/std/node/readme.md
- ^ "Module: ECMascript -Module | Node.js v17.6.0 Dokumentation".
- ^ "Deno - Eine moderne Laufzeit für JavaScript und TypeScript".
- ^ "Deno.js in der Produktion. Key Takeaways". Medium.com. Abgerufen 16. Mai 2022.
- ^ "Dokumentation". GitHub. 3. März 2022.
- ^ "Deno sammelt 21 Millionen Dollar". Deno.com. Archiviert von das Original am 22. Juni 2022.
- ^ "Veröffentlichungen". GitHub. 2020-12-30. Abgerufen 2021-01-14.