On Thu, Mar 23, 2023 at 6:50 PM Thaina Yu <thain...@gmail.com> wrote:
> I am not sure how limited it is but there are many situation that we just > need a value to pass object from one function to another immediately in the > same flow > > By the way, which the handle would be returned as EM_ASM_INT or EM_ASM_PTR > ? > EM_ASM_INT is probably what you want if you want to return an integer handle to JS object. e.g. Something like an EM_VAL or a handle to JS promise. In emscripten we use this thing called a HandleAllocator to map integers to JS objects: https://github.com/emscripten-core/emscripten/blob/3cf83fdc4711e9bf3b01cf9821e717311a13c1b5/src/library.js#L3714-L3715 Because native code wants to deal with integers whenever we want to pass a JS object to native code we go through this handle allocator. When JS receives an integer handle from native code it can turn it back into a JS object by looking it up in a given handle allocator. In theory being able to pass externref directly looks like a way to remove the need for the extra mapping, but in practice C/C++ needs to be able to store handles in memory (and in data structures that live in memory) so using externref instead of `int` for EM_VAL doesn't work (at least not today). > On Friday, 24 March 2023 at 01:47:20 UTC+7 s...@google.com wrote: > >> On Thu, Mar 23, 2023 at 10:12 AM Thaina Yu <thai...@gmail.com> wrote: >> >>> I don't actually know which things unity would use to hold the value of >>> externref, just guessing it would be IntPtr. But by anything it require >>> that emscripten can officially define externref first anyway >>> >> >> The problem is that externref can't live in memory, so it can't live >> inside a struct or class or array or any C#/C++/C data type. So it's not >> going to be very usable IIUC. We already have `EM_VAL` in emscripten >> which is a way to refer to a JS object via an integer handle. I don't >> think we can build anything better than EM_VAL any time soon, at least >> nothing that can work well with C/C++/C#, but perhaps I'm missing something? >> >> >> >> >>> On Friday, 24 March 2023 at 00:03:02 UTC+7 s...@google.com wrote: >>> >>>> On Thu, Mar 23, 2023 at 9:51 AM Thaina Yu <thai...@gmail.com> wrote: >>>> >>>>> I am actually using emscripten from unity and I mainly use C# code >>>>> from unity side. But there are tons of 3rd party library and SDK that >>>>> written with assumption that we will only use JavaScript. It then need us >>>>> to construct javascript object in javascript and pass javascript object >>>>> reference all over the places. For example, the google's firebase SDK that >>>>> we need to construct it special object type to work with its complex >>>>> services >>>>> >>>>> It then become very frustrating to wrap everything in an API with >>>>> mergeInto library that kept growing for everythings related to js object >>>>> >>>>> With just the ability to pass externref into C# as IntPtr or int64 and >>>>> so C# can pass it to another js API after it was done everything in C# is >>>>> just what we really need, everything would come together as a flow of >>>>> reference. The chain of bottleneck is that unity rely on emscripten to >>>>> fully support externref first then it could start support it in some >>>>> future. So the sluggish are stacking up >>>>> >>>> >>>> But `IntPtr` and `int64` are fundamentally not externref, right? Or >>>> are you imagining those being indexes into a table of externref perhaps? >>>> That would work, but then the tricky part becoming managing that table. >>>> This is mind what embind does when it refers to JS object from native code >>>> I believe. >>>> >>>> >>>>> On Thursday, 23 March 2023 at 23:34:43 UTC+7 s...@google.com wrote: >>>>> >>>>>> On Thu, Mar 23, 2023 at 9:20 AM Thaina Yu <thai...@gmail.com> wrote: >>>>>> >>>>>>> Thank you very much. Are there any public discussion or roadmap to >>>>>>> add EM_ASM_REF into emscripten? >>>>>>> >>>>>> >>>>>> You are the first person that I know of to suggest it. >>>>>> >>>>>> Be aware that using externref directly in C/C++ is very limited, even >>>>>> after the recent changes. For example you can't store them in structs or >>>>>> class or store them to memory. All you can really do with them is pass >>>>>> them around and (maybe) put them in tables. So in practice I'm not sure >>>>>> how useful this stuff is yet, but I could be wrong? >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> On Thursday, 23 March 2023 at 23:17:52 UTC+7 s...@google.com wrote: >>>>>>> >>>>>>>> On Thu, Mar 23, 2023 at 6:52 AM Thaina Yu <thai...@gmail.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Do we have anyway to write hand-written assembly code along with >>>>>>>>> emscripten? And is it possible to return that externref from wasm >>>>>>>>> code into >>>>>>>>> emscripten world? >>>>>>>> >>>>>>>> >>>>>>>> Here is the example how to use externref in assembly: >>>>>>>> https://github.com/emscripten-core/emscripten/blob/main/test/core/test_externref.s >>>>>>>> >>>>>>>> Until recently there was no way to communicate those references >>>>>>>> directly to C++ but it maybe possible now that upstream clan support >>>>>>>> has >>>>>>>> landed. >>>>>>>> >>>>>>>> There is no current support for externref in EM_ASM. We could >>>>>>>> potentially add EM_ASM_REF which returns a ref to C/C++ but until >>>>>>>> recently >>>>>>>> that would have been impossible. >>>>>>>> >>>>>>>> >>>>>>>>> I am actually using unity which use emscripten to build webgl. >>>>>>>>> Would it possible to use EM_ASM_PTR to write wasm code to return as >>>>>>>>> pointer >>>>>>>>> (externref ? (an so I might return pointer as IntPtr in C#)) ? >>>>>>>>> >>>>>>>>> On Friday, 17 March 2023 at 22:35:55 UTC+7 tli...@google.com >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Yes, but note that the usage in that commit is only in >>>>>>>>>> hand-written assembly code, not in C/C++. >>>>>>>>>> >>>>>>>>>> More recently, support for externref landed upstream in clang: >>>>>>>>>> https://github.com/llvm/llvm-project/blob/main/clang/test/CodeGen/WebAssembly/wasm-externref.c. >>>>>>>>>> AFAIK we haven't yet experimented with it in Emscripten, but in >>>>>>>>>> principle >>>>>>>>>> it should work. >>>>>>>>>> >>>>>>>>>> On Fri, Mar 17, 2023 at 10:23 AM Thaina Yu <thai...@gmail.com> >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>>> Is this mean externref already usable? >>>>>>>>>>> >>>>>>>>>>> https://github.com/emscripten-core/emscripten/pull/15913 >>>>>>>>>>> >>>>>>>>>>> On Monday, 10 October 2022 at 22:56:34 UTC+7 >>>>>>>>>>> karl.we...@gmail.com wrote: >>>>>>>>>>> >>>>>>>>>>>> Does anyone have news on this topic? >>>>>>>>>>>> >>>>>>>>>>>> tli...@google.com schrieb am Montag, 25. Januar 2021 um >>>>>>>>>>>> 19:51:36 UTC+1: >>>>>>>>>>>> >>>>>>>>>>>>> I don't think so, but you can keep an eye on commits from >>>>>>>>>>>>> "wingo" and "pmatos" on reviews.llvm.org to keep track of the >>>>>>>>>>>>> progress. >>>>>>>>>>>>> >>>>>>>>>>>>> On Mon, Jan 25, 2021 at 12:55 AM ben layet <lay...@gmail.com> >>>>>>>>>>>>> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Thanks! >>>>>>>>>>>>>> Is there a feature ticket in a publicly visible ticket >>>>>>>>>>>>>> tracker that I can keep an eye on? >>>>>>>>>>>>>> cheers >>>>>>>>>>>>>> ben >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Saturday, 23 January 2021 at 17:54:25 UTC >>>>>>>>>>>>>> tli...@google.com wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> Not yet, but there are some folks working on this. Perhaps >>>>>>>>>>>>>>> it will be ready to use in a few months? It’s hard to say for >>>>>>>>>>>>>>> sure. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Sat, Jan 23, 2021 at 03:49 ben layet <lay...@gmail.com> >>>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Does emscripten support externref reference types for >>>>>>>>>>>>>>>> holding opaque handles to JS objects in C++? If not, any idea >>>>>>>>>>>>>>>> when? >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails >>>>>>>>>>>>>>>> from it, send an email to >>>>>>>>>>>>>>>> emscripten-disc...@googlegroups.com. >>>>>>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/7f6178fa-bd05-4f65-aa7c-9e5a405bf851n%40googlegroups.com >>>>>>>>>>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/7f6178fa-bd05-4f65-aa7c-9e5a405bf851n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>>>>>> . >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- >>>>>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>>>>> it, send an email to emscripten-disc...@googlegroups.com. >>>>>>>>>>>>>> >>>>>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/68c9b121-f12f-44fa-a91c-2a8b73d2f456n%40googlegroups.com >>>>>>>>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/68c9b121-f12f-44fa-a91c-2a8b73d2f456n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>>>>> . >>>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>> You received this message because you are subscribed to the >>>>>>>>>>> Google Groups "emscripten-discuss" group. >>>>>>>>>>> To unsubscribe from this group and stop receiving emails from >>>>>>>>>>> it, send an email to emscripten-disc...@googlegroups.com. >>>>>>>>>>> >>>>>>>>>> To view this discussion on the web visit >>>>>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/57b1491a-7025-4967-a66e-ebcbf10f5e2bn%40googlegroups.com >>>>>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/57b1491a-7025-4967-a66e-ebcbf10f5e2bn%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>>>> . >>>>>>>>>>> >>>>>>>>>> -- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "emscripten-discuss" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to emscripten-disc...@googlegroups.com. >>>>>>>>> >>>>>>>> To view this discussion on the web visit >>>>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/ed80516b-e1ac-4ba1-a535-acd1f632a2f5n%40googlegroups.com >>>>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/ed80516b-e1ac-4ba1-a535-acd1f632a2f5n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>>>> . >>>>>>>>> >>>>>>>> -- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "emscripten-discuss" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to emscripten-disc...@googlegroups.com. >>>>>>> >>>>>> To view this discussion on the web visit >>>>>>> https://groups.google.com/d/msgid/emscripten-discuss/e4853c85-e981-4fa4-a6d8-f64a7ad5c048n%40googlegroups.com >>>>>>> <https://groups.google.com/d/msgid/emscripten-discuss/e4853c85-e981-4fa4-a6d8-f64a7ad5c048n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>>> . >>>>>>> >>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "emscripten-discuss" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to emscripten-disc...@googlegroups.com. >>>>> >>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/emscripten-discuss/1018024e-ab04-46c1-bb22-f73183601976n%40googlegroups.com >>>>> <https://groups.google.com/d/msgid/emscripten-discuss/1018024e-ab04-46c1-bb22-f73183601976n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "emscripten-discuss" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to emscripten-disc...@googlegroups.com. >>> >> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/emscripten-discuss/8cb8c47e-fc87-4429-8dcd-1057c6f090f6n%40googlegroups.com >>> <https://groups.google.com/d/msgid/emscripten-discuss/8cb8c47e-fc87-4429-8dcd-1057c6f090f6n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "emscripten-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to emscripten-discuss+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/emscripten-discuss/82954f49-c753-4c67-8de7-e5524f1e7f0en%40googlegroups.com > <https://groups.google.com/d/msgid/emscripten-discuss/82954f49-c753-4c67-8de7-e5524f1e7f0en%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/emscripten-discuss/CAL_va284ecVzxTuXMO2ud5eJyFTEo3Ff6GG%2BkKEo9Zaeu1ttfg%40mail.gmail.com.