| パラダイム | マルチパラダイム:関数型、ジェネリック、命令型、オブジェクト指向 |
|---|---|
| 家族 | JavaScript、TypeScript |
| デザイン: | ダニエル・ワーツ[1] 、 マックス・グレイ[2] |
| 開発者 | アセンブリスクリプトプロジェクト[1] |
| 初登場 | 2017年[3] |
| 安定版リリース | 0.27.31 [4]
/ 2024年11月12日 |
| タイピングの規律 | 静的 |
| 範囲 | 語彙 |
| ライセンス | Apacheライセンス2.0 [5] |
| ファイル名拡張子 | .ts |
| ファイル形式 | テキスト、Unicode (ソース) .wasmバイナリ形式(オブジェクト) |
| Webサイト | アセンブリスクリプト |
| 主な実装 | |
| asc (AssemblyScript コンパイラ) | |
| 影響を受けた | |
| JavaScript、TypeScript、WebAssembly | |
AssemblyScriptはTypeScriptベースのプログラミング言語で、 WebAssemblyに最適化され、静的にコンパイルされます(現在はAssemblyScriptのリファレンスコンパイラであるascを使用しています)。ECMAScriptやJavaScriptに似ていますが、静的型を持つこの言語は、AssemblyScriptプロジェクト[6]によってAssemblyScriptコミュニティからの貢献を受けて開発されています。
概要
2017 年には、低レベルのバイトコードと関連する仮想マシンの標準定義であるWebAssemblyのサポートが主要なウェブブラウザに普及し、解釈型の(そして実際には動的にコンパイルされる) JavaScript ウェブスクリプト言語に加えて、ウェブ開発者に、ウェブブラウザ内で実行するクライアント側プログラムやアプリケーションの低レベルで潜在的に高性能なコンパイルターゲットを提供しました。[7] WebAssembly を使用すると、解釈のオーバーヘッドや動的コンパイルの初期遅延なしに、プログラムやコードを事前に静的にコンパイルして、ウェブブラウザ内で潜在的にネイティブレベルまたは「ベアメタル」パフォーマンスで実行できます。 [8]
主要なウェブブラウザでWebAssemblyが採用されたことを受けて、JavaScriptのサブセットであるasm.jsをターゲットとしたLLVM / ClangベースのCおよびC++コンパイラであるEmscriptenの作成者であるAlon Zakaiは、EmscriptenのコンパイルターゲットとしてWebAssemblyのサポートを追加し、Cおよび/またはC++のプログラムとコードをWebAssemblyに直接コンパイルできるようにしました。[9]
Emscripten や同様のコンパイラを使用すると、Web 開発者はC、C++、 Go、Rustなどの高級言語で記述された新しいコードを作成したり、既存のコードをWebAssembly に移植したりして、Web ブラウザーで潜在的に高いネイティブレベルの実行パフォーマンスを実現できますが、ECMAScript/JavaScript (Webブラウザーの事実上のクライアント側プログラミング言語) でクライアント側 Web スクリプトやアプリケーションを開発することに慣れている Web 開発者は、WebAssembly をターゲットにするために JavaScript とは異なる言語を使用する必要があります。AssemblyScript は、構文が JavaScript に似ている TypeScript のバリアントであり、JavaScript に慣れている開発者は、使い慣れた言語を使用して WebAssembly をターゲットにできるため、WebAssembly にコンパイルできる別の言語の学習曲線が短縮される可能性があります。さらに、AssemblyScriptはWebAssemblyに最適なソース言語として設計されているため、言語の型システムはWebAssemblyの型システムをほぼ反映しており、[10]言語は標準的な低レベル関数(通常はマクロとして実装)を提供します。これらの関数は、 SIMDやベクトル命令などの最新のプロセッサで利用可能な命令や、暗号化や暗号ライブラリなどのアプリケーションで使用される(先頭のゼロビットを数える)、(末尾のゼロビットを数える)、(集団カウント)などのより特殊な命令を反映したWebAssembly命令に直接マッピングされます。[11]clzctzpopcnt
リファレンス AssemblyScript コンパイラーである asc は、 Alon Zakai が開発したバックエンド コンパイラー ツールチェーンであるBinaryen に基づいています。これは WebAssembly にコンパイルされ、 Emscripten (これも Zakai が開発) のコンポーネントです。ascコンパイラーとその他のツールは、 npmパッケージ マネージャーから入手できます。
WebAssemblyはもともとウェブブラウザ内での実行用に設計されていましたが、WebAssemblyプログラムがシステムコールやその他のオペレーティングシステム機能にアクセスできるようにする標準APIのコミュニティ仕様であるWASI(WebAssembly System Interface)の開発[12]により、Wasmtime [13]やWasmer [14]などのプロジェクトによる WebAssemblyランタイム環境の開発が進み、WebAssemblyや、それにコンパイルできるAssemblyScriptなどの言語で書かれたコードをウェブ以外の環境でも実行できるようになりました。
JavaScriptとの互換性
AssemblyScriptはWebAssemblyモジュールにコンパイルされ、標準のWebAssemblyバイナリWebAssembly.compileStreamingと同様に、などの標準JavaScriptメソッドを使用してクライアント側のWebページにインスタンス化できます。 [15] JavaScriptとコンパイルされたWebAssemblyモジュール間のデータの受け渡し、およびJavaScriptとWebAssembly間の関数呼び出しは、他のWebAssemblyモジュールの場合と同じです。[16]WebAssembly.instantiateStreaming
AssemblyScript 言語は主に TypeScript のサブセットであるため、理論的には、このサブセットを使用して AssemblyScript プログラムを作成し、それぞれ TypeScript コンパイラと AssemblyScript コンパイラを使用して、プレーンな JavaScript と WebAssembly の両方にコンパイルすることが可能です。これにより、JavaScript または WebAssemblyランタイム環境のどちらにも展開できる移植可能なコードが可能になります。
使用法
2022年7月現在、GitHub[アップデート]でホストされている12,000以上のプロジェクトは、全体または一部がAssemblyScriptで書かれており、[17] npm経由で毎週約18,000回のAssemblyScriptコンパイラのダウンロードが行われています。[18] [19]
2021年、WebpackはAssemblyScriptを使用してxxhashやmd4ソースなどのハッシュ関数の計算を高速化しました。これにより、ネイティブ依存関係を取り除くことも可能になりました。
受付
Emscriptenの主任開発者であるAlon Zakai氏は、AssemblyScriptを「WebAssemblyとコードサイズを考慮して設計されています。これは新しい目的のために使用している既存の言語ではなく、WebAssembly用に設計された言語です。優れたwasm-opt統合性を備えており、実際にはWebAssemblyを使用して構築されており、適切なコードサイズを実現するのは非常に簡単です。」と評しています。[20]
ノルウェーのミュージシャン、ピーター・サロモンセンは、2020年のWebAssemblyサミットでの「WebAssembly Music」と題した講演で、ライブの電子音楽合成におけるWebAssemblyへのリアルタイムコンパイルにAssemblyScriptを使用する方法を実演し、「AssemblyScriptを選んだのは、高レベルの可読性と低レベルの制御性を備えているからです。高級言語のようですが、低レベルの感覚が得られ、必要に応じて直接WebAssembly組み込み関数を記述することもできます。」と述べています。[21]
クラウドコンピューティングサービスプロバイダーであるFastlyのシニアエンジニアであるアーロン・ターナー氏は、同社のCompute@Edgeサーバーレスコンピューティング環境にWebAssemblyを使用しているが、AssemblyScriptのレビューで次のように書いている。[22]
AssemblyScript は TypeScript よりも厳密な型付けを必要としますが、TypeScript の構文とセマンティクスに可能な限り近いものになっています。つまり、ほとんどの JavaScript 開発者は AssemblyScript を快適に使用できるでしょう。また、AssemblyScript は最新の JavaScript エコシステムに対する優れたサポートを可能にします。たとえば、AssemblyScript コンパイラーはnpmで利用できるほか、as-pectなどの一般的な AssemblyScript ツールやライブラリも利用できます。AssemblyScript ファイルも TypeScript の ' .ts ' ファイル拡張子を使用し、TypeScript リンターなどの TypeScript ツールを AssemblyScript が利用できるようにするための適切な型付けが含まれています。適切な小さな調整を加えることで、AssemblyScript を TypeScript コンパイラーで使用することもできます。
これは非常にエキサイティングなことです。AssemblyScript は、JavaScript 開発者が WebAssembly を出力する言語を習得するためのオーバーヘッドの少ないエントリ ポイントを提供するからです。AssemblyScript の読み書きを学ぶという点でも、JavaScript 開発者のワークフローにすでにある多くの既存のツールを使用するという点でもそうです。AssemblyScript は、WebAssembly を習得するための優れたゲートウェイとして WebAssembly コミュニティでよく言及されています。これは、Web 用アプリケーションをすでに作成している多数の開発者に、WebAssembly を習得して学習するための道筋を提供します。ゼロから始める場合や、JavaScript や TypeScript に特に精通していない場合でも、AssemblyScript は WebAssembly の出力を開始する言語を選択する際の確実な選択肢です。
しかし、ターナー氏は、この言語が比較的新しいため、より大規模で複雑で確立されたプログラミング言語で利用できるいくつかの機能が欠けていることを、この言語の潜在的だが一時的な欠点として挙げました。
参照
参考文献
- ^ ab AssemblyScript プロジェクト (2020 年 4 月 24 日)。「AssemblyScript ワーキング グループ」。GitHub.com。AssemblyScriptプロジェクト。2021年2 月 10 日閲覧。Daniel
Wirtz (@dcodeIO) - AssemblyScript の作者
- ^ Aaron Turner (2019年3月28日). 「WebAssembly for Javascript Developers」. YouTube.com . WebAssembly SF . 2021年2月10日閲覧。
@dcodeIO [Daniel Wirtz] と @MaxGraey [Max Graey] は、AssemblyScript の主要な開発者です。
- ^ AssemblyScript プロジェクト (2017)。「assemblyscript 0.1.0」。npmjs.com。AssemblyScriptプロジェクト。2021 年2 月 10 日閲覧。
- ^ “リリース 0.27.31”. 2024年11月12日. 2024年11月25日閲覧。
- ^ AssemblyScript プロジェクト (2017 年 9 月 29 日)。「LICENSE」。GitHub.com。AssemblyScriptプロジェクト。2021年2 月 10 日閲覧。AssemblyScript
/assemblyscript は、Apache License 2.0 に基づいてライセンスされています
。 - ^ AssemblyScript プロジェクト。「AssemblyScript プロジェクト」。GitHub.com。AssemblyScriptプロジェクト。2021年2 月 10 日閲覧。
- ^ WebAssembly コミュニティ グループ (2017 年 11 月)。「ロードマップ」。WebAssembly.org。WebAssemblyコミュニティ グループ。2021年2 月 10 日閲覧。
- ^ WebAssemblyワーキンググループ。「WebAssembly」。WebAssembly.org。WebAssemblyワーキンググループ。 2021年2月10日閲覧。
- ^ Alon Zakai と Emscripten 貢献者。「Emscripten」。Emscripten.org。Emscriptenプロジェクト。2021年2 月 10 日閲覧。
- ^ AssemblyScript プロジェクト。「Types」。AssemblyScript.org。AssemblyScriptプロジェクト。2021年2 月 10 日閲覧。
- ^ AssemblyScript プロジェクト。「環境」。AssemblyScript.org。AssemblyScriptプロジェクト。2012年2 月 10 日閲覧。
- ^ Wasmtime プロジェクト。「WASI: WebAssembly システム インターフェース」。WASI.dev。Wasmtimeプロジェクト。2021年2 月 10 日閲覧。
- ^ Wasmtime プロジェクト。「Wasmtime: WebAssembly と WASI のための小型で効率的なランタイム」。Wasmtime.dev。Wasmtimeプロジェクト。2021年2 月 10 日閲覧。
- ^ Wasmer, Inc. 「Wasmer: ユニバーサル WebAssembly ランタイム」。Wasmer.io。Wasmer , Inc. 2021 年2 月 10 日閲覧。
- ^ Mozilla Developer Network. 「WebAssembly コードの読み込みと実行」. developer.mozilla.org . Mozilla Developer Network . 2021 年2 月 10 日閲覧。
- ^ Mozilla Developer Network. 「WebAssembly JavaScript API の使用」. developer.mozilla.org . Mozilla Developer Network . 2021 年2 月 10 日閲覧。
- ^ GitHub. 「AssemblyScript/assemblyscript 依存関係グラフ」. GitHub.com . GitHub . 2022年6月24日閲覧。
- ^ npmjs. 「assemblyscript Weekly Downloads」. npmjs.com . 2022年6月24日閲覧。
- ^ 「Typescript のエラーを解決する」。2022 年 6 月 3 日。2022年5月7日(土)
- ^ Alon Zakai (2020 年 2 月 19 日). 「Shipping Tiny WebAssembly Builds」. YouTube.com . WebAssembly-Summit.org . 2021 年2 月 10 日閲覧。
- ^ Peter Salomonsen (2020年2月19日). 「WebAssembly Music」. YouTube.com . WebAssembly-Summit.org . 2021年2月10日閲覧。
- ^ Aaron Turner (2020 年 10 月 29 日). 「AssemblyScript のご紹介: 次世代コンピューティング言語」. Fastly.com . Fastly . 2021 年2 月 10 日閲覧。
外部リンク
- AssemblyScript.org (公式サイト)
- AssemblyScript ドキュメント (プロジェクト ページ)
- AssemblyScript プロジェクト (GitHub 上)
- assemblyscript ( npm上)
