Size: a a a

WebAssembly — русскоговорящее сообщество

2021 March 02

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Антон Сергеевич
Согласен.
До сих пор не понимаю фразу "Вам не придётся учить новый язык потому что есть AssemblyScript"
Скрипт классный но что там учить в том васме?
Это говориться в разрезе того, что вы уже знаете js/ts и учить только лишь ради wasm тот же C++ или Rust не обязательно. Но если вам просто интересен системный язык и рпограммирование то можно и выучить, но уж тольно не ради WebAssembly)
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Miroslav
Я что-то очень плохо ищу, наверное. Какой синтаксис у экспортных функций когда пишешь под wasm на C через emscripten?
Там по разному можно. Я помню только этот
#define WASM_EXPORT __attribute__((visibility("default")))
WASM_EXPORT foo() { … }
источник

M

Miroslav in WebAssembly — русскоговорящее сообщество
MaxGraey
Там по разному можно. Я помню только этот
#define WASM_EXPORT __attribute__((visibility("default")))
WASM_EXPORT foo() { … }
Прикольно, спасибо! WASM_EXPORT - это получается некий call convention?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Антон Сергеевич
Согласен.
До сих пор не понимаю фразу "Вам не придётся учить новый язык потому что есть AssemblyScript"
Скрипт классный но что там учить в том васме?
> Скрипт классный но что там учить в том васме?

Ну wasm это всего лишь таргет, но со своими особенностями пока-что и учить как раз нужно эти особенности как таргета в контекте того языка на котором программируете. Можно конечно изучить байткод как тут некоторые делают, но это полезно только в образовательных целях или если вы решили написать свой компилятор для wasm
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Miroslav
Прикольно, спасибо! WASM_EXPORT - это получается некий call convention?
Не, скорее хинт компилятору
источник

АС

Антон Сергеевич... in WebAssembly — русскоговорящее сообщество
MaxGraey
> Скрипт классный но что там учить в том васме?

Ну wasm это всего лишь таргет, но со своими особенностями пока-что и учить как раз нужно эти особенности как таргета в контекте того языка на котором программируете. Можно конечно изучить байткод как тут некоторые делают, но это полезно только в образовательных целях или если вы решили написать свой компилятор для wasm
Хочется просто понимать как там что работает что бы не попадать в ситуации когда на васме работает в несколько раз медленнее чем на js.
Вот статья на эту тему
https://blog.sqreen.com/webassembly-performance/

Только там Rust и TS
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Антон Сергеевич
Хочется просто понимать как там что работает что бы не попадать в ситуации когда на васме работает в несколько раз медленнее чем на js.
Вот статья на эту тему
https://blog.sqreen.com/webassembly-performance/

Только там Rust и TS
Это очень страрая статья во первых и много что уже поменялось в плане производительности. Во-вторых бенчмарки там неверные и меряют воздух в некторых тестах (смотри комментарии)
источник

A

Anon in WebAssembly — русскоговорящее сообщество
В третьих я в другмо городе
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Anon
В третьих я в другмо городе
Даже так: «В третьих, я в другой реальности что ты мне сделаешь?»
источник

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Богдан
Народ, я тут столкнулся с непониманием некоторых wasm-инструкций
1) зачем нужна инструкция return если можно использовать br (я думал до этого что br-инструкцию можно использовать только в блоках-циклах а оказывается ею можно выходить из функции)
2) зачем нужна инструкция br_if если можно написать br внутри if-блока (с индексом на 1 больше)
3) зачем нужны if-else инструкции если можно обойтись вложенным блоком
get_local $my_i32
if
 ...  ;; Executed if $my_i32 is non-zero
else
 ...  ;; Executed if $my_i32 is zero
end

;;This is equivalent to:

block $exit
 block $true
   get_local $my_i32
   br_if $true
   ... ;; Executed if $my_i32 is zero
   br $exit
 end
 ... ;; Executed if $my_i32 is non-zero
end
Может есть какие-то особенности по производительности и оптимизациям? Например br_if и if-else быстрее блоков или лучше оптимизируются? Или оптимизирующему компилятору без разницы (например все это разнообразие инструкций он сводит и унифицирует к однообразным джампам и только потом проводит оптимизации) ?
Избыточность инструкций, которую вы заметили, нужна для сокращения размера кода. В спецификации https://webassembly.github.io/spec/core/syntax/instructions.html#control-instructions говорится, что return - это сокращение от br. Он всегда кодируется одним байтом, а в br добавляется индекс метки, закодированная в еще 1 или более байтов. Думаю похожая ситуация и с if и br_if инструкциями.

> оптимизирующему компилятору без разницы (например все это разнообразие инструкций он сводит и унифицирует к однообразным джампам и только потом проводит оптимизации)

Должно быть так
источник

IR

Ingrid Raines in WebAssembly — русскоговорящее сообщество
MaxGraey
Это говориться в разрезе того, что вы уже знаете js/ts и учить только лишь ради wasm тот же C++ или Rust не обязательно. Но если вам просто интересен системный язык и рпограммирование то можно и выучить, но уж тольно не ради WebAssembly)
Может там вообще цель свой язык создать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Slava Kuzmich
Избыточность инструкций, которую вы заметили, нужна для сокращения размера кода. В спецификации https://webassembly.github.io/spec/core/syntax/instructions.html#control-instructions говорится, что return - это сокращение от br. Он всегда кодируется одним байтом, а в br добавляется индекс метки, закодированная в еще 1 или более байтов. Думаю похожая ситуация и с if и br_if инструкциями.

> оптимизирующему компилятору без разницы (например все это разнообразие инструкций он сводит и унифицирует к однообразным джампам и только потом проводит оптимизации)

Должно быть так
+1
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
Нужна js библиотека для компиляции простого C/C++ в браузере в .wasm, может кто встречал?
источник

A

Anon in WebAssembly — русскоговорящее сообщество
Dmitry Bezhetskov
Нужна js библиотека для компиляции простого C/C++ в браузере в .wasm, может кто встречал?
Clang есть скомпиленный в Wasm, но простого там мало. Либа вешает 30 мегов.
https://github.com/binji/wasm-clang
https://binji.github.io/wasm-clang/
источник

DB

Dmitry Bezhetskov in WebAssembly — русскоговорящее сообщество
Anon
Clang есть скомпиленный в Wasm, но простого там мало. Либа вешает 30 мегов.
https://github.com/binji/wasm-clang
https://binji.github.io/wasm-clang/
ага, уже тоже нашел, но похоже этот clang только для доклада binji подходит)
источник

A

Anon in WebAssembly — русскоговорящее сообщество
Как айфон с первой презентации стива джобса
источник

A

Anon in WebAssembly — русскоговорящее сообщество
Тыкнул не туда = кирпич.
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
Dmitry Bezhetskov
Нужна js библиотека для компиляции простого C/C++ в браузере в .wasm, может кто встречал?
вот тут можно посмотерть
https://github.com/compiler-explorer/compiler-explorer
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
но не уверен, что они компилируют в браузере, надо проверять
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Sergey Rubanov
но не уверен, что они компилируют в браузере, надо проверять
Они не компилируют в браузере
источник