Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

AssemblyScript - это язык программирования на основе TypeScript (по сути, JavaScript со статическими типами), который оптимизирован для WebAssembly и компилируется в WebAssembly с использованием asc , эталонного компилятора AssemblyScript. Он разработан проектом AssemblyScript [6] и сообществом AssemblyScript.

Обзор [ править ]

В 2017 году доступность поддержки WebAssembly , стандартного определения низкоуровневого байт - кода и связанной виртуальной машины , получила широкое распространение среди основных веб-браузеров , предоставив веб-разработчикам низкоуровневую и потенциально более производительную цель компиляции для клиентской стороны. программы и приложения, выполняемые в веб-браузерах, в дополнение к интерпретируемому (а также обычно динамически компилируемому ) языку веб-сценариев JavaScript . [7] WebAssembly позволяет программам и коду быть статически скомпилированными заранее, чтобы они могли работать на потенциально собственном уровне или «безупречная производительность в веб-браузерах без дополнительных затрат на интерпретацию или начальную задержку динамической компиляции. [8]

С внедрением WebAssembly в основных веб-браузерах Алон Закай, создатель Emscripten , компилятора C и C ++ на основе LLVM / Clang , ориентированного на подмножество JavaScript под названием asm.js , добавил поддержку WebAssembly в качестве цели компиляции в Emscripten, что позволило Программы и код на C и / или C ++ должны компилироваться непосредственно в WebAssembly. [9]

Хотя Emscripten и подобные компиляторы позволяют веб - разработчикам писать новый код, или порт поддержки существующих код, написанный на языке высокого уровня , таких как C, C ++, Go и Rust к WebAssembly для достижения потенциально выше, производительность выполнения нативный уровня в веб - браузерах , это вынуждает веб-разработчиков привыкать к разработке клиентских веб-скриптов и приложений на JavaScript ( де-фактоязык программирования на стороне клиента в веб-браузерах), чтобы использовать другой язык для таргетинга WebAssembly, отличный от JavaScript. AssemblyScript, как вариант TypeScript, который синтаксически почти идентичен JavaScript, позволяет разработчикам, привыкшим к JavaScript, использовать знакомый язык для нацеливания на WebAssembly, потенциально сокращая кривую обучения отдельному языку, который может быть скомпилирован в WebAssembly. Более того, поскольку AssemblyScript был разработан как оптимальный исходный язык для WebAssembly, система типов языка точно отражает систему типов WebAssembly [10], а язык предоставляет стандартные низкоуровневые функции (обычно реализованные как макросы), которые отображаются непосредственно на инструкции WebAssembly, которые отражают специализированные аппаратные инструкции, предоставляемые современными процессорами, такими как SIMD и векторные инструкции, и более специализированные инструкции, такие как clz(подсчет начальных нулевых битов), ctz(подсчет конечных нулевых битов) и popcnt( подсчет совокупности ), используемые в такие приложения, как шифрование и криптографические библиотеки. [11]

Компилятор AssemblyScript по возрастанию основано на Binaryen, компилятор набор инструментов фонового , разработанный Алон Закай , что компилируется в WebAssembly и является компонентом Emscripten (который также Zakai развитым). По возрастанию компилятор и другие инструменты доступны через НПЙ менеджер пакетов.

Хотя WebAssembly изначально был разработан для выполнения в веб-браузерах, разработка WASI (WebAssembly System Interface), спецификации сообщества для стандартного API , позволяющего программам WebAssembly получать доступ к системным вызовам и другим функциям операционной системы [12] , привела к разработке сред выполнения WebAssembly из таких проектов, как Wasmtime [13] и Wasmer [14], которые позволяют WebAssembly, и код, написанный на таких языках, как AssemblyScript, который может компилироваться в него, также работать в средах, отличных от Web.

Совместимость с JavaScript [ править ]

