Парадигма | Мультипарадигма : функциональная , общая , императивная , объектно-ориентированная |
---|---|
Семья | JavaScript , TypeScript |
Разработано | Дэниел Виртц, [1] Макс Грей [2] |
Разработчик | Проект AssemblyScript [1] |
Впервые появился | 2017 [3] |
Стабильный выпуск | 0.18.7 / 8 февраля 2021 г . [4] |
Печатная дисциплина | Статический |
Объем | Лексический |
Лицензия | Лицензия Apache 2.0 [5] |
Расширения имени файла | .ts |
Форматы файлов | Текст , Unicode (исходный код) .wasm двоичный формат (объект) |
Интернет сайт | www |
Основные реализации | |
asc (компилятор AssemblyScript) | |
Под влиянием | |
JavaScript , TypeScript , WebAssembly |
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 года [update]примерно 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
Ссылки [ править ]
- ^ a b Проект AssemblyScript (24 апреля 2020 г.). «Рабочая группа AssemblyScript» . GitHub.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
Дэниел Виртц (@dcodeIO) - Автор AssemblyScript
- ↑ Аарон Тернер (28 марта 2019 г.). «WebAssembly для разработчиков Javascript» . YouTube.com . WebAssembly SF . Проверено 10 февраля 2021 года .
@dcodeIO [Дэниел Виртц] и @MaxGraey [Макс Грей] - два основных разработчика AssemblyScript.
- ^ Проект AssemblyScript (2017). "Assemblyscript 0.1.0" . npmjs.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
- ^ Проект AssemblyScript (8 февраля 2021 г.). "скрипт сборки" . npmjs.com . Проект AssemblyScript . Проверено 10 февраля 2021 года .
- ^ Проект 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» . WebAssembly.org . Рабочая группа WebAssembly . Проверено 10 февраля 2021 года .
- ^ Алон Закай и авторы Emscripten. «Эмскриптен» . Emscripten.org . Проект Emscripten . Проверено 10 февраля 2021 года .
- ^ Проект AssemblyScript. «Виды» . AssemblyScript.org . Проект AssemblyScript . Проверено 10 февраля 2021 года .
- ^ Проект AssemblyScript. «Окружающая среда» . AssemblyScript.org . Проект AssemblyScript . Проверено 10 февраля 2012 года .
- ^ Проект Wasmtime. «WASI: Системный интерфейс WebAssembly» . WASI.dev . Проект Wasmtime . Проверено 10 февраля 2021 года .
- ^ Проект Wasmtime. «Wasmtime: небольшая и эффективная среда выполнения для WebAssembly и WASI» . Wasmtime.dev . Проект Wasmtime . Проверено 10 февраля 2021 года .
- ^ Wasmer, Inc. «Wasmer: универсальная среда выполнения WebAssembly» . Wasmer.io . Васмер, Inc . Проверено 10 февраля 2021 года .
- ^ Сеть разработчиков Mozilla. «Загрузка и запуск кода WebAssembly» . developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 года .
- ^ Сеть разработчиков Mozilla. «Использование API JavaScript WebAssembly» . developer.mozilla.org . Сеть разработчиков Mozilla . Проверено 10 февраля 2021 года .
- ^ GitHub. «График зависимостей AssemblyScript / assemblyscript» . GitHub.com . GitHub . Проверено 10 февраля 2021 года .
- ^ npmjs. "Assemblyscript Weekly Downloads" . npmjs.com . npmjs.com . Проверено 10 февраля 2021 года .
- ^ Alon Zakai (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 )
Эта статья о компьютерном программировании - незавершенная . Вы можете помочь Википедии, расширив ее . |