WebAssembly: Webový "assembler" rubrika: Programování: JavaScript

8 xxar3s
položil/-a 15.3. 11:59
 
upravil/-a 15.3. 12:00

Všimol som si že pár vyšších jazykov už podporuje kompilovanie do WebAssembly (ďalej WASM).

  1. C++ na prevod používa emscripten (emcc / em++) čo je modul pre clang, ktorý prevádza LLVM do WASM
  2. Rust - nakoľko je to jazyk od vývojárov mozilly - tiež podporuje prevod do WASM
  3. môj obľúbený jazyk F# sa do WASM kompiluje cez Bolero https://fsbolero.io/
  4. Bolero je nadstavba nad Blazor čo je prevodník pre .NET

Podľa https://caniuse.com/#feat=wasm je už podporvaný naprieč všetkými modernými prehliadačmi.

Zatiaľ som to nejako extra podrobne neskúmal, akurát som včera pár minút skúšal tie 2 posledné frameworky, ale vôbec sa mi nepáči, že project templaty Bolera a Blazora sú naviazané na serverové ASP.NET a tiež že je to celé natoľko blbuvzdorné že sa kompletne všetko skrýva pred programátorom. Ja potrebujem vedieť ako veci fungujú "pod pokličkou". A nepotrebujem si koli kompilovaniu CIL do WASM naťahať 10 ďalších frameworkov s n - vrstvovou architektúrou, ktoré s WASM absolútne nesúvisia. Prečo mi zase niekto vnucuje zbytočnosti? Prečo si vývojár Blazoru myslí že potrebujem serverové ASP.NET?

Takže Emscripten bude pre mňa asi najschodnejšia cesta, len tam zas treba nainštalovať kompletný CLANG :(

A teraz otázky:

1) Čo vlastne od toho WASM môžem očakávať? Aké mi dáva možnosti oproti JS? Má vôbec zmysel sa mu venovať? Ponúka prístup k prostriedkom prehliadača, ktoré bežný JS pred programátorom skrýva?

Príklad: Vedel by som si trebárs cez WASM získať pointer na pixely ktoré sú zobrazené v obrázku (element img) a potom prepisovať pamať a meniť obrázok (bez toho aby som použil canvas)? Alebo aký bonus navyše mi ponúka WASM? Rýchlosť to asi nebude nakoľko aj samotný JS je dnes už ultra rýchly.

2) Čo to vlastne je WASM? binárny medzikód, ktorý sa kompiluje cez nejaký JIT compiler. Ako je to s jeho bezpečnosťou? Určite je sandboxovaný. Do akej miery viem pristupovať aj do "vonkajšieho sveta" mimo browser? Vedel by som pomocou WASM pracovať priamo s hardwarom ktorý prehliadač nepodpruje? Kde môžem vidieť WASM bytecode?

3) Aké NEVÝHODY to má oproti JS?

4) Aký jazyk z tých čo sa kompilujú do WASM by ste mi doporučili. Viem že asi najideálnejší by bol Rust, ale ten sa mi kôli tomu učiť nechce.

5) Na aký typ aplikácie (alebo riešenie v rámci aplikácie) by ste zvolili WASM namiesto JS?

odkaz
10 harrison314
odpověděl/-a 15.3. 13:34

Ja potrebujem vedieť ako veci fungujú "pod pokličkou".
Blazor ma otvorene kody aj issues, staci sa pozriet tam, realne to naozaj nie je nic zlozite a principy fungovania su pomerne jednoduche.

Prečo mi zase niekto vnucuje zbytočnosti? Prečo si vývojár Blazoru myslí že potrebujem serverové ASP.NET?
Pri vytvarani blazoroveho porjektu si odskrtni, ze nechces serverovu cast.
Imho, tie zbytocnosti maju iste vyhody, napriklad zdielane server site a client site kodu (napriklad modelov).

1) Čo vlastne od toho WASM môžem očakávať? Aké mi dáva možnosti oproti JS? Má vôbec zmysel sa mu venovať? Ponúka prístup k prostriedkom prehliadača, ktoré bežný JS pred programátorom skrýva?
Mozes od neho ockavat vyssi vykon.
No na druhu stranu ma WASM stale problem, ze nema priami pristup k DOM-u v prehliadaci. WASM toho vie ovela menej ako JS, lebo mu nevyviedli ziadne API, ked budes nieco realne potrebovat tak si musis spravit interop na JS.
Inac JS by som nepovazoval za rychly a uz vobec nie pametovo usporny.

