summaryrefslogtreecommitdiff
path: root/core/runtime.rs
AgeCommit message (Collapse)Author
2021-07-03feat: enable WebAssembly.instantiateStreaming and wasm async compilation ↵Andreu Botella
(#11200) The WebAssembly streaming APIs used to be enabled, but used to take buffer sources as their first argument (see #6154 and #7259). This change re-enables them, requiring a Promise<Response> instead, as well as enabling asynchronous compilation of WebAssembly modules.
2021-07-02refactor: introduce primordials (#10939)Luca Casonato
This commit introduces primordials to deno_core. Primordials are a frozen set of all intrinsic objects in the runtime. They are not vulnerable to prototype pollution.
2021-07-02feat(core): pump V8 message loop on event loop tick (#11221)Bartek Iwańczuk
This commit adds support for Atomics and FinalizationRegistry by integrating V8's message loop into "JsRuntime::poll_event_loop".
2021-07-02chore: upgrade rusty_v8 and serde_v8 (#11216)Bartek Iwańczuk
2021-06-29fix(core/modules): Fix concurrent loading of dynamic imports (#11089)Nayeem Rahman
This commit changes implementation of module loading in "deno_core" to track all currently fetched modules across all existing module loads. In effect a bug that caused concurrent dynamic imports referencing the same module to fail is fixed.
2021-06-25upgrade: rusty_v8 0.23.0 (V8 9.2.230.12) (#11113)Ryan Dahl
2021-06-22cleanup(core): top-level-await is now always enabled (#11082)Maxime Guerreiro
Starting with V8 9.1, top-level-await is always enabled by default. See https://v8.dev/blog/v8-release-91 for the release notes. - Remove the now redundant v8 flag. - Clarify doc comment and add link to the feature explainer.
2021-06-22refactor: unify JavaScript script execution method (#11043)Bartek Iwańczuk
This commit renames "JsRuntime::execute" to "JsRuntime::execute_script". Additionally same renames were applied to methods on "deno_runtime::Worker" and "deno_runtime::WebWorker". A new macro was added to "deno_core" called "located_script_name" which returns the name of Rust file alongside line no and col no of that call site. This macro is useful in combination with "JsRuntime::execute_script" and allows to provide accurate place where "one-off" JavaScript scripts are executed for internal runtime functions. Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
2021-06-21refactor(core): always attach inspector to isolate (#11042)Bartek Iwańczuk
This commit changes "deno_core::JsRuntime" to always create "deno_core::JsRuntimeInspector" instance.
2021-06-19fix(core/modules): Prepare modules only once per runtime (#11015)Nayeem Rahman
This commit changes module loading implementation in "deno_core" to call "ModuleLoader::prepare" hook only once per entry point. This is done to avoid multiple type checking of the same code in case of duplicated dynamic imports. Relevant code in "cli/module_graph.rs" was updated as well.
2021-05-29core: don't include_str extension js code (#10786)Luca Casonato
This speeds up incremental rebuild when only touching JS files by 13-15% Rebuild time after `touch 01_broadcast_channel.js`: main: run 1 49.18s, run 2 50.34s this: run 1 43.12s, run 2 43.19s
2021-05-26refactor: move JsRuntimeInspector to deno_core (#10763)Bartek Iwańczuk
This commit moves implementation of "JsRuntimeInspector" to "deno_core" crate. To achieve that following changes were made: * "Worker" and "WebWorker" no longer own instance of "JsRuntimeInspector", instead it is now owned by "deno_core::JsRuntime". * Consequently polling of inspector is no longer done in "Worker"/"WebWorker", instead it's done in "deno_core::JsRuntime::poll_event_loop". * "deno_core::JsRuntime::poll_event_loop" and "deno_core::JsRuntime::run_event_loop", now accept "wait_for_inspector" boolean that tells if event loop should still be "pending" if there are active inspector sessions - this change fixes the problem that inspector disconnects from the frontend and process exits once the code has stopped executing.
2021-05-19refactor(core): move ModuleMap to separate RefCell (#10656)Bartek Iwańczuk
This commit moves bulk of the logic related to module loading from "JsRuntime" to "ModuleMap". Next steps are to rewrite the actual loading logic (represented by "RecursiveModuleLoad") to be a part of "ModuleMap" as well -- that way we will be able to track multiple module loads from within the map which should help me solve the problem of concurrent loads (since all info about currently loading/loaded modules will be contained in the ModuleMap, so we'll be able to know if actually all required modules have been loaded).
2021-05-06refactor(ops): replace `ZeroCopyBuf` arg by 2nd generic deserializable arg ↵Aaron O'Mullan
(#10448)
2021-05-03fix(core): error registration could pollute constructors (#10422)Aaron O'Mullan
Co-authored-by: Luca Casonato <lucacasonato@yahoo.com>
2021-04-30refactor(core): provide builtins as an Extension (#10449)Aaron O'Mullan
2021-04-30cleanup(core): replace OpResponse with OpResult (#10434)Aaron O'Mullan
Drop the Value/Buffer enum since #10432 allows buffers to be serialized rust => v8
2021-04-30refactor(core): initialize extensions in runtime constructor (#10421)Aaron O'Mullan
This ensures that provided extensions are all correctly setup and ready to use once the JsRuntime constructor returns Note: this will also initialize ops for to-be-snapshotted runtimes
2021-04-28enable error-on-warning (#10410)Ryan Dahl
Only on linux and osx. Fixes one warning.
2021-04-28core: introduce extensions (#9800)Aaron O'Mullan
Extensions allow declarative extensions to "JsRuntime" (ops, state, JS or middleware). This allows for: - `op_crates` to be plug-and-play & self-contained, reducing complexity leaked to consumers - op middleware (like metrics_op) to be opt-in and for new middleware (unstable, tracing,...) - `MainWorker` and `WebWorker` to be composable, allowing users to extend workers with their ops whilst benefiting from the other infrastructure (inspector, etc...) In short extensions improve deno's modularity, reducing complexity and leaky abstractions for embedders and the internal codebase.
2021-04-28refactor(core): simplify module loading code (#10385)Bartek Iwańczuk
General cleanup of module loading code, tried to reduce indentation in various methods on "JsRuntime" to improve readability. Added "JsRuntime::handle_scope" helper function, which returns a "v8::HandleScope". This was done to reduce a code pattern that happens all over the "deno_core". Additionally if event loop hangs during loading of dynamic modules a list of currently pending dynamic imports is printed.
2021-04-26feat(core): enable wasm threading support (#10116)Casper Beyer
2021-04-26remove #![deny(warnings)] (#10376)Ryan Dahl
Prefer RUSTFLAGS="-D warnings" to prevent warnings, but cannot enable yet due to #10378.
2021-04-25refactor(core): move op cache sync responsibility to rust space (#10340)Aaron O'Mullan
Even if bootstrapping the JS runtime is low level, it's an abstraction leak of core to require users to call `Deno.core.ops()` in JS space. So instead we're introducing a `JsRuntime::sync_ops_cache()` method, once we have runtime extensions a new runtime will ensure the ops cache is setup (for the provided extensions) and then loading/unloading plugins should be the only operations that require op cache syncs
2021-04-25feat(core): allow async opcalls in snapshots (#10308)Aaron O'Mullan
2021-04-23refactor(core): rename send() to opcall() (#10307)Aaron O'Mullan
I think it's a better fit since recv() was killed and opcall <> syscall (send/recv was too reminiscent of request/response and custom payloads)
2021-04-23chore: remove dead code (#10321)Ryan Dahl
2021-04-21refactor(core): kill recv() and init() (#10299)Aaron O'Mullan
`init()` was previously needed to init the shared queue, but now that it's gone `init()` only registers the async msg handler which is snapshot safe and constant since the op layer refactor.
2021-04-13fix(core): remove wasm-test-streaming flag (#10158)Casper Beyer
2021-04-12perf(core/ops): avoid allocs when returning primitives (#10149)Aaron O'Mullan
2021-04-12core: remove some unnecessary heap allocationsBen Noordhuis
2021-04-12core: let embedders plug in their own V8 platformBen Noordhuis
Fixes #9912.
2021-04-12refactor(deno): remove concept of bin & json ops (#10145)Aaron O'Mullan
2021-04-11core: avoid async op future reboxing to bundle PromiseId (#10123)Aaron O'Mullan
2021-04-04fix: Properly await already evaluating dynamic imports (#9984)Nayeem Rahman
2021-04-04perf(serde_v8): introduce Serializable boxable object (#9983)Aaron O'Mullan
2021-04-03refactor: don't call Context::Global in async_op_response (#9971)Ryan Dahl
2021-03-31refactor: new optimized op-layer using serde_v8 (#9843)Aaron O'Mullan
- Improves op performance. - Handle op-metadata (errors, promise IDs) explicitly in the op-layer vs per op-encoding (aka: out-of-payload). - Remove shared queue & custom "asyncHandlers", all async values are returned in batches via js_recv_cb. - The op-layer should be thought of as simple function calls with little indirection or translation besides the conceptually straightforward serde_v8 bijections. - Preserve concepts of json/bin/min as semantic groups of their inputs/outputs instead of their op-encoding strategy, preserving these groups will also facilitate partial transitions over to v8 Fast API for the "min" and "bin" groups
2021-03-26remove macro_use (#9884)Ryan Dahl
2021-03-25upgrade: Rust 1.51.0 (#9895)Yusuke Tanaka
2021-03-12refactor: simplify icu data alignment (#9766)Ben Noordhuis
2021-03-10upgrade: rusty_v8 0.21.0 (#9725)Ryan Dahl
2021-03-08fix(core): shared queue assertion failure in case of js error (#9721)Inteon
In case JavaScript throws an unhandled error, part of the "shared_queue" could be still unprocessed. If this is the case; throw the js runtime error instead of asserting on the queue size not being 0.
2021-03-04fix(runtime/web_worker): Don't block self.onmessage with TLA (#9619)Nayeem Rahman
This commit rewrites implementation of "JsRuntime::mod_evaluate". Event loop is no longer polled automatically and users must manually drive event loop forward after calling "mod_evaluate". Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com> Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>
2021-02-23refactor(core): cleanup module implementation (#9580)Bartek Iwańczuk
* remove "ModuleNameMap", instead define that map inline inside "Modules" struct * remove "dyn_import_id" argument from "mod_instantiate" * rename "Modules" struct to "ModuleMap" * rename "JsRuntime::modules" to "JsRuntime::module_map"
2021-02-23refactor(core): Allow multiple overflown responses in single poll (#9433)Inteon
This commit rewrites "JsRuntime::poll" function to fix a corner case that might caused "overflown_response" to be overwritten by other overflown response. The logic has been changed to allow returning multiple overflown response alongside responses from shared queue.
2021-02-20fix(core/runtime): Fix dynamic imports for already rejected modules (#9559)Nayeem Rahman
2021-02-19fix(core): Make dynamic import async errors catchable (#9505)Nayeem Rahman
Fixes #6259
2021-02-17Make ModuleSpecifier a type alias, not wrapper struct (#9531)Ryan Dahl
2021-02-16feat: add structured cloning to Deno.core (#9458)Inteon
This commit adds two new "Deno.core" APIs: - "Deno.core.serialize" - "Deno.core.deserialize" These APIs are used to provide structured cloning of values and will be used for further web worker implementation. Co-authored-by: Bartek Iwańczuk <biwanczuk@gmail.com>