AssemblyScript компилируется модулей WebAssembly, которые затем могут быть созданы в веб - страницы на стороне клиента , используя стандартные методы , такие как JavaScript WebAssembly.compileStreamingи WebAssembly.instantiateStreamingтак же , как стандартные WebAssembly двоичные файлы. [15] Передача данных между JavaScript и скомпилированными модулями WebAssembly, а также вызовы функций между JavaScript и WebAssembly будут такими же, как для любого модуля WebAssembly. [16]

Поскольку язык AssemblyScript в основном является подмножеством TypeScript (он также имеет небольшую надмножество TypeScript), можно написать программу AssemblyScript, используя подмножество, и скомпилировать ее как в простой JavaScript, так и в WebAssembly, используя как компилятор TypeScript, так и компилятор AssemblyScript. , соответственно. Это позволяет переносить код, который работает как в среде JavaScript, так и в среде WebAssembly.

Использование [ править ]

По состоянию на февраль 2021 года примерно 2900 проектов, размещенных на GitHub, написаны, полностью или частично, на AssemblyScript [17], примерно 5000 загрузок компилятора AssemblyScript в неделю через npm . [18]

Прием [ править ]

Ведущий разработчик Emscripten Алон Закай охарактеризовал AssemblyScript как «разработанный с учетом WebAssembly и размера кода. Это не существующий язык, который мы используем для новой цели, но это язык, разработанный для WebAssembly. У него отличная wasm-optинтеграция - по сути, он построен с ним - и очень легко получить хороший размер кода ». [19]

Норвежский музыкант Питер Саломонсен в своем выступлении на WebAssembly Summit 2020 года под названием «Музыка WebAssembly» продемонстрировал использование AssemblyScript для компиляции в реальном времени в WebAssembly в синтезе живой электронной музыки, сказав: «Я выбрал AssemblyScript, потому что он имеет высокий уровень читаемости и низкоуровневый контроль; это похоже на язык высокого уровня, но у вас возникает ощущение низкого уровня, и вы даже можете писать прямые встроенные функции WebAssembly, если хотите ». [20]

Аарон Тернер, старший инженер Fastly , поставщика услуг облачных вычислений, который использует WebAssembly для своей бессерверной вычислительной среды Compute @ Edge, в обзоре AssemblyScript написал: [21]

Хотя AssemblyScript требует более строгого набора текста, чем TypeScript, он максимально приближен к синтаксису и семантике TypeScript - а это означает, что большинство разработчиков JavaScript сочтут AssemblyScript удобным в использовании - и он обеспечивает отличную поддержку современной экосистемы JavaScript. Например, компилятор AssemblyScript доступен в npm , а также распространенные инструменты и библиотеки AssemblyScript, такие как as-pect . Файлы AssemblyScript также используют расширение файла TypeScript .ts , и оно включает в себя правильную типизацию, позволяющую AssemblyScript использовать инструменты TypeScript, такие как линтер TypeScript. С правильными небольшими настройками AssemblyScript можно использовать даже с компилятором TypeScript.

Это очень интересно, так как AssemblyScript предлагает разработчикам JavaScript низкую точку входа, чтобы выбрать язык для вывода WebAssembly - как с точки зрения обучения чтению и написанию AssemblyScript, так и с точки зрения использования большого количества уже существующих инструментов. это может уже быть в рабочем процессе разработчика JavaScript. AssemblyScript часто упоминается в сообществе WebAssembly как отличный способ освоить WebAssembly. Он предлагает большой группе разработчиков, которые уже пишут приложения для Интернета, путь к изучению WebAssembly. Даже если вы начинаете с нуля и не особенно знакомы с JavaScript или TypeScript, AssemblyScript - хороший выбор при выборе языка для вывода WebAssembly.

Однако Тернер сослался на относительную новизну языка и, следовательно, на отсутствие в нем некоторых функций, доступных в более крупных, более сложных и устоявшихся языках программирования, как на потенциальные недостатки языка.

См. Также [ править ]

  • Emscripten
  • JavaScript
  • Машинопись
  • WebAssembly

