AssemblyScript - AssemblyScript

AssemblyScript
Logo AssemblyScript 2020.svg
Paradygmat Wieloparadygmat : funkcjonalny , ogólny , imperatywny , zorientowany obiektowo
Rodzina JavaScript , TypeScript
Zaprojektowany przez Daniel Wirtz, Max Graey
Deweloper Projekt AssemblyScript
Po raz pierwszy pojawiły się 2017 ; 4 lata temu  ( 2017 )
Wersja stabilna
0.18.29 / 28 kwietnia 2021 ; 0 dni temu  ( 2021-04-28 )
Dyscyplina typowania Statyczny
Zakres Leksykalny
Licencja Licencja Apache 2.0
Rozszerzenia nazw plików .ts
Formaty plików Tekst , format binarny Unicode (źródło)
.wasm (obiekt)
Stronie internetowej www .assemblyscript .org
Główne wdrożenia
asc (kompilator AssemblyScript)
Wpływem
JavaScript , TypeScript , WebAssembly

AssemblyScript to język programowania oparty na TypeScript (zasadniczo JavaScript z typami statycznymi), który jest zoptymalizowany pod kątem WebAssembly i skompilowany do WebAssembly przy użyciu asc , referencyjnego kompilatora AssemblyScript. Jest rozwijany przez projekt AssemblyScript i społeczność AssemblyScript.

Przegląd

W 2017 r.Dostępność obsługi WebAssembly , standardowej definicji kodu bajtowego niskiego poziomu i powiązanej maszyny wirtualnej , stała się powszechna w głównych przeglądarkach internetowych , zapewniając programistom sieci Web cel kompilacji niższego poziomu i potencjalnie wyższej wydajności po stronie klienta programy i aplikacje do wykonywania w przeglądarkach internetowych, oprócz interpretowanego (a także zazwyczaj dynamicznie kompilowanego ) języka skryptowego JavaScript . WebAssembly pozwala na statyczną kompilację programów i kodu z wyprzedzeniem, aby działały z wydajnością na poziomie natywnym lub „od podstaw ” w przeglądarkach internetowych, bez obciążenia związanego z interpretacją lub początkowym opóźnieniem kompilacji dynamicznej.

Wraz z przyjęciem WebAssembly w głównych przeglądarkach internetowych Alon Zakai, twórca Emscripten , kompilatora C i C ++ opartego na LLVM / Clang , który był ukierunkowany na podzbiór JavaScript o nazwie asm.js , dodał obsługę WebAssembly jako celu kompilacji w Emscripten, umożliwiając Programy i kod C i / lub C ++ do skompilowania bezpośrednio do WebAssembly.

Choć emscripten i podobnych kompilatory pozwalają developerzy pisać nowy kod lub portu istniejący kod, napisany w języku wysokiego poziomu, takich jak C, C ++, idź i Rust do WebAssembly celu osiągnięcia potencjalnie wyższy, wydajność wykonania rodzimy szczebla w przeglądarkach internetowych zmusza to programistów sieci Web przyzwyczajonych do tworzenia skryptów i aplikacji sieci Web po stronie klienta w języku JavaScript ( de facto języka programowania po stronie klienta w przeglądarkach sieci Web) do używania innego języka do kierowania na WebAssembly niż JavaScript. AssemblyScript, jako odmiana języka TypeScript, która jest prawie identyczna pod względem składniowym z JavaScript, umożliwia programistom przyzwyczajonym do JavaScript używanie znanego języka do kierowania na WebAssembly, potencjalnie zmniejszając krzywą uczenia się oddzielnego języka, który można skompilować do WebAssembly. Ponadto, ponieważ AssemblyScript został zaprojektowany jako optymalny język źródłowy dla WebAssembly, system typów języka ściśle odzwierciedla system WebAssembly, a język zapewnia standardowe funkcje niskiego poziomu (zwykle implementowane jako makra ), które mapują bezpośrednio na instrukcje WebAssembly, które odzwierciedlają wyspecjalizowany sprzęt instrukcje dostarczane przez nowoczesne procesory, takie jak instrukcje SIMD i instrukcje wektorowe, oraz bardziej wyspecjalizowane instrukcje, takie jak clz (liczenie początkowych bitów zerowych), ctz (liczenie końcowych bitów zerowych) i popcnt ( liczenie populacji ), używane w aplikacjach takich jak szyfrowanie i biblioteki kryptograficzne.

Kompilator AssemblyScript asc jest oparty na Binaryen, łańcuchu narzędzi kompilatora zaplecza opracowanego przez Alona Zakai, który kompiluje się do WebAssembly i jest składnikiem Emscripten (który również opracował Zakai). Asc kompilator i inne oprzyrządowanie są dostępne za pośrednictwem npm menedżera pakietów.

