Over the last two weeks we’ve been working on a new feature designed for V8 
embedders, called “V8 extras.” The intent is to allow embedders to write 
self-hosted (i.e. JavaScript) implementations of various features, with 
more power and less drawbacks than the existing V8 extensions mechanism. 
Notably, we are building on top of recent snapshotting work to ensure that 
the code for V8 extras is included in the snapshot, and so should not have 
negative impact on context startup time.

You can see a working, albeit in-progress, example of a V8 extra in this CL 
<https://codereview.chromium.org/1118673002>, which uses them to implement 
readable streams from the Streams Standard. General features on display 
include:

   - The inclusion of the extras via the v8_extra_library_files GYP variable
   - The use of V8 native functions, such as %CreatePrivateOwnSymbol, in 
   the .js files (but see below)
   - The use of the extrasExports object to export functions and values to 
   the embedder. This object can be accessed through the V8 C++ API with 
   v8::Context::GetExtrasExportsObject().

There are a number of changes we’re still working on implementing before we 
could comfortably say that this feature is ready:

   - We do not want to allow extras direct access to V8 native functions, 
   but instead only to a small number of pre-specified ones. The details on 
   how to do this are still being worked out, but it will probably involve a 
   slight change to the authoring format of the extras files, to become e.g. 
   script whose completion value is a function that gets such a utility object 
   passed in.
   - We need a story for segregating “experimental” extras from shipping 
   ones, similar to what is being done in V8 already for harmony features. 
   Experimental extras cannot live in the snapshot, since they must be able to 
   be turned off at runtime, while shipping ones will be compiled in.
   - We eventually want to expose an easy way for the embedder to supply 
   functions or values to the extras code. This is not actually needed for 
   streams, but for example if we were to implement something like TextEncoder 
   or URL as an extra, it would be crucial.

Overall though, we are quite excited about the possibilities this opens up, 
by allowing embedders a performant way to implement features in JavaScript.

Best,

Domenic Denicola
Jochen Eisinger
Yang Guo

-- 
-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to