Comments (9)
To expand on what @titzer wrote, to support shared references in the most general fashion we will need to extend the shared
attribute that the threads proposal introduced for memories to tables, globals, functions, and reference types themselves. The type system will then ensure that only shared things are transitively reachable through other shared things. We have this generalised type system written out in a submitted research paper. We will make it public once it's through the double-blind review process next month or so.
As far as JS interop is concerned, regular JS values would continue to have non-shared reference type, so cannot be passed between threads.
from reference-types.
@chicoxyzzy, good question. The typed object proposal might potentially be enriched with a similar attribute for defining types, which may allow respective objects to be shared. But there are a number of subtle problems to solve, e.g., what to do with prototypes or type identity.
from reference-types.
Reference types are basis for GC types and interaction with threads is one of requirements for GC types
from reference-types.
Agreed, we will eventually want to have references across threads. For the web embedding, however, it will not be possible initially, since tables and globals are not currently shared across web workers. The current thinking is to add a "shared" bit to both globals and tables which would indicate whether they would be duplicated or shared across threads, which would be supported in other embeddings of WASM.
from reference-types.
@rossberg will this remain true with presence of JS Typed Objects?
from reference-types.
Typed objects will have null prototypes in JS, but there @rossberg is right. There are a number of subtleties here that I suspect will cause more problems for JS, so it is reasonable to expect they will lag behind "pure" wasm objects for sharing. Which reminds me of a V8 implementation gotcha here...ergh
from reference-types.
Typed objects will have null prototypes in JS
@titzer, I'm afraid that's not what the TO proposal currently intends.
from reference-types.
Typed objects will have null prototypes in JS
@titzer, I'm afraid that's not what the TO proposal currently intends.
As currently proposed, type objects would have a null prototype when created from an internal type definition. (See also the examples that show this difference.) So I think the abovementioned shared-ness rules in the type system, combined with instantiation-time checks, could indeed prevent shared type objects pointing to (necessarily un-shared) JS objects via __proto__
.
from reference-types.
I think this has been answered.
from reference-types.
Related Issues (20)
- [js-api] Formalization only: eliminate extern value cache HOT 7
- Who is responsible for table.grow? HOT 3
- `table.fill` needs to bounds check before executing `table.set`? HOT 3
- Missing validation step for ref.null HOT 3
- Typeability Bug in Reference Implementation HOT 5
- Evaluating initializer expressions in element segments when instantiating HOT 2
- Failure string in core tests HOT 1
- Bug in reference core test HOT 4
- "refedtype" unnecessary HOT 4
- Rename "refedtype" to "heaptype" HOT 1
- Missing design rationals for type annotated select HOT 3
- There is no DefaultValue for anyfunc/funcref HOT 1
- may have a wrong leading byte here HOT 1
- Constant Expressions constraint HOT 6
- Is there a browser support table? HOT 3
- [Support] Are mixed (`anyref`) tables still supported, and if so, how are they encoded? HOT 3
- s/anyref/externref in repo description HOT 3
- Archive repo? HOT 1
- New `select` variant is not documented in Overview HOT 1
- Remove type annotation on ref.is_null HOT 22
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from reference-types.