WebAssembly from the Ground Up

(wasmgroundup.com)

113 points | by gurjeet 5 days ago

8 comments

  • fooker 5 minutes ago
    What's the state of wasm for porting multi-process code?

    I want to run something that execs a command line tool, both in the browser. Doable yet?

  • pdubroy 3 hours ago
    Hi HN! Co-author of the book here, happy to answer any questions you have.

    Beyond the sample chapters which are linked from the landing page, we also have a couple blog posts which may be interesting:

    - A WebAssembly Interpreter: https://wasmgroundup.com/blog/wasm-vm-part-1/

    - An older blog post, "A WebAssembly compiler that fits in a tweet" (https://wasmgroundup.com/blog/wasm-compiler-in-a-tweet), was also on HN earlier this year: https://news.ycombinator.com/item?id=42814948

    • dboon 2 hours ago
      It looks good! I may pick up a copy. Besides the convenience, why do you recommend your book over reading the WASM spec as you implement your basic compiler? I find that WASM has a beautifully readable spec. One of its best features!

      Either way, I’ll likely buy a copy to support the hard work on a piece of tech that I am very fond of

      • pdubroy 2 hours ago
        Thank you!

        I would 100% agree that the spec is quite readable. At the top of our Minimum Viable Compiler chapter, we say:

        > The binary module format is defined in the WebAssembly Core Specification. You’ll notice that we back up many of our explanations with reference to the relevant part of the spec. One of our goals with this book is to convince you that the spec is a valuable resource that’s worth getting familiar with.

        I think the spec is great as reference material, but we wrote the book to be more of a tutorial. We've talked to many people who say they've looked at the spec, but find it too overwhelming. For those people, we hope the book provides a good structure that ultimately helps them become comfortable with the spec!

      • dmpk2k 2 hours ago
        Doing is a far better way to learn than just reading.
    • AndruLuvisi 29 minutes ago
      Does it cover tail calls?
      • pdubroy 12 minutes ago
        No, it doesn't — not this version of the book at least. We only cover WebAssembly 1.0.

        2.0 was announced just a few weeks after we launched the book, and 3.0 a few months ago. And with 3.0 (which added tail calls), the spec has more than doubled in size vs 1.0, so it would be hard to cover everything.

        We've talked about doing a new chapter to cover some of the interesting parts of 2.0 (e.g. SIMD), but covering everything in 3.0 (garbage collection, typed reference, exception handling, tail calls…) feels almost like an entire 2nd book!

        • marianoguerra 3 minutes ago
          Co-author here.

          if you are interested in tail calls you just need to understand the call instruction which we cover in the book and then replace it with either:

          - return_call <funcidx>, the tail-call version of call

          - return_call_indirect <tableidx> <typeidx>, the tail-call version of call_indirect

          More info here: https://github.com/WebAssembly/tail-call/blob/main/proposals...

  • gurjeet 4 hours ago
    I don't remembering submitting it today; it must be from the second-chance pool. Good to see my submission on the frontpage, though :-)
  • kyranjamie 2 hours ago
    Great work, would love to learn more about Wasm.

    I can't help but notice that in the editor screenshots there's type information in *.js files.

    • pdubroy 1 hour ago
      Ah, good catch! I see them in one of the screenshots. Those are just inlay hints, they're not in the source code. (The editor is https://zed.dev)
  • chasil 4 hours ago
    I like PHP because it allows access to core system calls on any platform.

    I see runtime interpreters as constraining when a system call is needed, but proscribed.

    • boomskats 2 hours ago
      > I like PHP because it allows access to core system calls on any platform.

      Lots of people _love_ PHP precisely because of the size of its attack surface.

      Do you have any examples of something you've built in PHP which benefitted from direct syscall access?

      • dilawar 1 hour ago
        I keep hearing about this. I occasionally use PHP8 and so far I'm pretty happy with it. Is there any resource that teaches about security issues with modern PHP (version 8.x)?
    • haykuro 3 hours ago
      You don't want to use PHP (a server-sided language) to solve a client-side problem.
      • folkhack 3 hours ago
        PHP devs: "hold my beer."
  • James_K 1 hour ago
    Personally, I learned Web Assembly by reading through the spec. Can't recommend it more. It's extremely well written.
    • pdubroy 38 minutes ago
      I agree, it really is quite approachable.
  • skybrian 3 hours ago
    Is there a Github repo for code associated with this book?
  • patrick4urcloud 3 hours ago
    nice job