4 ms·
Couldn't you just sent the bytecode .pyc instead to fix the no minification issue?
by skocznymroczny 6y ago
Couldn't you just sent the bytecode .pyc instead to fix the no minification issue?
- meredydd 6y agoThis is exactly what BeeWare's Batavia does: compile to bytecode server-side, then run a remarkably small interpreter in the browser. This is a substantial win: parsing is a CPU hog, and Brython's architecture does it every time the page loads. That said, in order to support `eval` and friends, you still need a full-fat compiler in the browser. So the best route is probably to use a full-service Python->JS compiler, but compile most of the code ahead of time. That's where we're heading with Anvil (we use https://skulpt.org https://skulpt.org for the client side, but it's the same principle). My colleague wrote up a pretty wide-ranging comparison of browser-based Python interpreters. It describes how (and why) Brython, Batavia, Skulpt, Transcrypt, and Pyodide differ, and the tradeoffs they're chasing: https://anvil.works/blog/python-in-the-browser-talk https://anvil.works/blog/python-in-the-browser-talk
- StavrosK 6y agoIn twenty years of professional Python development, I've never used eval once. I'm not saying nobody ever needs it, but it's a niche feature that the vast majority of programs can do without, and is probably not worth the tradeoff.
- jononor 6y agoYou probably have used a Python REPL though? Either on commandline or in iPython shell or similar. This relies on eval type functionality somewhere in the chain.
- _ZeD_ 6y agohave you ever used namedtuple? then you have: https://bugs.python.org/issue3974 https://bugs.python.org/issue3974
- duckerude 6y agonamedtuple could be implemented without exec/eval, and nowadays, it almost is. This is the only part left that uses it, to create the constructor: https://github.com/python/cpython/blob/master/Lib/collections/__init__.py#L430 https://github.com/python/cpython/blob/master/Lib/collection... Even there it's not strictly necessary. You could accomplish the same thing with a variadic function that does its own argument parsing, it'd just be slower and not play as well with reflection. So you could port it to a Python implementation without eval().
- danijar 6y agoIt's necessary if you want to offer an interactive Python shell in the browser, e.g. for websites that teach programming or otherwise use programming as a means of user interaction.
- airstrike 6y agoWhich is like 0.0001% of the web
- weego 6y agoThis is just a python interpreter. pyc is useless here
- pletnes 6y agoThe interpreter interprets bytecode, i.e .pyc
- cellularmitosis 6y agoWhitespace isn't the important part of minification. Content-encoding: gzip can handle that.