CLR .NET в WebAssembly - PullRequest
       1

CLR .NET в WebAssembly

2 голосов
/ 25 июня 2019

Я пытаюсь понять смысл WebAssembly с точки зрения .NET.

Из Blazor FAQ :

Запуск .NET в браузере стал возможен благодаря относительно новым стандартизированная веб-технология под названием WebAssembly.

Это странное утверждение.

Очевидно, что вы можете запускать код .NET в браузере без WebAssembly, кросс-компилируя его в JavaScript (например, с JSIL ). Это просто отстой, потому что

  1. Объектная модель CLR более сложна, чем JavaScript (например, вы можете создать компактный массив целых чисел, Uint8Array, но не более сложного типа значения в JavaScript), что делает перевод некоторых типов кода очень неэффективным.
  2. . Собственные реализации базовой библиотеки .NET также должны быть реализованы на JavaScript, что требует больших усилий.
  3. Экосистема браузера основана на JavaScript, так что если вы используете такие кросс-компиляции, возникают трения.

Значит, часто задаваемые вопросы означают, что теперь это практично , верно?

Я изо всех сил пытаюсь понять, как WebAssembly помогает с любым из этих пунктов, хотя. Беглый взгляд показывает, что ее виртуальная машина по-прежнему не может эффективно представлять CLR (все еще нет сложных типов значений, верно?). А остальные две точки сохранятся несмотря ни на что.

Так что изменилось? Что именно WebAssembly приносит на стол, что было невозможно только с помощью JavaScript? Действительно ли веб-сборки основаны на стеке, а сама JS - нет? Почему это так важно?

РЕДАКТИРОВАТЬ: Не может быть счастливее от супер-точечный ответ Хенка. Для интересующихся я нашел отличное обоснование .

1 Ответ

3 голосов
/ 25 июня 2019

предполагает, что ее виртуальная машина по-прежнему не сможет эффективно представлять CLR

Правильно.Вот почему Blazor сначала развертывает версию Mono, скомпилированную для WASM.
Blazor приносит свой собственный CLR на вечеринку.

Код вашего приложения не будет скомпилирован в Wasm, он будет развернут как (обычный) IL, выполняемый Mono.С помощью инструментов разработчика вы можете увидеть кучу файлов .DLL, загружаемых в ваш браузер.В принципе, вы можете использовать любой стандартный пакет .net, который помещается в изолированную программную среду безопасности браузера.

Что именно WebAssembly привносит в таблицу, что было невозможно только с помощью JavaScript?

Он позволяет компилятору C компилировать Mono. *. C в Mono.wasm.
И это быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...