Tyjo to vypadá líp než Brython. Akorát pokud není ten wasm a pár JS nacachovaných v prohlížeči, tak první načtení stránky trvá docela dlouho - jako je to logické, ale stejně je to poznat :/
(takže spíš technologie pro intranety - jestli se vůbec toto označení ještě používá :-)
Hodně poznat...
Kdybych přistál na takovouhle běžnou stránku, nestihla by se načíst - dřív bych ji zavřel jako nefunčkní.
Nebýt prodlevy, je to super.
... což je ovšem přesně důvod, proč je WebAssembly a podobný a podobný přístup už dlouho nepoužitelný. Ono to není nic zase až tak nového, ale důvod, proč se to stále neprosadilo vidíte sám.
WebAssembly právě zrychluje načítání stránek, protože se kompiluje mnohem rychleji než JavaScript (a se zlomkovým množstvím RAM). Koneckonců dnešní webové stránky se loadujou na pomalých počítačích a mobilech dlouho ne kvůli rychlosti internetu, ale kvůli rychlosti CPU. WASM nemůže za to, že ho někteří používají stylem, že k aplikaci přibalí bez přemýšlení, co je z toho potřeba, 10+ MB frameworku a knihoven.
To je krásná teorie. Problém je, že režie kolem WebAssembly skutečně není jen kompilace do bytekódu.
Jenže tyhle problémy nejsou vlastností WASM. To samé máte s JS, když používáte velké frameworky, nebo dokonce transpilujete jiný jazyk, včetně jeho knihoven.
Problem to zda se je, kdyz se takto prenasi cely ekosystem. Takze to asi pro interpretovane jazyky moc resitelne neni, mozna tak jeste na urovni neceho minimalniho ve stylu Luy.
Je to tak. On ten projekt je hodně nový a píšou tam, že se snaží o urychlení. Ale vždycky tam nějaká pauza bude, to se současnou architekturou prohížečů nejde odstranit (IMHO). Taky celý WASM je ještě docela v plenkách :/ (po všech těch letech a "slavném" odpojení JVM bajtkódu je to docela zklamání).
Je tedy WASM v běžných prohlížečích skutečně pomalejší než JVM? V případě JVM byl AFAIK spíš problém v problematických appletech, tedy v tom rozhraní (jinak je to z těch VM asi nejdál, řekl bych).
PS: WASM je dneska spíše trošku zklamáním. Už skoro deset let se tvrdí, že to bude další masivně podporovaná platforma, ale tedy nic moc zatím (to je škoda imho).
Tak masivně celkem podporovaný je (např. už funguje všude včetně iOS a Android). Akorát je na lidech, jestli technologie na něm postavené budou používat (přímo v assembleru asi nikdo nepíše). A ta pomalost? Není to jen tím, že *některé* technologie postavené na WASM si staticky bez přemýšlení přikompilují tunu standardních knihoven? Zvyklé z desktopů a serverů (kde otočení aplikace trvá minuty - ale pak jede hodiny/dny/měsíce).
No za JIT se proste plati dlouhym casem spousteni. Jedine reseni je, ze by byly k dispozici nativni binarky, ktere by se browseru dodavaly podle toho, o jakou arch si rekne - ale ehm ehm bezpecnost
Moc nechápu, proč tolik lamentování. Nahrát do browseru bumbrlíčka v podobě celého CPythonu a v něm teprve spouštět skript v Pythonu, to prostě není dobrý nápad. A myslím že ani typické zamýšlené nasazení WASM.
A předpokládám, že i pro pyodide by bylo výhodnější vyjít z něčeho podobného RustPythonu. Nevěřím tomu, že se jim podaří rozumně upravit CPython pro daný účel. Tak třeba časem...
20. 9. 2022, 18:49 editováno autorem komentáře
To by bylo zajímavé vyzkoušet (a vlastně i lokálně, jak se RustPython chová v praxi).
Ono je u toho PyScriptu vidět, že trvá hlavně dotažení celého NumPy a Matplotlibu, ale to se není co divit, tam je strašně moc závislostí (což je u NumPy škoda, to by se dalo rozsekat a třeba jen natahovat to, co lidi potřebují, tedy maticové operace, a třeba LAPACK-like věci nedotahovat).
PS: jako není to ideální řešení, ale takto jsme to v IT dopracovali - co nejede v browseru (tedy původně prohlížeči statických dokumentů), se nasazuje blbě a zbytek GUI hodně zkomírá.
Když on je ten browser tak pohodlný. I primitivní html form bez JS, co vygeneruje get na py script s parametry, je tak pohodlný. Jen rozeslat URL - tady to je, hotovo. Místo obcházení stanic, instalací pythonů, ještě různé OS verze, kopírování skriptů...
Jo, kdyby to čék uměl, asi by to nějakým nástrojem na centrální správu šlo. Ale ten browser ... sériový port tam je, nějaká podpora USB taky a bude moct všechno běžet v browseru. Prasárna, ale tak pohodlná.
20. 9. 2022, 21:04 editováno autorem komentáře
jj ja naprosto souhlasim, ovsem stale plati ten povzdech "sem jsme to v IT dopracovali". A to po desitkach let vyvoje programovacich jazyku, virtualnich stroju, spravcu pameti atd. atd.
Proste styl Henryho Forda - jasne muzete si v browseru spoustet appky psane v jazyce, ktery si vyberete ... za predpokladu, ze si vyberete JavaScript.
WASM je podstatně lépe navržené (přesněji řečeno, není to drsný hack). Ale jinak přesně: tam, kde člověk chce kompatibilitu a předvídatelnost se mi asm.js vlastně osvědčilo o dost lépe, než WASM. Což je asi dané tím, co obojí je.
Jako jo a je to zvláštní - programátorský instinkt mě říká, že prostě WASM musí být už z principu rychlejší, než interpretace omezeného JS. asm.js se provádí hodně rychle, takže JIT JavaScriptového VM je asi hodně dobrý oproti WASMovskému interpretru/JITu (ale blíž jsem to ještě nezkoumal, trošku se snažím si držet od frontendu odstup :-)
Já to trochu zkoumal a ano, ten JIT překladač (přinejmenším JSC a V8) je dobrý, ale rychlý kód z principu generuje jen pro typově stabilní kód. Je to jako v Julii, která je taky dynamicky typovaná, ale pro typově stabilní (nebo dokonce typově ukotvený) kód generuje hodně rychlé binárky (na úrovni C++ a Rustu). Jenže Julia má typové anotace, kdežto v asm.js jde o ošklivé a vesměs nahodilé hacky. Ale princip je stejný, jen typově stabilní kód lze přeložit efektivně.
jj ty typové triky (x = +x, y = y|0, nějaký kontroly, jestli jsou pole homogenní a další věci, na které jsem zapoměl) jsou určitě zajímavé - na čistě dynamicky typovaný jazyk.
Ale stejně si pořád říkám, že WASM (nebo jiný podobný bajtkód, tedy vlastně hlavně JVM) už tyto operace má předpřipravené, tedy obsahuje "typové" instrukce v bajtkódu. S tudíž by přeskočením této operace měl být rychlejší.
Takže jde spíš o to, že do JITu JS se už nainvestovalo spousta úsilí, kdežto WASM asi velcí hráčí až tak nepotřebují, tak se to moc neřeší (a nebo se převodem do bajtkódu informace ztrácí - což je pravda - takže je JIT trošku ve špatné pozici).
“do JITu JS se už nainvestovalo spousta úsilí”
Jo, to je jasně vidět. Podobně jako v případě Javy, tam do JIT také nalili obrovské prostředky a je to sakra znát.
Je to dobry napad, ale je to vhodne pro specificka pouziti (data science v browseru).
WASM je take vhodny jen pro specificka pouziti, napr DosBox, nema nahradit JS pro psani DOM manipulujicich webovych aplikaci.
Jenže pořád nevím, proč má být data science počítána v browseru. Pořád si můžu i na lokálním počítači spustit server v Pythonu (nebo něčem jiném) a počítat v serveru. I ten browser by si to mělo být schopné pustit.
Kdyz si chci neco jen zkusit, nechci nic instalovat.
Napadaji me ruzne platformy pro sdileni notebooku, ktere nechcete spoustet primo na lokalnim pocitaci z duvodu bezpecnosti. Navic na windows casto ani vsechny zavislosti nejdou nainstalovat.
Mě se celkem líbí jupyter-lite, jen by to chtělo zapracovat na backend storage (aby si například člověk mohl otevírat notebooky přes WebDAV, S3, whatever). Pak by to byla ideální platforma na sdílení notebooků. Z představy, ze bych provozoval jupyterhub na mě padají mrakoty. Už vidím, jak uživatele bojují o server resources, protože nejsou nejostrejsi tužky v penále a přes pandas sql si nactou do paměti tabulku s bilionem záznamu. Když si odstřelí svůj vlastní browser/PC je mi to vcelku jedno.
Zajisteni dostatecne serverove kapacity u platformy s volnym pristupem neni mozne.
Nebylo by napriklad skvele mit interaktivni notebooky na githubu?
Tak ono i v pomerne kontrolovanem prostredi korporace, zajistit a zmanagovat resources pro BI oddeleni, kdy analyst neresi, co se stane kdyz naleje do pandas nekolik stovek milionu radku. V tu chvili vsichni ostatni maji tendenci na vas kricet cosi o vasi kvalite a vy jim mate chut rict, uklidte si mezi sebou. A toto plati i v databazich, mel jsem ve sprave server co mel 2TB RAM na SQL server pro BI analytiky a stejne se mezi sebou prali o resources a to jsme je managovali pres resource governor workload groups a stejne to nepomohlo. 20 lidi bylo schopno poslat ten server do kytek. Clovek se muze snazit vest je k optimalizacim jak chce, ale vetsinou bez vysledku, oni optimalizuji jen v okamziku, kdy uz neni zbyti a dotaz jim proste nebezi vubec.
Tak jak jinak dostat do browseru neco jinyho nez JS? Bud transpilace (ale to taky neni vyhra), interpret prepsany do JS nebo prave WASM ne?
No ano, takhle, jenomže pro <i>běžné</i> pouití to prostě není jak píše. Pro speciální aplikace ano, to ostatně platí pro celý WASM obecně.
imho poznámky k "urychlení":
1. Použití pyodide v pyscriptu je v současné verzi implementována nevhodně, kdy vm pythonu běží ve stejném threadu jako browser a interpretace pythonu, tak blokuje ui.
Pyodide přitom má podporu [web worker]
(https://pyodide.org/en/stable/usage/webworker.html), ale pyscript ji na rozdíl od jiných projektů (založených na pyodide) nepoužívá...
2, Rychlost načítání cpythonu, modulů etc: (pokud neuvažujeme bloatware dodaný pyscriptem) je pro "čisté" pyodide následující:
At present a first load of Pyodide requires a 6.4 MB download, and the environment initialization takes 4 to 5 seconds. Subsequent page loads are faster since assets are cached in the browser. Both of these indicators can likely be improved,
pyodide roadmap
3. Rychlost samotného běhu pythonu ve wasm:
Pyodide is currently around 3x to 5x slower than native Python.
At the same type, C code compiled to WebAssembly typically runs between near native speed and 2x to 2.5x times slower..
pyodide roadmap
Významné téma, díky za něj.
Z hlubin zapomnění si dovolím vylovit prohlížeč Grail z roku 1995, který podporoval spouštění Pythonu na straně klienta. https://en.wikipedia.org/wiki/Grail_(web_browser)
Pohledem do seznamu transpilerů do JS:
https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-JS
když si představím ty milióny člověkohodin, tak věnovat tohle úsilí jinam, s nadsázkou, už bychom měli základy na Marsu i Venuši.
Dlouhodobě to vnímám tak, že jsme se cestou, "prohlížeč je nový operační systém", spálili spoustu energie, protože a to prohlížeče nebyly vhodně navrženy.
WASM mi přijde jako jednooký mezi slepými, tak doufám, že nabere dech a pořádně rozjedou vývoj.
Neboj. Spoustu energie jsme spálili i na řešeních nevyužívajících webový prohlížeč. Holt řešení postavená na něm vyhrála jako ekonomicky nejvýhodnější.
Vem si třeba takové Qt. Asi nejznámější UI framework mimo webový prohlížeč, a taky jsou s ním problémy. Nejen komerční (cena), ale i opensource aplikace (updaty) mají problém s jeho licencí.
Základ webového prohlížeče je zadarmo a prostě funguje. V Qt 6 např odstranili třídu, která zapouzdřovala GPU akcelerované kreslení do OpenGL (ES)-like. Nově si máš napsat vlastní renderer pro každý OS zvlášť (DirectX, Metal*, OpenGL). A pokud zůstaneš u opensource aplikace u Qt 5, tak updaty (hlavně bugfixy a security fixy) dostáváš s ročním zpožděním. Tohle je realita např projektu Krita.
*) Pro Metal potřebuješ skutečný Mac, protože ve VM na něj nejsou ovladače.