Ссылки [ править ]

  1. ^ a b Проект AssemblyScript (24 апреля 2020 г.). «Рабочая группа AssemblyScript» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 года . Дэниел Виртц (@dcodeIO) - Автор AssemblyScript
  2. Аарон Тернер (28 марта 2019 г.). «WebAssembly для разработчиков Javascript» . YouTube.com . WebAssembly SF . Проверено 10 февраля 2021 года . @dcodeIO [Дэниел Виртц] и @MaxGraey [Макс Грей] - два основных разработчика AssemblyScript.
  3. ^ Проект AssemblyScript (2017). "Assemblyscript 0.1.0" . npmjs.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
  4. ^ Проект AssemblyScript (8 февраля 2021 г.). "скрипт сборки" . npmjs.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
  5. ^ Проект AssemblyScript (29 сентября 2017 г.). «ЛИЦЕНЗИЯ» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 года . AssemblyScript / assemblyscript находится под лицензией Apache License 2.0.
  6. ^ Проект AssemblyScript. «Проект AssemblyScript» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
  7. ^ Группа сообщества WebAssembly (ноябрь 2017 г.). «Дорожная карта» . WebAssembly.org . Группа сообщества WebAssembly . Проверено 10 февраля 2021 года .
  8. ^ Рабочая группа WebAssembly. «WebAssembly» . WebAssembly.org . Рабочая группа WebAssembly . Проверено 10 февраля 2021 года .
  9. ^ Алон Закай и авторы Emscripten. «Эмскриптен» . Emscripten.org . Проект Emscripten . Проверено 10 февраля 2021 года .
  10. ^ Проект AssemblyScript. «Виды» . AssemblyScript.org . Проект AssemblyScript . Проверено 10 февраля 2021 года .
  11. ^ Проект AssemblyScript. «Окружающая среда» . AssemblyScript.org . Проект AssemblyScript . Проверено 10 февраля 2012 года .
  12. ^ Проект Wasmtime. «WASI: Системный интерфейс WebAssembly» . WASI.dev . Проект Wasmtime . Проверено 10 февраля 2021 года .
  13. ^ Проект Wasmtime. «Wasmtime: небольшая и эффективная среда выполнения для WebAssembly и WASI» . Wasmtime.dev . Проект Wasmtime . Проверено 10 февраля 2021 года .
  14. ^ Wasmer, Inc. «Wasmer: универсальная среда выполнения WebAssembly» . Wasmer.io . Васмер, Inc . Проверено 10 февраля 2021 года .
  15. ^ Сеть разработчиков Mozilla. «Загрузка и запуск кода WebAssembly» . developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 года .
  16. ^ Сеть разработчиков Mozilla. «Использование API JavaScript WebAssembly» . developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 года .
  17. ^ GitHub. «График зависимостей AssemblyScript / assemblyscript» . GitHub.com . GitHub . Проверено 10 февраля 2021 года .
  18. ^ npmjs. "Assemblyscript Weekly Downloads" . npmjs.com . npmjs.com . Проверено 10 февраля 2021 года .
  19. ^ Alon Zakai (19 февраля 2020). «Доставка крошечных сборок WebAssembly» . YouTube.com . WebAssembly-Summit.org . Проверено 10 февраля 2021 года .
  20. Питер Саломонсен (19 февраля 2020 г.). "Музыка WebAssembly" . YouTube.com . WebAssembly-Summit.org . Проверено 10 февраля 2021 года .
  21. Аарон Тернер (29 октября 2020 г.). «Встречайте AssemblyScript: ваш следующий компьютерный язык» . Fastly.com . Быстро . Проверено 10 февраля 2021 года .

Внешние ссылки [ править ]

  • AssemblyScript.org (официальный сайт)
  • Документация по AssemblyScript (страница проекта)
  • Проект AssemblyScript (на GitHub)
  • ассемблерный скрипт (в npm )