1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-28 16:20:57 -05:00
denoland-deno/core
Bartek Iwańczuk f3c0f0565b
feat(core): Add ability to "ref" and "unref" pending ops (#12889)
This commit adds an ability to "ref" or "unref" pending ops.

Up to this point Deno had a notion of "async ops" and "unref async ops";
the former keep event loop alive, while the latter do not block event loop
from finishing. It was not possible to change between op types after
dispatching, one had to decide which type to use before dispatch.

Instead of storing ops in two separate "FuturesUnordered" collections,
now ops are stored in a single collection, with supplemental "HashSet"
storing ids of promises that were "unrefed".

Two APIs were added to "Deno.core":

"Deno.core.refOp(promiseId)" which allows to mark promise id
to be "refed" and keep event loop alive (the default behavior)
"Deno.core.unrefOp(promiseId)" which allows to mark promise
id as "unrefed" which won't block event loop from exiting
2021-11-25 19:49:09 +01:00
..
examples core(examples): Deserialize the result of execute_script (#12806) 2021-11-22 14:47:29 +01:00
00_primordials.js feat(fmt): add basic JS doc formatting (#11902) 2021-09-02 18:28:12 -04:00
01_core.js feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
02_error.js fix(cli/fmt_errors): Abbreviate long data URLs in stack traces (#12127) 2021-09-18 15:40:04 +02:00
async_cancel.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
async_cell.rs perf(core): optimize waker capture in AsyncRefCell (#12332) 2021-11-08 12:49:10 -08:00
bindings.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
Cargo.toml chore: merge v1.16.3 into main (#12892) 2021-11-24 15:56:18 -08:00
encode_decode_test.js chore: use strict mode for internal runtime, core, and op_crates js (#9391) 2021-02-04 23:18:32 +01:00
error.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
error_builder_test.js refactor: use primordials in runtime, extensions and core (#11500) 2021-07-26 13:52:59 +02:00
error_codes.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
extensions.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
flags.rs chore: update to rusty_v8 0.33.0 (#12564) 2021-10-27 23:26:15 +02:00
gotham_state.rs fix(core): better "missing type" GothamState error (#10189) 2021-04-14 23:11:39 +02:00
icudtl.dat upgrade: rusty_v8 0.23.0 (V8 9.2.230.12) (#11113) 2021-06-25 12:54:53 +02:00
inspector.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
internal.d.ts chore: upgrade Rust to 1.54.0 (#11554) 2021-07-30 15:03:41 +02:00
lib.deno_core.d.ts feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
lib.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
module_specifier.rs fix(doc): fix rustdoc bare_urls warning (#11921) 2021-09-05 16:22:45 +02:00
modules.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
normalize_path.rs fix(doc): fix rustdoc bare_urls warning (#11921) 2021-09-05 16:22:45 +02:00
ops.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
ops_builtin.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
ops_json.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
ops_metrics.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
README.md docs(core): replaces dispatch references with op (#11054) 2021-06-20 17:12:55 +02:00
resources.rs refactor: re-export anyhow from deno_core (#12777) 2021-11-16 09:02:28 -05:00
runtime.rs feat(core): Add ability to "ref" and "unref" pending ops (#12889) 2021-11-25 19:49:09 +01:00
serialize_deserialize_test.js feat(extensions/web): add structuredClone function (#11572) 2021-08-09 10:39:00 +02:00

Deno Core Crate

crates docs

The main dependency of this crate is rusty_v8, which provides the V8-Rust bindings.

This Rust crate contains the essential V8 bindings for Deno's command-line interface (Deno CLI). The main abstraction here is the JsRuntime which provides a way to execute JavaScript.

The JsRuntime implements an event loop abstraction for the executed code that keeps track of all pending tasks (async ops, dynamic module loads). It is user's responsibility to drive that loop by using JsRuntime::run_event_loop method - it must be executed in the context of Rust's future executor (eg. tokio, smol).

In order to bind Rust functions into JavaScript, use the Deno.core.opSync() and Deno.core.opAsync() functions to trigger the "op_fn" callback in JsRuntime::register_op on Rust side. A conventional way to handle "op_fn" callbacks is to use the op_sync and op_async functions.

Documentation for this crate is thin at the moment. Please see hello_world.rs and http_bench_json_ops.rs as examples of usage.

TypeScript support and lots of other functionality are not available at this layer. See the CLI for that.