Ассемблерскрипт
Парадигма | Мультипарадигмальность : функциональная , универсальная , императивная , объектно-ориентированная. |
---|---|
Семья | JavaScript , TypeScript |
Разработано | Дэниел Вирц, [1] Макс Грей [2] |
Разработчик | Проект АссамблеиСкрипт [1] |
Впервые появился | 2017 [3] |
Стабильная версия | 0.27.29 [4] / 7 июля 2024 г |
Дисциплина набора текста | Статический |
Объем | Лексический |
Лицензия | Лицензия Апач 2.0 [5] |
Расширения имен файлов | .тс |
Форматы файлов | Текст , Юникод (источник) .wasm Бинарный формат (объект) |
Веб-сайт | www |
Основные реализации | |
asc (компилятор AssemblyScript) | |
Под влиянием | |
JavaScript , TypeScript , WebAssembly |
AssemblyScript — это TypeScript на основе язык программирования , оптимизированный для WebAssembly и статически скомпилированный в него (в настоящее время используется asc , эталонный компилятор AssemblyScript). Похожий на ECMAScript и JavaScript , но со статическими типами, язык разработан проектом AssemblyScript. [6] при участии сообщества AssemblyScript.
Обзор
[ редактировать ]В 2017 году доступность поддержки WebAssembly , стандартного определения низкоуровневого байт-кода и связанной с ним виртуальной машины , получила широкое распространение среди основных веб-браузеров , предоставляя веб-разработчикам низкоуровневую и потенциально более производительную цель компиляции для клиентской стороны. программы и приложения для выполнения в веб-браузерах в дополнение к интерпретируемому (и на практике динамически компилируемому ) языку веб-скриптов JavaScript . [7] программы и код, статически компилировать WebAssembly позволяет заранее чтобы они могли работать с производительностью потенциально на собственном уровне или на « голом железе » в веб-браузерах, без затрат на интерпретацию или начальной задержки динамической компиляции. [8]
С внедрением WebAssembly в основные веб-браузеры Алон Закай, создатель Emscripten , LLVM / Clang на основе компилятора C и C++ , ориентированного на подмножество JavaScript под названием asm.js , добавил поддержку WebAssembly в качестве цели компиляции в Emscripten, что позволило Программы и код C и/или C++, подлежащие компиляции непосредственно в WebAssembly. [9]
В то время как Emscripten и подобные компиляторы позволяют веб-разработчикам писать новый код или переносить существующий код, написанный на языке высокого уровня, таком как C, C++, Go и Rust , в WebAssembly, чтобы достичь потенциально более высокой производительности выполнения на собственном уровне в веб-браузерах. , это вынуждает веб-разработчиков, привыкших разрабатывать клиентские веб-скрипты и приложения на ECMAScript/JavaScript ( де-факто язык программирования на стороне клиента в веб-браузерах), использовать для WebAssembly другой язык, чем JavaScript. AssemblyScript, как вариант TypeScript, который синтаксически похож на JavaScript, позволяет разработчикам, привыкшим к JavaScript, использовать знакомый язык для работы с WebAssembly, потенциально сокращая время обучения отдельному языку, который можно скомпилировать в WebAssembly. Более того, поскольку AssemblyScript был разработан как оптимальный исходный язык для WebAssembly, система типов языка точно соответствует системе типов WebAssembly. [10] язык предоставляет стандартные низкоуровневые функции (обычно реализованные в виде макросов ), которые напрямую сопоставляются с инструкциями WebAssembly, которые отражают инструкции, доступные на современных процессорах, такие как SIMD и векторные инструкции, а также более специализированные инструкции, такие как clz
(подсчитайте ведущие нули), ctz
(подсчитайте конечные нулевые биты) и popcnt
( подсчет населения ), используемый в таких приложениях, как шифрование и криптографические библиотеки. [11]
asc , эталонный компилятор AssemblyScript, основан на Binaryen, наборе инструментов внутреннего компилятора, разработанном Алоном Закаи, который компилируется в WebAssembly и является компонентом Emscripten (который также разработал Закай). asc- компилятор и другие инструменты доступны через менеджер пакетов npm .
Хотя WebAssembly изначально был разработан для выполнения в веб-браузерах, разработка WASI (Системный интерфейс WebAssembly), спецификации сообщества для стандартного API , который позволяет программам WebAssembly получать доступ к системным вызовам и другим операционной системы , функциям [12] привело к разработке сред выполнения WebAssembly на основе таких проектов, как Wasmtime [13] и Васмер [14] которые позволяют WebAssembly и коду, написанному на таких языках, как AssemblyScript, который может компилироваться в него, работать и в средах, не являющихся веб-средами.
Совместимость с JavaScript
[ редактировать ]AssemblyScript компилируется в модули WebAssembly, экземпляры которых затем можно создать в веб-страницах на стороне клиента с помощью стандартных методов JavaScript, таких как WebAssembly.compileStreaming
и WebAssembly.instantiateStreaming
точно так же, как стандартные двоичные файлы WebAssembly. [15] Передача данных между JavaScript и скомпилированными модулями WebAssembly, а также вызовы функций между JavaScript и WebAssembly выполняются так же, как и для любого модуля WebAssembly. [16]
Поскольку язык AssemblyScript в значительной степени является подмножеством TypeScript, теоретически можно написать программу AssemblyScript, используя это подмножество, и скомпилировать ее как в простой JavaScript, так и в WebAssembly, используя компилятор TypeScript и компилятор AssemblyScript соответственно. Это потенциально позволяет создавать переносимый код, который можно развертывать в средах выполнения JavaScript или WebAssembly .
Использование
[ редактировать ]По состоянию на июль 2022 г. [update] более 12 000 проектов, размещенных на GitHub , полностью или частично написаны на AssemblyScript, [17] с примерно 18 000 загрузок компилятора AssemblyScript в неделю через npm . [18] [19]
В 2021 году Webpack начал использовать AssemblyScript для ускорения расчета хеш-функций, таких как исходники xxhash и md4 . Это также позволило избавиться от нативных зависимостей.
Прием
[ редактировать ]Ведущий разработчик Emscripten Алон Закай охарактеризовал AssemblyScript как «разработанный с учетом WebAssembly и размера кода. Это не существующий язык, который мы используем для новых целей, а язык, разработанный для WebAssembly. wasm-opt
интеграция — на самом деле, она построена на ней — и очень легко получить хороший размер кода». [20]
Норвежский музыкант Питер Саломонсен в выступлении на саммите WebAssembly 2020 года под названием «Музыка WebAssembly» продемонстрировал использование AssemblyScript для компиляции в WebAssembly в реальном времени при синтезе живой электронной музыки, сказав: «Я выбрал AssemblyScript, потому что он имеет высокий уровень читаемости и низкоуровневый контроль; это похоже на язык высокого уровня, но вы получаете ощущение низкого уровня и даже можете писать встроенные функции WebAssembly, если хотите». [21]
Аарон Тернер, старший инженер Fastly , поставщика услуг облачных вычислений, использующего WebAssembly для бессерверной вычислительной среды компании Compute@Edge, в обзоре AssemblyScript написал: [22]
Хотя AssemblyScript требует более строгой типизации, чем TypeScript, он максимально приближен к синтаксису и семантике TypeScript — а это означает, что большинству разработчиков JavaScript будет удобно использовать AssemblyScript — и обеспечивает отличную поддержку современной экосистемы JavaScript. Например, компилятор AssemblyScript доступен на npm , а также распространенные инструменты и библиотеки AssemblyScript, такие как аспект . Файлы AssemblyScript также используют ' .ts ', и он включает в себя правильную типизацию, позволяющую AssemblyScript использовать инструменты TypeScript, такие как линтер TypeScript. Если внести небольшие изменения, AssemblyScript можно будет использовать даже с компилятором TypeScript.
Это очень интересно, поскольку AssemblyScript предлагает разработчикам JavaScript минимальные затраты на выбор языка для вывода WebAssembly — как с точки зрения обучения чтению и написанию AssemblyScript, так и с точки зрения использования множества уже существующих инструментов. это может уже быть в рабочем процессе разработчика JavaScript. В сообществе WebAssembly AssemblyScript часто называют отличным средством освоения WebAssembly. Он предлагает большой группе разработчиков, которые уже пишут приложения для Интернета, возможность освоить и изучить WebAssembly. Даже если вы начинаете с нуля и не особо знакомы с JavaScript или TypeScript, AssemblyScript — хороший выбор при выборе языка для вывода WebAssembly.
Однако Тернер далее назвал относительную новизну языка и, следовательно, отсутствие некоторых функций, доступных в более крупных, сложных и устоявшихся языках программирования, потенциальными, но временными недостатками языка.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б Проект AssemblyScript (24 апреля 2020 г.). «Рабочая группа по ассемблеру» . GitHub.com . Проект АссамблеиСкрипта . Проверено 10 февраля 2021 г.
Дэниел Виртц (@dcodeIO) — автор AssemblyScript
- ^ Аарон Тернер (28 марта 2019 г.). «WebAssembly для разработчиков Javascript» . YouTube.com . Веб-сборка СФ . Проверено 10 февраля 2021 г.
@dcodeIO [Дэниел Виртц] и @MaxGraey [Макс Грей] — два основных разработчика AssemblyScript.
- ^ Проект AssemblyScript (2017). «ассемблерный скрипт 0.1.0» . npmjs.com . Проект АссамблеиСкрипта . Проверено 10 февраля 2021 г.
- ^ «Релиз 0.27.29» . 7 июля 2024 г. . Проверено 25 июля 2024 г.
- ^ Проект AssemblyScript (29 сентября 2017 г.). «ЛИЦЕНЗИЯ» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 г.
AssemblyScript/assemblyscript лицензируется по лицензии Apache License 2.0.
- ^ Проект AssemblyScript. «Проект AssemblyScript» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 г.
- ^ Группа сообщества WebAssembly (ноябрь 2017 г.). «Дорожная карта» . WebAssembly.org . Группа сообщества WebAssembly . Проверено 10 февраля 2021 г.
- ^ Рабочая группа WebAssembly. «Веб-сборка» . WebAssembly.org . Рабочая группа по веб-сборке . Проверено 10 февраля 2021 г.
- ^ Алон Закай и авторы Emscripten. «Эмскриптен» . Emscripten.org . Проект Эмскриптен . Проверено 10 февраля 2021 г.
{{cite web}}
:|author=
имеет общее имя ( справка ) - ^ Проект AssemblyScript. «Типы» . Сайт АссамблеиScript.org . Проект AssemblyScript . Проверено 10 февраля 2021 г.
- ^ Проект AssemblyScript. "Среда" . Сайт АссамблеиScript.org . Проект AssemblyScript . Проверено 10 февраля 2012 г.
- ^ Проект Вастимайм. «WASI: Системный интерфейс WebAssembly» . WASI.dev . Проект Wasmtime . Проверено 10 февраля 2021 г.
- ^ Проект Вастимайм. «Wasmtime: небольшая и эффективная среда выполнения для WebAssembly и WASI» . Wasmtime.dev . Проект Wasmtime . Проверено 10 февраля 2021 г.
- ^ Wasmer, Inc. «Васмер: универсальная среда выполнения WebAssembly» . Васмер.io . Васмер, Инк . Проверено 10 февраля 2021 г.
- ^ Сеть разработчиков Mozilla. «Загрузка и запуск кода WebAssembly» . http://developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 г.
- ^ Сеть разработчиков Mozilla. «Использование API JavaScript WebAssembly» . http://developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 г.
- ^ Гитхаб. «График зависимостей AssemblyScript/assemblyscript» . GitHub.com . Гитхаб . Проверено 24 июня 2022 г.
- ^ npmjs. «Еженедельные загрузки ассемблера» . npmjs.com . npmjs.com . Проверено 24 июня 2022 г.
- ^ «Устранение ошибки в машинописном тексте» . 3 июня 2022 г. Суббота, 7 мая 2022 г.
- ^ Алон Закай (19 февраля 2020 г.). «Доставка крошечных сборок WebAssembly» . YouTube.com . WebAssembly-Summit.org . Проверено 10 февраля 2021 г.
- ^ Питер Саломонсен (19 февраля 2020 г.). «Музыка WebAssembly» . YouTube.com . WebAssembly-Summit.org . Проверено 10 февраля 2021 г.
- ^ Аарон Тернер (29 октября 2020 г.). «Знакомьтесь, AssemblyScript: ваш следующий компьютерный язык» . Fastly.com . Быстро . Проверено 10 февраля 2021 г.
Внешние ссылки
[ редактировать ]- AssemblyScript.org (официальный сайт)
- Документация по AssemblyScript (страница проекта)
- Проект AssemblyScript (на GitHub)
- ассемблерный скрипт (в npm )