You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Representative of presumably (many?) more types, I'd like to understand why Window does not implement Send and Sync. I understand that it apparently embeds a js_sys::Object which contains a wasm_bindgen::JsValue which in turn has a PhantomData<*mut u8>, which causes everything using it to be !Send and !Sync by default. What I'd like to understand is whether lack of implementation of these traits is by design or an oversight.
I haven't found any discussion of this topic anywhere, so if you have any pointers kindly forward them.
Perhaps not implementing Send is not a big deal in a truly web world, but it has huge trickle down effects on downstream crates that cross this boundary (because web-sys, for example, is so low in the stack). E.g., I have a crate that provides functionality natively using native APIs or, when compiled for wasm32-unknown-unknown, using web APIs.
The native stuff is pretty much all Send, including futures created etc. But once the web backend is used, nothing is anymore. Now I have to sprinkle compile time conditions in dozens of places, which renders the code borderline unmaintainable and is just a humongous source of complexity. And it just doesn't get any better higher up the stack because these traits are so infectious.
Hence, can someone please
clarify whether this is an oversight or whether there has been discussion on the topic
if there are insurmountable issues with implementing these traits
clarify if we could document the lack of these trait implementations in the documentation
The text was updated successfully, but these errors were encountered:
Representative of presumably (many?) more types, I'd like to understand why
Window
does not implementSend
andSync
. I understand that it apparently embeds ajs_sys::Object
which contains awasm_bindgen::JsValue
which in turn has aPhantomData<*mut u8>
, which causes everything using it to be!Send
and!Sync
by default. What I'd like to understand is whether lack of implementation of these traits is by design or an oversight.I haven't found any discussion of this topic anywhere, so if you have any pointers kindly forward them.
Perhaps not implementing
Send
is not a big deal in a truly web world, but it has huge trickle down effects on downstream crates that cross this boundary (becauseweb-sys
, for example, is so low in the stack). E.g., I have a crate that provides functionality natively using native APIs or, when compiled for wasm32-unknown-unknown, using web APIs.The native stuff is pretty much all
Send
, including futures created etc. But once the web backend is used, nothing is anymore. Now I have to sprinkle compile time conditions in dozens of places, which renders the code borderline unmaintainable and is just a humongous source of complexity. And it just doesn't get any better higher up the stack because these traits are so infectious.Hence, can someone please
The text was updated successfully, but these errors were encountered: