Size: a a a

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

2020 November 03

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
Товарищи, здравствуйте!

Столкнулся со странным поведением:
Собрал go код в wasm. Подгружаю полученный файл в веб воркере.
Если после старта страницы открыть и закрыть (если он уже был открыт, то просто закрыть) DevTools - воркер "исчезает".
Под "исчезает" понимаю следующее: если снова открыть dev tools - консоль не видит контекст воркера (см. приложенную картинку), хотя при первом открытии - там отображается воркер.
Для тестирования добавил в воркер логирование с таймером и отправку сообщений. И то, и другое после "исчезновения" воркера перестаёт работать.

Стал экспериментировать. И тут обнаружил совсем странное поведение - если собрать тот же самый код из другого файла, то go выдаёт другой бинарь (не сходятся хэш суммы, хотя хэш суммы исходников одинаковые):

 make light
e986ba428a3be4661da27b1eedc5604156daccba4e74af9bbb672a8f66336a16  ./cmd/light/main.go
e986ba428a3be4661da27b1eedc5604156daccba4e74af9bbb672a8f66336a16  ./cmd/wasmpvp/main.go
GOOS=js GOARCH=wasm go build -o ./bin/light.wasm ./cmd/light/main.go
GOOS=js GOARCH=wasm go build -o ./bin/pvp.wasm ./cmd/wasmpvp/main.go
b9863e69230f783ed6d0e46706a90a250c89569d6084fe9666c382fd35c91bc1  ./bin/light.wasm
9eb1de0a28e36ea192bc0f250aa434a304a6edab283861bb2beaa08f3f47f336  ./bin/pvp.wasm


И вот если в воркер подгрузить другой WASM файл, то воркер не "исчезает" и работает как надо.
Всё это странное поведение наблюдается в
- Chrome Version 85.0.4183.102 (Official Build) (64-bit)
- Linux Mint 20
- go version go1.15.2 linux/amd64

В браузере Mozilla такого не происходит.

Скажите, можно как-то сравнить содержимое WASM файлов? По моим представлениям если исходный код приложения одинаковый, то и получаемые WASM файлы должны быть одинаковыми.
Может быть это нужно писать issue в Go?
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
источник

AF

Alexey F. in WebAssembly — русскоговорящее сообщество
Mikhail Vitsen
Товарищи, здравствуйте!

Столкнулся со странным поведением:
Собрал go код в wasm. Подгружаю полученный файл в веб воркере.
Если после старта страницы открыть и закрыть (если он уже был открыт, то просто закрыть) DevTools - воркер "исчезает".
Под "исчезает" понимаю следующее: если снова открыть dev tools - консоль не видит контекст воркера (см. приложенную картинку), хотя при первом открытии - там отображается воркер.
Для тестирования добавил в воркер логирование с таймером и отправку сообщений. И то, и другое после "исчезновения" воркера перестаёт работать.

Стал экспериментировать. И тут обнаружил совсем странное поведение - если собрать тот же самый код из другого файла, то go выдаёт другой бинарь (не сходятся хэш суммы, хотя хэш суммы исходников одинаковые):

 make light
e986ba428a3be4661da27b1eedc5604156daccba4e74af9bbb672a8f66336a16  ./cmd/light/main.go
e986ba428a3be4661da27b1eedc5604156daccba4e74af9bbb672a8f66336a16  ./cmd/wasmpvp/main.go
GOOS=js GOARCH=wasm go build -o ./bin/light.wasm ./cmd/light/main.go
GOOS=js GOARCH=wasm go build -o ./bin/pvp.wasm ./cmd/wasmpvp/main.go
b9863e69230f783ed6d0e46706a90a250c89569d6084fe9666c382fd35c91bc1  ./bin/light.wasm
9eb1de0a28e36ea192bc0f250aa434a304a6edab283861bb2beaa08f3f47f336  ./bin/pvp.wasm


И вот если в воркер подгрузить другой WASM файл, то воркер не "исчезает" и работает как надо.
Всё это странное поведение наблюдается в
- Chrome Version 85.0.4183.102 (Official Build) (64-bit)
- Linux Mint 20
- go version go1.15.2 linux/amd64

В браузере Mozilla такого не происходит.

