0b4770fa7d
Reduce the number of copies and allocations of script code by carrying around ownership/reference information from creation time. As an advantage, this allows us to maintain the identity of `&'static str`-based scripts and use v8's external 1-byte strings (to avoid incorrectly passing non-ASCII strings, debug `assert!`s gate all string reference paths). Benchmark results: Perf improvements -- ~0.1 - 0.2ms faster, but should reduce garbage w/external strings and reduces data copies overall. May also unlock some more interesting optimizations in the future. This requires adding some generics to functions, but manual monomorphization has been applied (outer/inner function) to avoid code bloat. |
||
---|---|---|
.. | ||
examples | ||
00_primordials.js | ||
01_core.js | ||
02_error.js | ||
async_cancel.rs | ||
async_cell.rs | ||
bindings.rs | ||
Cargo.toml | ||
encode_decode_test.js | ||
error.rs | ||
error_builder_test.js | ||
error_codes.rs | ||
extensions.rs | ||
flags.rs | ||
gotham_state.rs | ||
icudtl.dat | ||
inspector.rs | ||
internal.d.ts | ||
io.rs | ||
lib.deno_core.d.ts | ||
lib.rs | ||
module_specifier.rs | ||
modules.rs | ||
normalize_path.rs | ||
ops.rs | ||
ops_builtin.rs | ||
ops_builtin_v8.rs | ||
ops_metrics.rs | ||
README.md | ||
resources.rs | ||
runtime.rs | ||
serialize_deserialize_test.js | ||
snapshot_util.rs | ||
source_map.rs | ||
task_queue.rs |
Deno Core Crate
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).
Rust functions can be registered in JavaScript using deno_core::Extension
. Use
the Deno.core.ops.op_name()
and Deno.core.opAsync("op_name", ...)
functions
to trigger the op function callback. A conventional way to write ops is using
the deno_ops
crate.
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.