Microsoftは先頃、Static TypeScript(STS)を紹介する研究論文を、Managed Programming Languages and Runtimes 2019 (MPLR 2019)国際会議に提出した。STSは、リソースの少ない組み込みデバイスを対象とした、TypeScriptのサブセットである。STSプログラムは、わずか16kBのRAMしか搭載していないデバイス上で、組み込みのインタープリタよりも高速に動作することにより、バッテリの持続時間を延ばすことができる。
Static TypeScriptは、特にマイクロコントローラユニット(MCU)をターゲットに開発されたTypeScriptの構文上のサブセットで、16-256kBのRAM容量を持つMCU上で、効率的に実行可能なマシンコードにコンパイルされる。
STSでは、with
やeval
、プロトタイプベースの継承、arguments
キーワード、あるいは.apply
メソッドなど、JavaScriptの最も動的な機能が削除されている。this
ポインタとnew
構文は、クラス外や非クラス型では使用できない。ジェネレータやawait
、async function
式、あるいはファイルベースのモジュールなど、最近になってJavaScript言語に追加された機能も実装していない。
さらにSTSは、TypeScriptの型規則からも逸脱している。TypeScriptがクラスに構造的型付け(structural typing)を使用するのに対して、Static TypeScriptでは名前的型付け(nominal typing)を使用しているのだ。これは具体的には、interface
はclass
と同じ名前を持つことができない、非class
タイプをclass
にキャストできない、組み込みタイプをクラスに継承できない、this
をメソッド外で使用することができない、関数のオーバーロードができない、といったことを暗に示している。特にSTSでは、キー・バリューマップとして機能するオブジェクトを、クラスのインスタンスや、関数や配列などその他の特殊なJavaScriptオブジェクトから、型のレベルで分離している。
このような選択の結果として、STSでは、Virtual Call Tableのテクニックを使って、クラスを効率的にコンパイルすることが可能になった。重要なのは、型推論が容易になったことによって、標準的なJavaScriptのようなコードが可能になっていることだ。STSの主要ユーザであるMakeCodeのソフトウェアエンジニアであるDaryl Zuniga氏は、HackerNewsで次のように説明している。
型推論を多用することにより、初心者プログラムの大部分には型アノテーションがなく、一見するとJavascriptのようです。
あるHackerNewsユーザは、支持の意思を次のように述べている。
非常に興味深いアイデアです。結果として、廃止されたものの大部分は、JSの機能の中でも問題のあるもののように思えます。結果としては、クロージャや非常に便利なハッシュマップ構文を備えた穏やかなOOP静的言語という、かなりSwift的なものになりました。
Microsoftの調査からは、STSコンパイラが効率的でコンパクトなARM Thumbマシンコードを生成することが報告されている。後者のポイントについては、STSで記述されたプラットフォームゲームで具体的に示されている。それによると、25ドル、120MHz、192kBのRAM AdaFruitデバイスの120x160ディスプレイ上で、毎秒30フレームでの動作が可能であるという。IoT.js、Espruino、Duktape、MicroPythonといったJavaScript代替の組み込みインタープリタは、研究論文で提示されたテストでは、大幅に高いメモリ消費プロファイルと低いパフォーマンスを示している。
STSプログラムは、Webブラウザを使用して、または手動操作によって、組み込みデバイスにデプロイ可能である。すなわち、アプリやドライバをインストールする必要はない。論文では、次のように説明されている。
コンパイルされたプログラムはダウンロードされた後、ユーザの手動によって、USB大容量ストレージなどのデバイスに、ファイルコピーを経由して(あるいは、Webサイトを物理デバイスに接続する新しい標準であるWebUSBを通じて直接的に)転送されます。
Zuniga氏は、MakeCodeの重要な対象である、物理コンピューティングを学ぶ若い生徒たちにとって、ブラウザベースのデプロイとシミュレーションが非常に重要であること強調する。
STSにはブラウザ内で動作するシミュレータが付属しているので、プログラムをハードウェア上で実行する前に、そこでテストすることができます。教育目的においては、ハードウェアの問題を診断することが学生にとって非常に難しいということが分かっているので、可能な限り早くエラーを見つけて表示するようにします。
将来的にSTSは、IoT(Internet of Things)に大きな影響を与えるだろう、とMicrosoftでは見ている。
IoTの将来においては、STSなどの静的に型付けされた言語が重要な役割を果たすだろうと私たちは考えています。組み込みデバイスをより効率的に — より速く、より少ないエネルギで — 動作可能にすると同時に、組み込み開発者ではないプログラマに対して、この種のデバイスで一般的に使用されている低レベル言語に代わる、より簡単で高レベルな言語を提供することが可能になります。