mirror of
https://github.com/denoland/deno.git
synced 2024-11-26 16:09:27 -05:00
41c7e96f1a
* 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. |
||
---|---|---|
.. | ||
examples | ||
libdeno | ||
BUILD.gn | ||
build.rs | ||
Cargo.toml | ||
core.d.ts | ||
flags.rs | ||
isolate.rs | ||
js_errors.rs | ||
lib.rs | ||
libdeno.rs | ||
modules.rs | ||
README.md | ||
shared_queue.js | ||
shared_queue.rs | ||
shared_queue_test.js |
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.