Скажите, можно как-то сравнить содержимое WASM файлов? По моим представлениям если исходный код приложения одинаковый, то и получаемые WASM файлы должны быть одинаковыми.
Может быть это нужно писать issue в Go?
ну, сравнить можно по контрольной сумме. Но нужно помнить, что билды не детерминированные, так что могут разные файлы получиться после компиляции одного и того же исходника - и это нормально.
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
если дважды подряд сбилдить один и тот же исходник - wasm файлы одинаковые получаются
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
сравнить по контрольной сумме ничего не даёт. интереснее посмотреть "в потроха"
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Можно попробовать wasm2wat из wabt - получится текстовый формат того что внутри, после этого можно попробовать diff, хотя файл скорей всего будет большой (и diff возможно тоже)
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
diff light.wat pvp.wat | wc -l
121119
источник

PP

Petr Penzin in WebAssembly — русскоговорящее сообщество
Увы :(
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
издевательство какое-то... я почти выкристализовал этот баг. Сделал симлинки в разные папки, собрал код. Размер -байт в байт. Но хэши разные (причём diff pvp.wat pvq.wat | wc -l = 8, там, похоже, зашит перечень файлов, использованных при билде).
Сделал тестовую страницу, которая инстанциирует один и тот же воркер и сообщением говорит ему какой wasm подгружать. Открываешь эту страницу, открываешь девтулз - 2 воркера. Переоткрываешь девтулз - один воркер!

Думаю: если отправлять issue куда-либо, нужно перепроверить можно ли под другим веб сервером развернуть хост (WASM хром не может загрузить, если открывать файл напрямую - ему только веб сервер подавай). Натравил nginx на эту папку - фиг, всё работает! Возвращаю обратно гошный вебсервер - опять всё работает....
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
3 часа коту под хвост и так и не понятно что это было...
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Бага хрома
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
да теперь уже это понятно, но отправлять нечего - не воспроизводится со 100% вероятностью :(
источник

MV

Mikhail Vitsen in WebAssembly — русскоговорящее сообщество
если вдруг интересно кому-то - я расковырял wasm при помощи wasm2wat (спасибо разработчикам, которые сделали плагин с этой тулзой для VSCode!):
там действительно зашиты имена всех включённых файлов и разница была только в этом. В остальном всё идентично. Гошный билд стабилен.
источник
2020 November 04

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Томас реализовал в виде PR технику о которой говорил в этом видео:
https://twitter.com/WebAssemblyEU/status/1323714950444077056

https://github.com/WebAssembly/binaryen/pull/3317
источник

AR

Alex Raud in WebAssembly — русскоговорящее сообщество
Alexey F.
Собрал всё в одном сообщении.

Всем привет! Мы, организаторы Moscow Wasm meetup, хотели бы узнать, какие есть интересующие вас темы для докладов на темы около WebAssembly. Предлагаю обсудить их прямо в этом чате, а если вдруг у кого-то уже есть тема и кто хотел бы выступить, то напишите в личку мне, @voronovm или @vos3k.


Скомпилировал тут небольшой (но избыточный, кмк) списочек категорий для докладов. Я думаю это может быть полезно для потенциальных докладчиков. Было бы, кстати, круто, если бы этот список расширялся и уточнялся (со временем) - потому что я почти уверен, что я что-то забыл добавить/упомянуть.

По применению:
- web
- mobile
- games
- embedded
- blockchain
- wasi and emscripten
- cloud computing

Пpо технологию:
- specification, extensions and proposals
- performance and optimisation
- safety and security
- compillers and languages (supported frontends)
- embedders
- developer experience

Разное:
- history
- motivation
- (potential) use cases
- experiments
- real world cases
Я могу embedded рассказать, моя команда встраивает wasm3 в wowcube, я написал виртуальную память (в эмбеддед устройствах мало оперативы, но есть flash)
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Alex Raud
Я могу embedded рассказать, моя команда встраивает wasm3 в wowcube, я написал виртуальную память (в эмбеддед устройствах мало оперативы, но есть flash)
Те вы насилуете flash память, которая и так имеет мало циклов перезаписи?
источник

AF

Alexey F. in WebAssembly — русскоговорящее сообщество
Alex Raud
Я могу embedded рассказать, моя команда встраивает wasm3 в wowcube, я написал виртуальную память (в эмбеддед устройствах мало оперативы, но есть flash)
звучит оочень круто
источник

AF

Alexey F. in WebAssembly — русскоговорящее сообщество
добавили вас в список
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
источник