Running WebAssembly and WASI with .Net

(ericsink.com)

65 points | by mouldysammich 1829 days ago

5 comments

  • indentit 1828 days ago
    This is super exciting for me, as a C# developer. I'm fed up of needing (to learn how) to compile C++ projects for each platform so that I can reference them from .NET Core. The idea of just compiling them once for WebAssembly/WASI and only needing to ship one copy of each binary dependency is quite freeing and makes cross plat functionality easier.
    • pjc50 1827 days ago
      You can compile C++ directly to MSIL if you want...
    • fxfan 1828 days ago
      You're in luck- MS released a WASM GUI kit- Blazor
      • nicoburns 1827 days ago
        I think this is about c++-in-wasm-in-C# rather than c#-in-wasm. It's an (arguably) better way of doing FFI without having to worry about compiling the C++ dependency.
        • tracker1 1827 days ago
          Not to mention, cross platform (think x86, arm AND linux, mac, windows) from a single compile target.
        • arethuza 1827 days ago
          Presumably you have to compile the C++ once to wasm though?
          • tybit 1827 days ago
            Yeah you would, though having a common compile to target would hopefully make it easier to find pre compiled wasm binaries.
            • WorldMaker 1827 days ago
              Right, some libraries are already getting official and semi-official wasm targets for the Node JS ecosystem. It would be interesting to "borrow" an existing wasm binary from npm and simply rehost it on the .NET CLR or JVM.
              • tracker1 1827 days ago
                Absolutely... I have a suspicion that Node may actually expand its' presence as a defacto runtime for wasm outside the browser.
  • oblio 1827 days ago
    Eric Sink is a great developer and blogger. If you have a bit of time, do yourself a favor and go through his entire archive ;)

    -> https://ericsink.com/tocs/topics.html

    • acemarke 1827 days ago
      Yep. One of my all-time favorite blog posts anywhere is his 2003 post "The .NET Abstraction Pile", where he lists 40-some different abstraction layers involved in clicking the "Check In" button in a networked version control system:

      https://ericsink.com/Abstraction_Pile.html

      A particularly good quote:

      > I stop whenever I get to Physics or Chemistry. For my purposes, light is real, not an abstraction.

  • mikece 1827 days ago
    This reminds me of the early days of .NET when COM objects could be used with a shim that allowed .NET applications to consume existing COM components... but the lifecycle and memory management of those objects were beyond the ability of .NET to control and an error in the COM object could still crash your .NET app even though the loading and unloading of the COM component was wrapped in a try/catch... such frightful memories! I'm curious how the GC/exception handling story will be different by going through WASM to MSIL as opposed to the days prior to framework 2.0 and COM components.
    • magicalhippo 1827 days ago
      From the article:

      > Whatever you call it, what this project does is take a WebAssembly module and convert it into a .NET assembly on disk.

      So running such code should be no different than any other .Net code in that regard.

      • youdontknowtho 1827 days ago
        yeah, assuming that I've not got the wrong end of the stick, you could still have all the usual C/C++ issues take down your process. Although, seriously...pinvoke and the like are a PAIN. This is really interesting. Cheers.
        • magicalhippo 1827 days ago
          As far as I understood, this project emits CIL (MSIL), and does not rely on PInvoke.

          As such I don't see how it wouldn't play nice, unlike PInvoke/COM stuff, which is native code doing whatever native code feels like.

  • lostmsu 1827 days ago
    A cool project indeed!

    I wonder thought if one could just build CIL backend for LLVM.

  • CodeCube 1827 days ago
    This is madness ... awesome madness