1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-26 16:09:27 -05:00
denoland-deno/core
Bert Belder 41c7e96f1a
Refactor zero-copy buffers for performance and to prevent memory leaks
* In order to prevent ArrayBuffers from getting garbage collected by V8,
  we used to store a v8::Persistent<ArrayBuffer> in a map. This patch
  introduces a custom ArrayBuffer allocator which doesn't use Persistent
  handles, but instead stores a pointer to the actual ArrayBuffer data
  alongside with a reference count. Since creating Persistent handles
  has quite a bit of overhead, this change significantly increases
  performance. Various HTTP server benchmarks report about 5-10% more
  requests per second than before.

* Previously the Persistent handle that prevented garbage collection had
  to be released manually, and this wasn't always done, which was
  causing memory leaks. This has been resolved by introducing a new
  `PinnedBuf` type in both Rust and C++ that automatically re-enables
  garbage collection when it goes out of scope.

* Zero-copy buffers are now correctly wrapped in an Option if there is a
  possibility that they're not present. This clears up a correctness
  issue where we were creating zero-length slices from a null pointer,
  which is against the rules.
2019-05-01 21:11:09 +02:00
..
examples Refactor zero-copy buffers for performance and to prevent memory leaks 2019-05-01 21:11:09 +02:00
libdeno Refactor zero-copy buffers for performance and to prevent memory leaks 2019-05-01 21:11:09 +02:00
BUILD.gn Move deno_core_http_bench into examples dir (#2127) 2019-04-16 17:53:43 -04:00
build.rs Publish rust crate on crates.io (#2024) 2019-03-31 17:22:02 -04:00
Cargo.toml v0.3.10 2019-04-25 13:59:18 -06:00
core.d.ts namespace reorg: libdeno and DenoCore to Deno.core (#1998) 2019-03-26 08:22:07 -04:00
flags.rs Refactor CLI entry point (#2157) 2019-04-21 11:34:18 -04:00
isolate.rs Refactor zero-copy buffers for performance and to prevent memory leaks 2019-05-01 21:11:09 +02:00
js_errors.rs Fix clippy warnings 2019-04-17 15:35:46 +02:00
lib.rs Refactor zero-copy buffers for performance and to prevent memory leaks 2019-05-01 21:11:09 +02:00
libdeno.rs Refactor zero-copy buffers for performance and to prevent memory leaks 2019-05-01 21:11:09 +02:00
modules.rs core: add Deps::to_json() (#2223) 2019-04-27 10:04:09 -07:00
README.md Fix link to http_bench example in core README (#2167) 2019-04-21 10:40:44 -04:00
shared_queue.js core: Add test for snapshotting from Rust (#2197) 2019-04-24 21:43:06 -04:00
shared_queue.rs Fixes #2033, shared queue push bug (#2158) 2019-04-21 12:16:55 -04:00
shared_queue_test.js Fixes #2033, shared queue push bug (#2158) 2019-04-21 12:16:55 -04:00

Deno Core

This Rust crate contains the essential V8 bindings for Deno's command-line interface (Deno CLI). The main abstraction here is the Isolate which proivdes a way to execute JavaScript. The Isolate is modeled as a Future<Item=(), Error=JSError> which completes once all of its ops have completed. The user must define what an Op is by implementing the Dispatch trait, and by doing so define any "built-in" functionality that would be provided by the VM. Ops are triggered by Deno.core.dispatch().

Documentation for this crate is thin at the moment. Please see http_bench.rs as a simple example of usage.

TypeScript support and a lot of other functionality is not available at this layer. See the cli for that.