Я пытаюсь понять смысл WebAssembly с точки зрения .NET.
Из Blazor FAQ :
Запуск .NET в браузере стал возможен благодаря относительно новым
стандартизированная веб-технология под названием WebAssembly.
Это странное утверждение.
Очевидно, что вы можете запускать код .NET в браузере без WebAssembly, кросс-компилируя его в JavaScript (например, с JSIL ). Это просто отстой, потому что
- Объектная модель CLR более сложна, чем JavaScript (например, вы можете создать компактный массив целых чисел,
Uint8Array
, но не более сложного типа значения в JavaScript), что делает перевод некоторых типов кода очень неэффективным.
- . Собственные реализации базовой библиотеки .NET также должны быть реализованы на JavaScript, что требует больших усилий.
- Экосистема браузера основана на JavaScript, так что если вы используете такие кросс-компиляции, возникают трения.
Значит, часто задаваемые вопросы означают, что теперь это практично , верно?
Я изо всех сил пытаюсь понять, как WebAssembly помогает с любым из этих пунктов, хотя. Беглый взгляд показывает, что ее виртуальная машина по-прежнему не может эффективно представлять CLR (все еще нет сложных типов значений, верно?). А остальные две точки сохранятся несмотря ни на что.
Так что изменилось? Что именно WebAssembly приносит на стол, что было невозможно только с помощью JavaScript? Действительно ли веб-сборки основаны на стеке, а сама JS - нет? Почему это так важно?
РЕДАКТИРОВАТЬ: Не может быть счастливее от супер-точечный ответ Хенка. Для интересующихся я нашел отличное обоснование .