0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-10-29 08:58:01 -04:00
A modern runtime for JavaScript and TypeScript. https://deno.com/
Find a file
Andreu Botella 68782346d0
feat(core): Reland support for async ops in realms (#17204)
Currently realms are supported on `deno_core`, but there was no support
for async ops anywhere other than the main realm. The main issue is that
the `js_recv_cb` callback, which resolves promises corresponding to
async ops, was only set for the main realm, so async ops in other realms
would never resolve. Furthermore, promise ID's are specific to each
realm, which meant that async ops from other realms would result in a
wrong promise from the main realm being resolved.

This change takes the `ContextState` struct added in #17050, and adds to
it a `js_recv_cb` callback for each realm. Combined with the fact that
that same PR also added a list of known realms to `JsRuntimeState`, and
that #17174 made `OpCtx` instances realm-specific and had them include
an index into that list of known realms, this makes it possible to know
the current realm in the `queue_async_op` and `queue_fast_async_op`
methods, and therefore to send the results of promises for each realm to
that realm, and prevent the ID's from getting mixed up.

Additionally, since promise ID's are no longer unique to the isolate,
having a single set of unrefed ops doesn't work. This change therefore
also moves `unrefed_ops` from `JsRuntimeState` to `ContextState`, and
adds the lengths of the unrefed op sets for all known realms to get the
total number of unrefed ops to compare in the event loop.

This PR is a reland of #14734 after it was reverted in #16366, except
that `ContextState` and `JsRuntimeState::known_realms` were previously
relanded in #17050. Another significant difference with the original PR
is passing around an index into `JsRuntimeState::known_realms` instead
of a `v8::Global<v8::Context>` to identify the realm, because async op
queuing in fast calls cannot call into V8, and therefore cannot have
access to V8 globals. This also simplified the implementation of
`resolve_async_ops`.

Co-authored-by: Luis Malheiro <luismalheiro@gmail.com>
2023-01-14 14:40:16 +01:00
.cargo fix: upgrade deno_ast to 0.23 (#17269) 2023-01-04 18:54:54 -05:00
.devcontainer chore: update devcontainer configuration (#15751) 2022-09-03 02:21:41 +02:00
.github chore(ci): use windows-2022 runner on skipped release job on PRs (#17398) 2023-01-13 19:06:30 +00:00
bench_util chore: forward 1.29.3 release back to main (#17401) 2023-01-13 13:36:51 -05:00
cli chore(napi): Remove unstable libuv methods (#17416) 2023-01-14 13:02:42 +00:00
core feat(core): Reland support for async ops in realms (#17204) 2023-01-14 14:40:16 +01:00
ext fix(npm): use original node regex in npm resolution (#17404) 2023-01-14 00:57:24 +01:00
ops feat(core): Reland support for async ops in realms (#17204) 2023-01-14 14:40:16 +01:00
runtime chore: forward 1.29.3 release back to main (#17401) 2023-01-13 13:36:51 -05:00
serde_v8 chore: forward 1.29.3 release back to main (#17401) 2023-01-13 13:36:51 -05:00
test_ffi chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
test_napi fix(napi): correct arguments for napi_get_typedarray_info (#17306) 2023-01-14 13:00:48 +00:00
test_util chore: add copyright_checker tool and add the missing copyright (#17285) 2023-01-13 16:51:32 +09:00
third_party@3e5b0cea16 chore: Update dlint (#17031) 2022-12-20 03:37:50 +01:00
tools chore: small cleanup of scripts in ./tools and run copyright checker in lint.js (#17393) 2023-01-13 13:42:15 -05:00
.dlint.json chore: enable camelcase rule in dlint (#12605) 2021-10-30 18:31:19 +02:00
.dprint.json fix(fmt): better handling of link reference definitions when formatting markdown (#17352) 2023-01-11 18:35:45 +00:00
.editorconfig editorconfig: Don't insert final newline in .out files (#1686) 2019-02-07 11:31:49 -05:00
.gitattributes fix(test): support typechecking docs with CRLF line endings (#12748) 2021-11-15 09:58:04 -05:00
.gitignore feat(npm): implement Node API (#13633) 2022-10-05 19:36:44 +05:30
.gitmodules feat(ext/ffi): Implement FFI fast-call trampoline with Dynasmrt (#15305) 2022-09-07 12:23:56 +05:30
.rustfmt.toml chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
Cargo.lock chore: upgrade rusty_v8 to 0.60.1 (#17407) 2023-01-14 10:36:42 +05:30
Cargo.toml chore: upgrade rusty_v8 to 0.60.1 (#17407) 2023-01-14 10:36:42 +05:30
LICENSE.md chore: update copyright year to 2023 (#17247) 2023-01-02 21:00:42 +00:00
README.md docs: use irm instead of iwr -useb (#15474) 2022-08-15 10:05:29 -04:00
Releases.md chore: forward 1.29.3 release back to main (#17401) 2023-01-13 13:36:51 -05:00
rust-toolchain.toml chore: update to Rust 1.66.0 (#17078) 2022-12-17 23:20:15 +01:00

Deno

Build Status - Cirrus Twitter handle Discord Chat

the deno mascot dinosaur standing in the rain

Deno is a simple, modern and secure runtime for JavaScript and TypeScript that uses V8 and is built in Rust.

Features

  • Secure by default. No file, network, or environment access, unless explicitly enabled.
  • Supports TypeScript out of the box.
  • Ships only a single executable file.
  • Built-in utilities.
  • Set of reviewed standard modules that are guaranteed to work with Deno.

Install

Shell (Mac, Linux):

curl -fsSL https://deno.land/install.sh | sh

PowerShell (Windows):

irm https://deno.land/install.ps1 | iex

Homebrew (Mac):

brew install deno

Chocolatey (Windows):

choco install deno

Scoop (Windows):

scoop install deno

Build and install from source using Cargo:

cargo install deno --locked

See deno_install and releases for other options.

Getting Started

Try running a simple program:

deno run https://deno.land/std/examples/welcome.ts

Or a more complex one:

const listener = Deno.listen({ port: 8000 });
console.log("http://localhost:8000/");

for await (const conn of listener) {
  serve(conn);
}

async function serve(conn: Deno.Conn) {
  for await (const { respondWith } of Deno.serveHttp(conn)) {
    respondWith(new Response("Hello world"));
  }
}

You can find a deeper introduction, examples, and environment setup guides in the manual.

The complete API reference is available at the runtime documentation.

Contributing

We appreciate your help!

To contribute, please read our contributing instructions.