Size: a a a

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

2020 July 28

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Впрочем, это реторический вопрос.
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
да, в данный момент все так
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Slava Kuzmich
Сегодня V8 разработчики презетовали свой вариант представления Wasm GC объектов в JS. Они предлагают описывать JS свойства и методы на RTT и передавать значения с этими RTT в JS без оберток.
А зачем wasm-у gc? У каждого языка уже есть сборщик мусора который оптимизирован и заточен конкретно под этот язык. Почему бы не скомпилировать в wasm сам этот сборщик мусора вместе с другим рантаймом языка? Попытка создать общий gc для всех языков приведет к тому что этот gc будет неэффективным для отдельно взятого языка
источник

MP

Michael Pavlovsky in WebAssembly — русскоговорящее сообщество
Богдан
А зачем wasm-у gc? У каждого языка уже есть сборщик мусора который оптимизирован и заточен конкретно под этот язык. Почему бы не скомпилировать в wasm сам этот сборщик мусора вместе с другим рантаймом языка? Попытка создать общий gc для всех языков приведет к тому что этот gc будет неэффективным для отдельно взятого языка
to reduce the size of deployment
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Богдан
А зачем wasm-у gc? У каждого языка уже есть сборщик мусора который оптимизирован и заточен конкретно под этот язык. Почему бы не скомпилировать в wasm сам этот сборщик мусора вместе с другим рантаймом языка? Попытка создать общий gc для всех языков приведет к тому что этот gc будет неэффективным для отдельно взятого языка
Потому что почти все GC сканируют стек, что в WASM просто невозможно.
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Потому что почти все GC сканируют стек, что в WASM просто невозможно.
Тогда почему бы комитету не решить этот недостаток и добавить возможность сканировать стек вместо того чтобы тащить gc?
Кстати даже если в wasm-а нет возможности просканировать стек то почему бы тогда не передавать аргументы между функциями явно записывая их в память (то есть получится собственный стек вместо встроенного) ?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Потому что почти все GC сканируют стек, что в WASM просто невозможно.
Не обязательно. Так же как и корутины есть stackful и stackless. Разница собственно в том, что второй тип требует кодогенерации
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Богдан
Тогда почему бы комитету не решить этот недостаток и добавить возможность сканировать стек вместо того чтобы тащить gc?
Кстати даже если в wasm-а нет возможности просканировать стек то почему бы тогда не передавать аргументы между функциями явно записывая их в память (то есть получится собственный стек вместо встроенного) ?
Сканировать стек -- дыра в безопасности. Свой стек (shadow stack) -- медленно.
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
MaxGraey
Не обязательно. Так же как и корутины есть stackful и stackless. Разница собственно в том, что второй тип требует кодогенерации
Ну я вот кроме рефкаунтинга не припоминаю кто НЕ сканирует. 🤷‍♀
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Кроме того, большинство WASM рантаймов всё равно будут иметь свой GC в том или ином виде -- логично же прокинуть интерфейс к нему, раз уж он всё равно есть.
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Сканировать стек -- дыра в безопасности. Свой стек (shadow stack) -- медленно.
А почему свой стек - медленно? Понятно что в x64 уже есть встроенные инструкции для стека но я не понимаю почему это будет прям сильно медленно. Любое обращение в память всегда считывает всю кеш-линию (область памяти в 64 байта). Считал хотя бы один байт - получай в подарок практически бесплатное обращение к 64 близлежащим байтам. Поскольку стек это идеальная с точки зреня локальности структура ( последовательная запись или считывание) то даже кастомный стек будет работать быстро за счет этих кеш-линий
источник

Б

Богдан in WebAssembly — русскоговорящее сообщество
Alexander Tchitchigin
Сканировать стек -- дыра в безопасности. Свой стек (shadow stack) -- медленно.
Кстати а почему возможность сканировать стек это дыра в безопасности? Я так понимаю речь про запись в стек а не считывание (например заменить ссылки на объекты когда gc переместит в другой регион), тогда согласен
Все равно неясно почему комитет webassembly так беспокоится про безопасность. Там ведь все равно будет изоляция и песочница от других сайтов. Все что может wasm-модуль так это навредить сам себе. Мне кажется задача обеспечивать безопасность относится не к рантайму а к  тому языку который компилируется в wasm, например memory-safe ссылки на объекты вместо явных указателей, статическая типизация и проверки и т.д
источник

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Богдан
А зачем wasm-у gc? У каждого языка уже есть сборщик мусора который оптимизирован и заточен конкретно под этот язык. Почему бы не скомпилировать в wasm сам этот сборщик мусора вместе с другим рантаймом языка? Попытка создать общий gc для всех языков приведет к тому что этот gc будет неэффективным для отдельно взятого языка
Wasm-у GC еще нужен чтоб с JS взаимодействовать. Если Wasm и JS будут использовать разные сборщики мусора, то сложно будет собирать мусор с циклами сслыок на границе Wasm и JS.
источник

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Еще кастомный сборщик мусора - это постоянный оверхед. Существующие сборщики мусора не рассчитаны оптимизацию размера их рантайма, их придется урезать и идти на компромиссы, и он может в итоге получится хуже чем в JS движках.
источник

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Как бонус, с Wasm GC языкам с безопасной моделью памяти будует нужно меньше проверок выхода за границу памяти
источник

c

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

К

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

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Тоже интересно, я предполагал, что компилятор старается статически убрать или сгруппировать ненужные проверки, вынести их из циклов и.т.п
источник

К

Константин in WebAssembly — русскоговорящее сообщество
По этому мне Макс сказал везде напихать unchecked в AS
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Чтобы везде не прлверял.:)
источник