Jump3r 9 hours ago

Hey, Kuba from team working on Popcorn here. I wasn't expecting it to be posted on hn but here we are. Feel free to ask me any question.

pesnk 12 hours ago

Congratulations on the project! It works great, until we need to handle the best part of Elixir, that's creating multiple actors.

This Task code, for example doesn't work.

  Enum.map(0..10, fn(_) ->
    Task.async(fn -> IO.puts("new process") end)
  end) |> Task.await_many()
  • mathek 8 hours ago

    Tasks seem not to work indeed, but spawning processes works. Try

      Enum.map(1..10, fn _i ->
        spawn(fn -> IO.puts("new process") end)
      end)
    
    Also, there are two scenarios: compiling code in the browser and running it, and running precompiled code in the browser. In the latter case more things work, for example the 'game of life' example uses GenServers, Supervisors and Registry:

    https://popcorn.swmansion.com/game_of_life/

    https://github.com/software-mansion/popcorn/tree/main/exampl...

    But yes, it's still unstable. Improving the stability is our main focus right now.

Lord_Zero 11 hours ago

I'm honestly surprised at how slow WASM is moving. As a very experienced web dev, when I first learned about WASM I was sure people would be building production UIs in Python and Golang and other traditionally server-side languages.

  • afavour 9 hours ago

    That’s actually what I feared the most and I’m glad we haven’t seen it happen.

    Python and Go are not small languages, making users download entire runtimes to do something that can be done fine without them would be a huge shame. The performance problem with web UI is the DOM, not JavaScript.

    • camdenreslink 5 hours ago

      I kind of thought popular runtimes would just be bundled with the browser if we could get an "official" enough source (e.g. Python Software Foundation or Google). Then users wouldn't need to download a million different versions and sources of Python for each website.

    • hinkley 6 hours ago

      At least with Go static analysis should allow you to tree shake the bits you aren’t using.

      The problem with the CDN solution was always that it assumed that everyone would be on a couple versions and that never happens. With success comes more contributors and with more contributors come more point releases and more users who are not on the latest version.

      So soon you could have five versions for five sites you visit.

    • lylejantzi3rd 9 hours ago

      You can mitigate some of that with web workers, but it's a shame that multiple websites can't share a python runtime the same way they can on a shared linux box. You have to download a separate one for every website that uses it. But, if you follow that train of thought to the end, you wind up with the browser itself bundling those runtimes, just like it did with Flash back in the day.

      I'm not sure any of this would be an improvement over what we have now.

      • chii 9 hours ago

        the only good reason to build these runtimes is to enable existing applications to be recompiled into wasm for use inside the browser - it doesnt make sense to greenfield an application that uses non-web UI libraries, only to then bundle the entire UI runtime with it.

  • eterm 11 hours ago

    Well there's blazor, which does that rather well, but it's treated with the same suspicion that most MS frameworks are. The fear that it'll be killed for poor adoption, leading to poor adoption.

    The blazor adoption probably isn't even that bad, but it's hard for MS to shake this stigma since so many people got burned on Silverlight and don't ever want to make the same mistake.

    • throwawaymaths 11 hours ago

      I thought blazor failed because people didn't like websites that take minutes to load up all the websites assets. I'm not sure why, it could be:

      - Technical issue with blazor performance or blazor makes perf regressions hard to fix

      - blazor technical framework encourages programming style that is bad for perf

      - blazor or blazor ecosystem attracts programmers that can't deal with perf issues

      • josephg 10 hours ago

        As I understand it, blazor really needs WasmGC in order to have good performance and small bundle sizes. Otherwise, blazor is forced to ship a GC inside the wasm bundle - and that adds a lot of weight. And it also makes it more complex to share C# objects with javascript.

        WasmGC is supported in all browsers + nodejs now, but its still pretty new. Safari only started shipping it in December last year. I'm not sure if wasmgc is the default build for blazor, or what the status is on it.

        Blazor should be able to be good, small and fast. (Maybe even smaller than rust web frameworks.) But I don't know if we're there yet.

        • chris_pie 5 hours ago

          .NET doesn't use WasmGC because Microsoft found it too different from how .NET's GC works. Which is quite unfortunate

        • lylejantzi3rd 9 hours ago

          Doesn't Blazor include the entire .net core runtime? Or has that changed?

  • Muromec 11 hours ago

    Wasm doesn help much with UI, its more about moving parts of the server into the client as blacboxes with no access to dom.

    The blackbox can of course return the state of UI to be rendered/pathced, but that doesnt unlock much (if any) interesting capabilities for amount of overhead it adds

  • jcmontx 7 hours ago

    That's what the .NET folks have been doing for many years now. Blazor is .NET on the client-side

  • IshKebab 7 hours ago

    I really hope nobody plans to make web front-ends in Python. Jesus.

Muromec 13 hours ago

AtomVM is something like 1m when compiled, isn't it?

  • mathek 8 hours ago

    Compiled to WASM it's ~700K, gzipped only 190K. But there's also BEAM code - the whole standard library is ~3M gzipped. We plan to do tree shaking to only include the used parts of the stdlib - then it should get way smaller for most use cases.

    • Muromec 4 hours ago

      That's a lot of wasm and beam. I tried to do it the other way -- compile beam straight to wasm and it seems to work in straightforward cases, producing wasm binaries in kilobytes sizes. With wasm fx it's even possible to do processes natively. You can find the link in bio.

      Cool thing would be to somehow wire it up to liveview to make it possible to run some parts on the frontend side transparently.

      I'm not doing any active development on it right now, but it looked pretty doable when I tried last time.

nelsonic 14 hours ago

Very promising. But still not stable. One to watch.