Souhlas JS je dnes nehorázná slátanina. Otázkou je co s tím, jesti se pokoušet vytvořit nový univerzální high level jazyk, nebo přejít na nějakou formu bytekódu s low level API browseru s tím, ať si to lidi píšou v čem chcou a pak zkompilujou do něčeho, čemu bude prohlížeč rozumět. Výše zmiňované web assembly je sice hezké, ale jaksi muchybí API browseru, co má JS.
Ten bajtkód, do kterého ať si každý překládá, jaký jazyk chce, je právě WebAssembly. Je v plánu, že bude mít přístup k WebAPI – akorát to prostě bude nějakou dobu trvat, než se to implementuje a standardizuje. Začínat teď s něčím novým by nedávalo smysl, protože by to dohromady trvalo stejně dlouho, jako WebAssembly, akorát by se zbytečně zahodilo to, co už se na WebAssembly udělalo, takže kompletní výsledek by byl o to později.
Co WebAssembly zatial spravilo? Poslednych 5 rokov som nezaznamenal ziaden progres, ziadne zlepsnie stavu interoprability s DOM ani s inymi funkciami v prehliadaci. Stale na cokolvek treba volat JS.
Ako ja by som chcel konecne prejst na WebAssembly, ale mam pocit, ze s nim tvorca prehliadacov nerobi nic, naopak do JS sa katdy rok pcha az nezmyslny syntakticky cukor a nove API.
Já chápu WebAssembly jako původní pluginy (Flash, Java, ActiveX, ...). Na zbuildování desktopových GUI aplikací to stačí (GUI aplikace běžící v prohlížeči, např. C++ a Qt, nebo C# a moderní Windows UI; je to používáno i na lokálně běžící DosBox na starý hry; ukázáno to bylo i na Quake3). Stačí i na zkompilování linuxových konzolových utilit běžících ve WebWorkerech (JS kód je frontend k utilitě, kterou volá v pozadí). Nic z toho není třeba přepisovat do webových technologií, a tím myslím že ani (nedokonalá) transpilace není potřeba.
S DOM podle mě není třeba pracovat, protože GUI aplikace běží ve svém rámečku a okolí ji nezajímá, a konzolové utility běží v pozadí. Jestli čekáš, že budeš např v C++ měnit barvičky elementů na onchange jiného elementu, tak to je WASM kanón na vrabce.
EDIT: Podobná situace je s Javou na Androidu. ta je tam vždy jako ten spojovací prvek na API OS (i když 99 % kódu aplikace je v C++, C# , whatever, co jde zkompilovat do DLL s C interfacem).
10. 8. 2022, 12:13 editováno autorem komentáře
oss: WebAssembly zatím udělalo to, že je v prohlížečích implementovaná ta první vrstva, která umožňuje vůbec spouštět nějaký kód. Tj. je implementovaný WebAssembly runtime. To je podle mne implementačně vůbec nejsložitější část. Teď se řeší podpora vyšších úrovní jazyků – GC, výjimky apod. Podpora pro WebAPI je na řadě až po té.
Web Assembly není nic, co by se mělo začít používat teď hned. Je to dlouhodobý projekt, kdy je jasné, že je lepší mít v prohlížeči obecný virtuální stroj a ne interpret trochu divného jazyka. Ale není kam spěchat, protože JS zatím stačí, adopce WebAssembly stejně nebude kdovíjak rychlá, takže je lepší to dělat pomalu a pořádně, otestovat, jestli je to dobře navržené, než se to navěky zabetonuje do prohlížečů.
Web Assembly není a ještě dost let nebude ve stavu, aby se na něj konečně přecházelo. Je to tak, že ho občas někdo ve specifických případech může použít.
To je jako nadávat na C++, že ještě nemá GC. Přitom máte naprostou svobodu a můžete si udělat vlastní. Takové projekty už běží i pro WASM (pro usnadnění kompilace jazyků s GC, např Java). A co furt máte s tím DOMem? To fakt chcete měnit barvičky elementů v C++? Si najděte knihovnu nebo sám zapouzdřete tu glue vrstvu.
oss:
> To fakt chcete měnit barvičky elementů v C++?
Ano chcem a nie len s C++ ale s cohokolvek co sa dak skompilovat do wasm. Chcem mat konecne slobodu vo webovom vyvoji.
Priznam se, ze tak bych to chtel take.
Ale musim akceptovat, ze existuji programatori, kteri pracuji podle nejake vlastni nebo 'moderni' programatorske filozofie a filozofii, jakou se ridim ja proste neakceptuji.
Ja patrim k te generaci programatoru, kteri vyrostli s C a pracuji a resim problemy jak to doporucoval Dennis Ritchie -> minimalisticky jazyk, za pomoci ktereho vytvarim nastroje, pomoci kterych pak resim konkretni zakaznicke pozadavky.
A to je ta svoboda, o ktere mluvite. Take bych si ji pral.
oss: Je klidně možné, že na GC budeme čekat pět let. WebAssembly není nic, na co by se čekalo – je to jenom zjednodušení některých věcí. Ví se, že transpilovat vše do JavaScriptu není ideální řešení, takže je vhodné někdy v budoucnosti JS nahradit bajtkódem. Ale není to nic akutního. Tak se na tom beze spěchu pracuje, aby to někdy v budoucnosti bylo.
Mimochodem, teď si stěžujete, že JavaScript byl ušit horkou jehlou a chtělo by to nahradit ho něčím lepším. Jenže nahradit něco ve světě prohlížečů je strašně těžké – musíte počkat, až to začnou podporovat všechny prohlížeče, pak se to může začít používat, a pak zase musíte počkat, než se to staré přestane používat i na historických webech, abyste to staré mohl z prohlížeče odstranit. A vy byste chtěl, aby se s WebAssembly spěchalo, udělalo se tak, že se bude špatně používat, a za pár let se řešilo to samé, jako teď s JavaScriptem?
Tu je vsak veky rozdiel medzi skriptovacim jazykom a bytecodom (kde su prakticky len dva smery, ktoprymi sa moze uberat). Pricom mame velmi dobre piklady dobrych bytecodov aj s GC - Lua, java bytecod, C# bytecod...
Par schopnych inzinierov to daokaze dat za par mesiacov a nehcal by som dva roky na pripomienkovanie od komunity.
Navyse ak by na nom prtacovali co i len tyzden, tak horsie ako javascript to nebude :D
Tak problémy JS nejsou o tom, že by za týden nešlo vymyslet lepší jazyk (i díky zkušenostem s dřívějšími jazyky, což tehdy přeci jen nebylo). Ale o tom, že další vývoj musel zachovat kompatibilitu.
Ještě k tomu DOM: Díky WASM můžete na UI použít třeba C++ a Qt a žádný HTML DOM vás nezajímá. Plochu, kam budete kreslit, jednoduše roztáhnete přes celou stránku.
12. 8. 2022, 08:57 editováno autorem komentáře