Size: a a a

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

2020 July 20

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
можно ему ещё ссылку на дискорд дать, там много подобных вопросов
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
lil pep
@maxgraey @chicoxyzzy мб вы знаете что посоветовать товарищу?
ответил там
источник

lp

lil pep in WebAssembly — русскоговорящее сообщество
данкешон
источник
2020 July 21

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
В проекте V8 создана ветка для версии v8.5. Из нового там появятся:
- Promise.any и AggregateError (stage 3)
- String.prototype.replaceAll (ES2020)
- Logical assignment operators (stage 3)
- бейслан компилатор #WebAssembly Liftoff теперь работает на всех платформах
- поддержка WebAssembly Multi-value (добавлены в спецификацию в мае)
- поддержка JavaScript BigInt в WebAssembly (добавлены в спецификацию в июне)
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
Petr @bashorov @skuzmich https://github.com/WebAssembly/design/issues/1346 в итоге отправили на phase 1? а то я пропустил
источник

AS

Aλexander Syrotenko in WebAssembly — русскоговорящее сообщество
Да, отправили
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Sergey Rubanov
В проекте V8 создана ветка для версии v8.5. Из нового там появятся:
- Promise.any и AggregateError (stage 3)
- String.prototype.replaceAll (ES2020)
- Logical assignment operators (stage 3)
- бейслан компилатор #WebAssembly Liftoff теперь работает на всех платформах
- поддержка WebAssembly Multi-value (добавлены в спецификацию в мае)
- поддержка JavaScript BigInt в WebAssembly (добавлены в спецификацию в июне)
Можно пожалуйста подробнее о Мульти-value. Я немного не понимаю тот Параграф про мотивацию для блоков https://github.com/WebAssembly/multi-value/blob/master/proposals/multi-value/Overview.md#motivation
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
Michael Pavlovsky
Можно пожалуйста подробнее о Мульти-value. Я немного не понимаю тот Параграф про мотивацию для блоков https://github.com/WebAssembly/multi-value/blob/master/proposals/multi-value/Overview.md#motivation
там ниже примеры таких блоков
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Sergey Rubanov
там ниже примеры таких блоков
Верно сказать что это глубоко компайлерная оптимизация ? Простому смертному до них не достучаться,  провильно?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Michael Pavlovsky
Верно сказать что это глубоко компайлерная оптимизация ? Простому смертному до них не достучаться,  провильно?
смотря, что Вы под этим понимаете
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
смотря, что Вы под этим понимаете
Пример был бы уместен - (как этим можно пользоваться из языка программирования )
источник

MP

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

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Michael Pavlovsky
Пример был бы уместен - (как этим можно пользоваться из языка программирования )
Аналог в ЯП - это tuplets и records
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Michael Pavlovsky
Пример был бы уместен - (как этим можно пользоваться из языка программирования )
в таком случае, для блоков больше компиляторная оптимизация, да
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
основные бенефиты для блоков - уменьшение размера кода и доп возможность оптимизаций
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
@voronovm  вы не могли бы в общих чертах расказать про блоки и про каких условиях их генерируют. (Я спекулирую что это Forced  Inlining или  для строго локальных ламбд , но наверно я не прав).
источник

でゲソ in WebAssembly — русскоговорящее сообщество
Георгий
а это, TypeScript в WASM ещё не научились переделывать? я вроде видел порт Box2D с JS. но там че-то муторно. ну или вообще вот такой вопрос, ваше личное мнение, что совмещает баланс "легко кодить" "быстро работает" "не трахает мозги по сто лет при любой более-менее серьезной проблеме"?
rust
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Michael Pavlovsky
@voronovm  вы не могли бы в общих чертах расказать про блоки и про каких условиях их генерируют. (Я спекулирую что это Forced  Inlining или  для строго локальных ламбд , но наверно я не прав).
Если в общих чертах, то одно из основных предназначений - это поддержка т.н. structured control flow. Такой CF не позволяет, например, переходить в середину инструкции, портить operand stack и т.д., а позволяет он делать относительно простую валидацию модулей, потому что переходы возможны только на специальные именованные instruction sequences (т.е. на block, loop, ifs). В Wasm MVP каждая такая последовательность не может уменьшать текущий operand stack и по завершению может положить на стек 1 или 0 значений. Multi-value как раз изменяет это поведение таким образом, что потреблять и продуцировать по завершению instruction sequences можно сколько угодно значений.
А один из основных паттернов использования именно block - это возможность сделать выход из вложенных блоков кода (например, циклов) по какому-то условию, например

  for(int i = 0; i < x; ++i) {
   const int r = rand();
   if(r % 2 == 0) {
     first_even = r;
     break;
   }
 }

без оптимизаций будет скомпилировано в

    // блок, оформляющий цикл, нужен, чтобы выйти из него по условию i >= x
   block $label0
     loop $label2
       // определяем, выходить ли из цикла
       br_if $label0
       block $label1
         // проверяем значение rand(), переходим в конец блока (1), чтобы присвоить значение переменной first_even, если условие сработало
         br_if $label1
         // увеличиваем ++i

         // безусловно переходим в начало цикла
         br $label2
       end $label1
     end $label2
     // (1) присваиваем значение first_even
   end $label0
источник
2020 July 22

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
ну и да, отличие loop от block тут в направлении перехода инструкциями передачи управления. В случае loop, br на него (т.е. на его метку) осуществит переход в начало (т.е. на первую инструкцию после loop), а для block в конец. Надеюсь, хоть немного понятно объяснил
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
ну и да, отличие loop от block тут в направлении перехода инструкциями передачи управления. В случае loop, br на него (т.е. на его метку) осуществит переход в начало (т.е. на первую инструкцию после loop), а для block в конец. Надеюсь, хоть немного понятно объяснил
Спасибо Михаил, все довольно доходчиво. Давненько я не трогал компайлеры, со времен когда читал Dragon book 1ed
источник