Chociaż WebAssembly był pierwotnie zaprojektowany do uruchamiania w przeglądarkach internetowych, rozwój WASI (WebAssembly System Interface), specyfikacji społeczności dla standardowego interfejsu API, który umożliwia programom WebAssembly dostęp do wywołań systemowych i innych funkcji systemu operacyjnego , doprowadził do rozwoju środowiska uruchomieniowego WebAssembly środowiska z projektów, takich jak Wasmtime i Wasmer, które umożliwiają WebAssembly i kod napisany w językach, takich jak AssemblyScript, który może się do niego kompilować, również w środowiskach innych niż sieci Web.

Zgodność z JavaScript

AssemblyScript jest kompilowany do modułów WebAssembly, które można następnie utworzyć na stronach sieci Web po stronie klienta przy użyciu standardowych metod JavaScript, takich jak WebAssembly.compileStreaming i WebAssembly.instantiateStreaming tak samo jak standardowe pliki binarne WebAssembly. Przekazywanie danych między JavaScript a skompilowanymi modułami WebAssembly, a także wywołania funkcji między JavaScript i WebAssembly są takie same, jak w przypadku dowolnego modułu WebAssembly.

Ponieważ język AssemblyScript jest głównie podzbiorem TypeScript (ma również mały nadzbiór TypeScript), możliwe jest napisanie programu AssemblyScript przy użyciu tego podzbioru i skompilowanie go zarówno do zwykłego JavaScript, jak i WebAssembly, przy użyciu zarówno kompilatora TypeScript, jak i kompilatora AssemblyScript odpowiednio. Pozwala to na przenośny kod, który działa zarówno w środowiskach JavaScript, jak i WebAssembly.

Stosowanie

Od marca 2021 r. Około 3000 projektów hostowanych na GitHub jest napisanych, w całości lub częściowo, w języku AssemblyScript, z około 5000 pobrań kompilatora AssemblyScript tygodniowo przez npm .

Przyjęcie

Główny programista Emscripten, Alon Zakai, scharakteryzował AssemblyScript jako „zaprojektowany z myślą o WebAssembly i rozmiarze kodu. Nie jest to istniejący język, którego używamy do nowego celu, ale jest to język zaprojektowany dla WebAssembly. Ma świetną wasm-opt integrację - w rzeczywistości jest z nią zbudowany - i bardzo łatwo jest uzyskać dobry rozmiar kodu ”.

Norweski muzyk Peter Salomonsen w wykładzie na szczycie WebAssembly w 2020 roku zatytułowanym „WebAssembly Music” zademonstrował użycie AssemblyScript do kompilacji w czasie rzeczywistym do WebAssembly w syntezie muzyki elektronicznej na żywo, mówiąc: „Wybrałem AssemblyScript, ponieważ ma wysoki poziom czytelności i kontrola niskiego poziomu; to jak język wysokiego poziomu, ale masz poczucie niskiego poziomu, a jeśli chcesz, możesz nawet napisać bezpośrednie wewnętrzne elementy zestawu WebAssembly ”.

Aaron Turner, starszy inżynier w Fastly , dostawcy usług przetwarzania w chmurze, który wykorzystuje WebAssembly do bezserwerowego środowiska obliczeniowego Compute @ Edge firmy, w recenzji AssemblyScript napisał:

Chociaż AssemblyScript wymaga ściślejszego pisania niż TypeScript, jest jak najbardziej zbliżony do składni i semantyki TypeScript - co oznacza, że ​​większość programistów JavaScript uzna, że ​​AssemblyScript będzie wygodny w użyciu - i zapewnia doskonałą obsługę współczesnego ekosystemu JavaScript. Na przykład kompilator AssemblyScript jest dostępny na npm , podobnie jak typowe narzędzia i biblioteki AssemblyScript, takie jak as-pect . Pliki AssemblyScript również używają rozszerzenia pliku „ .ts języka TypeScript i zawierają odpowiednie pisma, które pozwalają AssemblyScriptowi na podłączenie narzędzi TypeScript, takich jak linter TypeScript. Dzięki odpowiednim drobnym poprawkom, AssemblyScript może być nawet używany z kompilatorem TypeScript.

Jest to bardzo ekscytujące, ponieważ AssemblyScript oferuje programistom JavaScript niewielki narzut, aby wybrać język do wyprowadzenia WebAssembly - zarówno pod względem nauki czytania i pisania AssemblyScript, jak i korzystania z wielu wcześniej istniejących narzędzi które mogą już znajdować się w przepływie pracy programisty JavaScript. AssemblyScript jest często określany w społeczności WebAssembly jako świetna brama do pobierania WebAssembly. Oferuje dużej grupie programistów, którzy już piszą aplikacje internetowe, ścieżkę do nauki i nauki WebAssembly. Nawet jeśli zaczynasz od zera i nie jesteś szczególnie zaznajomiony z JavaScriptem lub TypeScriptem, AssemblyScript jest solidnym wyborem przy wyborze języka, aby rozpocząć tworzenie WebAssembly.

Jednak Turner podał jako potencjalne wady języka względną nowość języka, a tym samym brak niektórych funkcji dostępnych w większych, bardziej złożonych i uznanych językach programowania.

Zobacz też

Bibliografia

Linki zewnętrzne