2) Čo to vlastne je WASM? binárny medzikód, ktorý sa kompiluje cez nejaký JIT compiler. Ako je to s jeho bezpečnosťou? Určite je sandboxovaný. Do akej miery viem pristupovať aj do "vonkajšieho sveta" mimo browser? Vedel by som pomocou WASM pracovať priamo s hardwarom ktorý prehliadač nepodpruje? Kde môžem vidieť WASM bytecode?
Je sandboxovany rovnako ako JS, je to manazovany medzikod ale pamet si v nom musis alokovat a dealokovat sam. Z WebAssembly vies momentalne pristupovat len k javascriptu. Dufam, ze to sa v dohladnej dobe zmeni.

3) Aké NEVÝHODY to má oproti JS?
Vid vyssie.

4) Aký jazyk z tých čo sa kompilujú do WASM by ste mi doporučili. Viem že asi najideálnejší by bol Rust, ale ten sa mi kôli tomu učiť nechce.
Pouzivam Blazor a to aj v jednej firemnej aplikacii a v niekolkych sukormnych, som s nim plne spokojny.
Ckusal som C++ s Emscripten, ale to bolo dost narocne prislo mi to nepohodlne, nie kvoli C++ ale kvoli tomu, ze to nie je framewrok, je to len prekladac, navyse nevies pouzit cudzie C++ kniznice.

O tom, ako mi Blazor pomohol v tazkych chvilkach som napisal blogpost https://harrison314.github.io/Blazor.html.

5) Na aký typ aplikácie (alebo riešenie v rámci aplikácie) by ste zvolili WASM namiesto JS?
Ja by som ho najradsej pouzl vsade, lebo mi dava slobodu vo vybere jazyka, paradigmi, nie som tak viazany na JS a jeho ekosystem.

Komentáře

  • xxar3s : Dik za vyčerpávajúce info. 1) a) Ahá ak to nemá priamy prístup k DOMu tak potom asi ani ten Elmish neni riešený cez WASM ale cez fable. Ako hovorím ja som sa tomu venoval len cca 10 min. A čo to presne znamená že nemá OPRIAMY prístup k DOMu? 1) b)...Myslel som to tak že oproti iným interpretovaným jazykom je JSko (V8) veľmi rýchle. Takže rýchlosť je jediná výhoda? Asi to preskúmam podrobnejšie, a aj ten Rust ma začína lákať. 15.3. 18:46
  • harrison314 : Mne sa zda ze Elmish a fable nie ceu Wasm, ale "prekladaju" sa do javascriptu. To, ze nema priamy pristup k DOM-u znamena, ze ked chces s WASM pracovat z DOM-om, tak musis napisat JS kod, ktory s nim pracuje a ten volat z WASM. To napriklad uz Blazor spravil za teba. Podla mna je hlavna vyhoda v tom, ze to nie je JS, proste ked mas nieco co sa preklada do JS, tak aspobn vruntime alebo navrhu kniznic tam bude JS a jeho chyby a problemi presakovat. narozdiel pri preklade do WASM, mozes SKUTOCNE pouzit jazyk, ktory si zvolis. 15.3. 21:17
  • xxar3s : harrison314 ja viem že Elmish je súčasť projektu fable a že fable sa kompiluje do JS. Ale v tomto konkrétnom prípade som si myslel, že pri použití Bolera sa kompiluje do WebAssembly, ale ty si ma vyviedol z omylu keď si spomenul že WebAssembly nemá priamy prístup k DOMu takže to logicky musí byť kombinácia Bolera a Fable. 16.3. 20:56
  • xxar3s : Práve som si nainštaloval Rust. Jazyk je to pekný, ale nemá to nejaké normálne IDEčko? Lebo podpora vo VSCode aj VS 2019 je veľmi hodne slabá. Funguje len syntax highlighter a trochu našepkávač (aj to len čiastočne napr. Traity nenašpekáva) inak sa musí všetko riešiť cez konzolu! Už chápem prečo sa tento jazyk viac nerozšíril, veď na IDEčku všetko stijí a padá. Absencia poriadneho IDE odradí aj nováčikov, aj profesionálov. Ďalší problém, ktorý bráni vačšiem rozšíreniu Rustu je GUI toolkit - teda GUI toolkitov pre Rust existuje niekolko, ale zase tam chýba vizuálny designer, kde si to GUIčko môžem naklikať. Niečo ako Expression Blend. Je síce pekné že musím napísať 10 riadkov kódu aby som zobrazil jedno tlačítko, ale vyvýjať takto vačší projekt musí byť nieže otrava, ale skôr peklo. 16.3. 23:05
  • xxar3s : A všimol som si že komunita okolo rustu sa snaží napísať vlastný unix like operačný systém (kompletne v Ruste) https://www.redox-os.org/ keby tú energiu investovali radšej do lepších vývojárskych toolov. 16.3. 23:09
  • xxar3s : Tak jedno rust IDE predsa len existuje https://github.com/madeso/ride žiaľ nemá inštalátor ani balíček. Treba to skompilovať zo zdrojákov. 16.3. 23:16

Pro plný přístup na Devel.cz se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.