[HN Gopher] Python 3.11 in the Web Browser
___________________________________________________________________
Python 3.11 in the Web Browser
Author : tosh
Score : 125 points
Date : 2022-03-26 20:35 UTC (2 hours ago)
(HTM) web link (2022.pycon.de)
(TXT) w3m dump (2022.pycon.de)
| teddyh wrote:
| > _there is one place that Python has not yet conquered: the
| browser_
|
| Well, there was that one web browser written in Python, with
| built-in Python scripting support: Grail.
| stavros wrote:
| I find WASM in general very cool. Is there a way to run a WASM
| "binary" locally? For example, can I distribute a program as WASM
| and execute ./mywasmprogram and have it run?
|
| I imagine I need a WASM runtime installed, and to somehow get my
| shell to recognize that WASM programs should be loaded with it
| (for lack of a hashbang line), but is that actually doable?
| simonw wrote:
| Yes, definitely. Wasmer is one way to do that:
| https://docs.wasmer.io/ecosystem/wasmer/getting-started
| stavros wrote:
| Excellent, thank you! I knew of Wasmer but didn't realize
| that's what it was. I look forward to the day where we can
| just distribute one architecture-independent binary.
| wffurr wrote:
| Like a .jar file?
| teddyh wrote:
| Note: There was some discussion of Wasmer here a couple of
| days ago: https://news.ycombinator.com/item?id=30758651
| gmatejka wrote:
| You can also use node to execute webassembly programs.
|
| You do have to create a js host file, load in your webassembly
| and then run it with node.
| mcintyre1994 wrote:
| I'm a big fan of Python in WASM! It really reduces the friction
| of playing around with things. Something I find pretty useful
| that I hacked together using it is https://pyground.vercel.app/ -
| I use it whenever I have a CSV or JSON file I want to do some
| poking around in using Python.
|
| You can just drag and drop a file in, it'll be imported in as the
| 'data' variable, and then you can run Python code/do matplotlib
| visualisations without installing anything.
| wishawa wrote:
| Have you seen Skulpt [1]? It doesn't do matplotlib (or most
| other library) but it's pure JS.
|
| [1]: https://skulpt.org/
| mcintyre1994 wrote:
| Ah yep! I came across it a few years ago when I was chatting
| to the team at anvil.works, they were using it for their
| client side python. Looks really cool, really ambitious and
| impressive project.
| syrusakbary wrote:
| I'm super excited about this being integrated upstream.
|
| Long ago we compiled Python 3.6 and published to WAPM:
| https://wapm.io/python/python (you can run it online there!)
|
| I wonder if we could publish the new version also! I think we got
| the Python repl properly running so it would be interesting
| trying to have that working on the new version too
| nabakin wrote:
| Found his work
| https://github.com/tiran/cpython/tree/wasi/Tools/wasm
| pjmlp wrote:
| The irony is that in the old plug-in days ActiveState did had a
| Python plugin for the browser.
| jeremycarter wrote:
| We've gone full circle
| modeless wrote:
| I really, really wish it were possible for wasm modules like this
| to be shared between sites. That is, python.org could host an
| official wasm module, and the first time you visited a site using
| python the browser would download and compile it once and cache
| the result, and then any other website could use python with no
| download size or load time penalty. But unfortunately privacy
| concerns killed this utopia. Caches are now partitioned per
| origin, so every site that uses python has to download and
| compile the wasm module separately even if it's the exact same
| module from the same place, and that is unlikely to ever change:
| https://developer.chrome.com/blog/http-cache-partitioning/
| xpressvideoz wrote:
| Wait, so the traditional "use the JavaScript CDN as a cross-
| site cache" method does not work anymore? How did I not know
| that!
| simonw wrote:
| It was a huge privacy hole: malicious pages could measure how
| long it took for URLs to load and use that to tell which
| other sites you had visited in the past.
| heavyset_go wrote:
| I think it would be cool if browsers shipped with WASM-compiled
| interpreters and runtimes for other languages, like they do with
| JavaScript.
|
| That way you'd be able to use other languages in the browser
| without needing users to download 20MB of a WASM-compiled
| interpreter just to run 1KB of code.
| kristopolous wrote:
| That's what the old plugin architecture was about. People use
| cdns to try to emulate that benefit but it's not the same.
|
| Haven't seen a good hybrid solution, it probably exists already
| and is poorly utilized
| klodolph wrote:
| You're still downloading the 20MB WASM-compiled interpreter,
| it's just that now you're redownloading it every time your
| browser updates.
| sieabahlpark wrote:
| heavyset_go wrote:
| Yes, but that's the point, if the user has it installed by
| default then there won't be much of a penalty if a website
| chooses to use another language than JavaScript.
|
| Right now, WASM interpreters only really make sense for
| teaching and exposition with REPLs, where the user probably
| won't mind large downloads in order to do something out of
| the ordinary. Shipping interpreters would instead make that
| ordinary.
| klodolph wrote:
| It's still a big penalty, you're just changing who pays the
| penalty, when they pay the penalty, how often they pay the
| penalty.
|
| Personally, I'm pretty happy that we have WASM at all, and
| I think there's a lot of work we can do (over the next
| years) to make interpreters that work well in WASM.
| [deleted]
| krapp wrote:
| > it's just that now you're redownloading it every time your
| browser updates
|
| There's no reason browsers couldn't have a persistent cache
| for this. Think of it more as an integrated dependency
| manager and VM that just happens to use web infrastructure.
| No one would blink at downloading 20MB of dependencies
| anywhere else, after all.
| klodolph wrote:
| Browsers _already_ have a persistent cache!
|
| If you're downloading it on-demand and caching it, why
| would it need to be integrated in the browser at all? Why
| not just stick it in a CDN and treat it like a regular
| file, the way it works right now?
| krapp wrote:
| > Browsers already have a persistent cache!
|
| And yet whenever this comes up, someone always insists
| that you'd have to re-download the entire thing with
| every request, as if caching wasn't a thing.
|
| As far as shipping vs caching goes, I see no reason not
| to do both. Maybe ship with the latest version of a few
| popular languages including javascript already pre-cached
| and allow for downloading others as required. I don't
| know what would be more optimal. Maybe when you download
| a browser, you can select language support options.
|
| My point is, this is just an implementation detail, it
| doesn't have to be awkward or inefficient.
| tester756 wrote:
| >WASM-compiled interpreters and runtimes
|
| in which version?
| 999900000999 wrote:
| I'd love that too, if I was a better programer I'd likely fork
| Chromium and build in Python support.
| spicybright wrote:
| xapata wrote:
| You could have asked for benchmarks without saying, "Yaaawn." I
| think the author would be more likely to volunteer to improve
| the code if it were encouraged rather than yawned at.
___________________________________________________________________
(page generated 2022-03-26 23:00 UTC)