Английская Википедия:Deno (software)
Шаблон:Short description Шаблон:Infobox software
Deno Шаблон:IPAc-en[1] is a runtime for JavaScript, TypeScript, and WebAssembly that is based on the V8 JavaScript engine and the Rust programming language. Deno was co-created by Ryan Dahl, who also created Node.js.[2]
Deno explicitly takes on the role of both runtime and package manager within a single executable, rather than requiring a separate package-management program.[1][3]
History
Deno was announced at JSConf EU 2018 by Ryan Dahl in his talk "10 Things I Regret About Node.js".[4] In his talk, Dahl mentioned his regrets about the initial design decisions with Node.js, focusing on his choices of not using promises in API design, usage of the legacy build system GYP, node_modules and package.json, leaving out file extensions, magical module resolution with index.js and breaking the sandboxed environment of V8.[5] He eventually presented the prototype of Deno, aiming to achieve system call bindings through message passing with serialization tools such as Protocol Buffers, and to provide command line flags for access control.
Deno was initially written in Go and used Protocol Buffers for serialization between privileged (Go, with system call access) and unprivileged (V8) sides.[6] However, Go was soon replaced with Rust due to concerns of double runtime and garbage collection pressure.[7] Tokio was introduced in place of libuv as the asynchronous event-driven platform,[8] and FlatBuffers was adopted for faster, "zero-copy" serialization and deserialization[9] but later in August 2019, FlatBuffers was removed[10] after publishing benchmarks that measured a significant overhead of serialization in April 2019.[11]
A standard library, modeled after Go's standard library, was created in November 2018 to provide extensive tools and utilities, partially solving Node.js' dependency tree explosion problem.[12]
The official Deno 1.0 was released on May 13, 2020.[13]
Deno Deploy, inspired by Cloudflare Workers,[14] was released on June 23, 2021.[15] Announced May 4, 2022 Beta 4 improves the dashboard and adds billing functionality. General availability of Deno Deploy is eyed for the third quarter of 2022.[16]
Deno Fresh 1.0 was announced June 28, 2022.[17] It features a new full stack web framework for Deno that sends zero JavaScript to the client. The framework has no build step which allows for an order of magnitude improvements in deployment times. Version 1.1 was released September 8, 2022.[18]
Deno SaaSKit beta was announced April 4, 2023.[19] It is an open-source, modern SaaS template built with Fresh and Deno.
Overview
Deno aims to be a productive and secure scripting environment for the modern programmer.[1] Similar to Node.js, Deno emphasizes event-driven architecture, providing a set of non-blocking core I/O utilities, along with their blocking versions. Deno could be used to create web servers, perform scientific computations, etc. Deno is open source software under the MIT License.[20]
Comparison with Node.js
Deno and Node.js are both runtimes built on the V8 JavaScript engine developed by the Chromium Project, the engine used for Chromium and Google Chrome web browsers. They both have internal event loops and provide command-line interfaces for running scripts and a wide range of system utilities.
Deno mainly deviates from Node.js in the following aspects:[1]
- Supports only ES Modules like browsers where Node.js supports both ES Modules and CommonJS. CommonJS support in Deno is possible by using a compatibility layer.[21][22]
- Supports URLs for loading local or remote dependencies, similar to browsers, and uses module specifiers like
npm:
andnode:
to import NPM or polyfill Node.JS modules. Node.js supports both URLs [23] and modules. - Does not require a package manager for resource fetching, thus no need for a registry like npm.[24]
- Supports TypeScript out of the box,[25] using a snapshotted TypeScript compiler or the swc compiler [26] with caching mechanisms.
- Aims for better compatibility with browsers with a wide range of Web APIs.
- Restricts file system and network access by default in order to run sandboxed code.
- Supports a single API to utilize promises, ES6 and TypeScript features whereas Node.js supports both promise and callback APIs.
- Minimizes core API size, while providing a large standard library with no external dependencies.
- Uses message passing channels for invoking privileged system APIs and using bindings.
Funding
On March 29, 2021, Deno Land Inc was announced, with backing in millions of dollars from Shasta Ventures, Mozilla Corporation and a few others. It was established to further the development of Deno and provide a commercial offering to users.[27]
A year on, Deno announced a further $21 million in Series A funding led by Sequoia Capital.[28]
Release history
The tables below were created using the official Releases page.[29]
Deno
Version | Latest patch release | Release date | Date of last patch release | Description |
---|---|---|---|---|
Шаблон:Version | Шаблон:Version | 2018-08-23 | 2018-11-12 | Rust rewrite and V8 snapshot |
Шаблон:Version | Шаблон:Version | 2018-11-27 | 2019-02-08 | Mildly usable |
Шаблон:Version | Шаблон:Version | 2019-02-18 | 2019-04-25 | Instead of importing a "deno" module, there is now a global variable called "Deno" |
Шаблон:Version | Шаблон:Version | 2020-05-13 | 2020-06-03 | Initial production release with CLI, first-class TypeScript Support, Rust APIs and improvements in HTTP server performance |
Шаблон:Version | Шаблон:Version | 2020-06-12 | 2020-07-03 | Various additions and fixes to the CLI, Rust 1.44.0 |
Шаблон:Version | Шаблон:Version | 2020-07-13 | 2020-08-08 | Various additions and fixes to the CLI |
Шаблон:Version | Шаблон:Version | 2020-08-13 | 2020-09-04 | Various additions and fixes to the CLI, various improvements to the Deno language, TypeScript 3.9.7 |
Шаблон:Version | Шаблон:Version | 2020-09-13 | 2020-10-10 | New web standard WebSocket API, automatic restarts on file change, integrated test coverage |
Шаблон:Version | Шаблон:Version | 2020-10-27 | 2020-11-23 | Faster tree-shaking and bundling, refactored REPL |
Шаблон:Version | Шаблон:Version | 2020-12-08 | 2020-12-30 | Compile standalone binaries via "deno compile", support TypeScript 4.1, experimental support for Mac ARM64 |
Шаблон:Version | Шаблон:Version | 2021-02-05 | 2021-02-19 | Cross compilation and 60% smaller binaries for deno compile, a DNS resolver API, support for data URLs in import statements and web workers |
Шаблон:Version | Шаблон:Version | 2021-03-02 | 2021-04-02 | Experimental support for WebGPU API, built-in internationalization APIs enabled, support for fetching private modules, revamped coverage tooling, support for TypeScript 4.2 |
Шаблон:Version | Шаблон:Version | 2021-04-13 | 2021-04-23 | Native HTTP/2 web server, Faster calls into Rust with serde_v8, Blob URL support & improvements to fetch api, Import completions in the LSP, Interactive permission prompt |
Шаблон:Version | Шаблон:Version | 2021-05-11 | 2021-05-17 | Improvements to the built in test runner, structured clone support in Web Workers, Web Storage API, support for remote import maps |
Шаблон:Version | Шаблон:Version | 2021-06-08 | 2021-06-29 | Official docker images, more web crypto APIs added, BroadcastChannel, abortable fetch, deno lint stabilized |
Шаблон:Version | Шаблон:Version | 2021-07-13 | 2021-07-26 | Support for generateKey, sign and verify web crypto APIs, native WebSocket server support, TypeScript support in REPL, support for MessagePort and MessageChannel |
Шаблон:Version | Шаблон:Version | 2021-08-10 | 2021-08-23 | Native HTTP web server stabilization, support for self.structuredClone(), AbortSignal support, support for navigator.hardwareConcurrency API, experimental WebSocketStream API, FFI replaces native plugin system |
Шаблон:Version | Шаблон:Version | 2021-09-14 | 2021-10-04 | URLPattern, file locking APIs, mutual TLS support in fetch, TypeScript 4.4, URL parsing and std/http performance improvements |
Шаблон:Version | Шаблон:Version | 2021-10-12 | 2021-10-25 | New crypto APIs, deno uninstall subcommand, nested testing API, FFI improvements, new—compat flag for improved Node compatibility |
Шаблон:Version | Шаблон:Version | 2021-11-09 | 2021-12-03 | Fetch support for file URLs, new unstable signal listener API, support for specifying a reason when aborting an AbortSignal, improvements to Web Streams API, findLast and findLastIndex array methods, Deno to npm package build tool |
Шаблон:Version | Шаблон:Version | 2021-12-16 | 2022-01-12 | Import assertions and JSON modules, improvements to the Web Cryptography API, unref timers, unstable support for negotiating ALPN, TypeScript 4.5 |
Шаблон:Version | Шаблон:Version | 2022-01-20 | 2022-01-20 | Config file auto-discovery, completion of Web Cryptography API, stabilization of test steps API, FFI improvements, LSP improvements |
Шаблон:Version | Шаблон:Version | 2022-02-17 | 2022-03-10 | New Deno vendor dependency, default permission prompt, new web streams for files, network sockets and stdio, CompressionStream and DecompressionStream supported, better errors for ops and resource sanistizers, improved console log |
Шаблон:Version | Шаблон:Version | 2022-04-14 | 2022-03-16 | Faster calls into Rust, auto-compression for HTTP response bodies, new subcommands (deno bench, deno task), security improvements, stricter defaults in programmatic permission, TypeScript 4.6, V8 10.0 |
Шаблон:Version | Шаблон:Version | 2022-04-20 | 2022-05-12 | Various improvements to the Deno language, VSCode extension, and REPL. Improvements in Deno Test |
Шаблон:Version | Шаблон:Version | 2022-05-18 | 2022-06-09 | Updated default type checking behavior, various improvements to the Deno language, updates to the test runner |
Шаблон:Version | Шаблон:Version | 2022-06-15 | 2022-07-12 | No type-checking by default, various improvements to the Deno language, force a new line in REPL, TypeScript 4.7 |
Шаблон:Version | Шаблон:Version | 2022-07-20 | 2022-08-11 | Type checking and emitting performance improvements, various improvements to the Deno language, Deno Test improvements, Updates to the new subprocess API, LSP improvements, addition of semver module |
Шаблон:Version | Шаблон:Version | 2022-08-24 | 2022-09-22 | deno init subcommand, experimental npm support, new HTTP server API, improvements to startup time, FFI API improvements |
Шаблон:Version | Шаблон:Version | 2022-09-29 | 2022-10-17 | Cache Web API, WebCrypto Secure Curves, --allow-sys permission flag, improvements to npm and Node.JS support, improvements to Deno.serve() API, improved module download UI, developer experience improvement, TypeScript 4.8 |
Шаблон:Version | Шаблон:Version | 2022-10-27 | 2022-11-08 | Major IDE improvements, Improvements to npm compatibility, navigator.language Web API, Improvements to deno task, Upgrade checker, Changes to Deno APIs, Updates to deno lint, V8 10.8, Node.js compatibility improvements, Changes to standard library APIs |
Шаблон:Version | Шаблон:Version | 2022-11-13 | 2022-12-01 | Various fixes and feature stabilisations, NPM package importer, auto discovery of the lock file, V8 10.9 |
Шаблон:Version | Шаблон:Version | 2022-12-14 | 2023-01-16 | npm compatibility improvements, REPL changes, Quality of life improvements, Changes to Deno APIs, TypeScript 4.9, Changes to the standard modules |
Шаблон:Version | Шаблон:Version | 2023-01-26 | 2023-02-07 | Support for built-in Node.js modules (import "node:fs"), deno.json becomes an import map, deno fmt supports configuring semicolons |
Шаблон:Version | Шаблон:Version | 2023-02-24 | 2023-02-25 | Support for package.json, Stabilization of Node-API, Node compatibility layer for NodeJS moved to the Deno runtime itself, Stabilizations in Deno API, Change to pointer type in FFI API |
Шаблон:Version | Шаблон:Version | 2023-03-23 | 2023-04-18 | Enhanced Node.js compatibility, deno compile support for web workers and dynamic import, changes to Deno APIs, changes to Web APIs, changes to the standard library, TypeScript 5.0, V8 11.2 |
Шаблон:Version | Шаблон:Version | 2023-04-28 | 2023-05-18 | Built in Key-value database, flatter configuration, no permission check for dynamic imports, further enhanced Node.js/npm compatibility, performance improvements, CLI improvements, changes to Deno APIs, V8 11.4 |
Шаблон:Version | Шаблон:Version | 2023-05-23 | 2023-6-15 | Deno compile support for npm packages, glob support in Deno.json and CLI flags, support for IP addresses in TLS certificates, configuration file improvements, API Changes, Node.js compatibility improvements, TypeScript 5.0.4, V8 11.5 |
Шаблон:Version | Шаблон:Version | 2023-07-05 | 2023-07-26 | New stable web server API, Node.js compatibility improvements, Deno API changes, Web API changes, LSP improvements, updates to standard library, TypeScript 5.1.6, V8 11.6 |
Шаблон:Version | Шаблон:Version | 2023-08-03 | 2023-08-21 | More flexible security and expanded testing APIs |
Шаблон:Version |
Deno Fresh
Version | Latest patch release | Release date | Date of last patch release | Description |
---|---|---|---|---|
Шаблон:Version | Шаблон:Version | 2022-06-28 | 2022-06-28 | Initial release |
Шаблон:Version | Шаблон:Version | 2022-08-09 | 2023-05-23 | Automatic JSX, new twind plug-in, Preact Signals support, Preact DevTools support, explicit rendering of 404 pages, stacked middleware, experimental Deno.serve support, showcase & "Made with Fresh" badges |
Шаблон:Version | Шаблон:Version | 2023-06-15 | 2023-06-15 | More datatypes supported in island props, support for passing JSX to islands and nesting islands, support for importing packages from npm, custom HEAD request handlers, overrides for headers and status from ctx.render, asynchronous plugin rendering, simplified testing |
Шаблон:Version | Шаблон:Version | 2023-07-18 | 2023-07-21 | Async Route Components. adding routes and/or middlewares from plugin. 500 error template fallback, error Boundaries, export multiple islands in the same file, Fresh linting rules, support for Deno.serve |
Шаблон:Version | Шаблон:Version | 2023-08-16 | 2023-09-06 | Faster page loads with ahead-of-time compilation, custom html, head and body tags, layouts (async layouts and async app wrapper, quicker typing with define functions |
Шаблон:Version |
Deno SaasKit
Version | Latest patch release | Release date | Date of last patch release | Description |
---|---|---|---|---|
Шаблон:Version | Шаблон:Version | 2023-04-04 | 2022-04-04 | Initial release |
Шаблон:Version |
Examples
A basic Hello, World! program in Deno:
console.log("Hello, World!");
Global Deno
namespaces expose APIs that are not available in the browser.
An implementation of the Unix cat program: [1]
/**
* cat.ts
*/
for (const filename of Deno.args) {
const file = await Deno.open(filename);
await file.readable.pipeTo(Deno.stdout.writable, { preventClose: true });
}
A simple Web server: [2]
Deno.serve((req) => new Response("hello world"));
Deno automatically downloads and caches the remote standard library files when the script is run, and then compiles the code.
Similarly, it can run a standard library script (such as a file server) directly without explicitly downloading, by providing the URL as the input filename (-A
turns on all permissions):
$ deno run -A https://deno.land/std/http/file_server.ts
Download https://deno.land/std/http/file_server.ts
Compile https://deno.land/std/http/file_server.ts
...
HTTP server listening on http://0.0.0.0:4500/
References
External links
- ↑ 1,0 1,1 1,2 1,3 Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Citation
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Ошибка цитирования Неверный тег
<ref>
; для сносокCOMPANY
не указан текст - ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- Английская Википедия
- 2018 software
- JavaScript programming tools
- Package management systems
- Run-time systems
- Free software programmed in Rust
- Free software programmed in JavaScript
- Free software programmed in TypeScript
- Software using the MIT license
- Cross-platform free software (Linux; macOS; Windows)
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Википедия
- Статья из Википедии
- Статья из Английской Википедии
- Страницы с ошибками в примечаниях