eJS: 組込みシステム向けJavaScript処理系

IoT(モノのインターネット)という言葉をテレビや新聞でよく聞くようになりました.現在では,ほとんどの電気製品に計算機が搭載されています.もちろん,電気製品に搭載されている計算機は,デスクトップパソコンのような何でもできる高性能な計算機ではありません.ほとんどの場合は,メモリが少なくCPUの速度も遅い制御用の計算機が使われています.

このような計算機のプログラムは,熟練のプログラマがアセンブリ言語やC言語を使って極力少ないメモリで動作するように作っています.JavaScriptなどの高級言語ではプログラム本体とは別に,プログラムを動かすためのソフトウェアである仮想機械が必要になり,多くのメモリが必要になります.もちろん,高級言語でのプログラミングに比べて大変で時間がかかります.せめてプロトタイプ(試作品)だけでもお手軽に作れると,生産性は大幅に向上します.

そこでこのプロジェクトでは,JavaScriptを使ってお手軽に電気製品に搭載されているような計算機のプログラムを作れるようにすることを目標にして,そのような計算機でも動作するJavaScript処理系を開発しています.熟練のプログラマのプログラムと同等とまではいきませんが,プロトタイピングに使えるようなものを目指しています.

一番の課題は仮想機械の大きさです.ブラウザ上で動くプログラムをお手軽に作れるJavaScriptには,様々な機能が詰め込まれており,いろんなプログラムが実行できるようになっています.そのため,仮想機械が巨大になってしまいます.しかし,実行するプログラムを固定すると,それに必要な最小限の仮想機械は小さく作ることができます.

このプロジェクトでは,実行するプログラムに合わせて仮想機械を自動的に合成する仕組みを開発しています.また,仮想機械の部品をできるだけ小さく作ることで,組込み機器で動作するJavaScript処理系を開発しています.

この研究は電気通信大学の岩崎研究室と共同で進めています.

合宿に行ってきました

発表

  • Tomoharu Ugawa, Hideya Iwasaki:
    Generating a Minimal JavaScript VM Specialized for Target Applications,
    2018 Virtual Machines and Language Implementations (VMIL 2018),
    Boston, USA, November 6, 2018
    [slide]
  • Takafumi Kataoka, Tomoharu Ugawa, Hideya Iwasaki:
    A Framework for Constructing JavaScript Virtual Machines with Customized Datatype Representations,
    The 33rd ACM/SIGAPP Symposium On Applied Computing (SAC 2018), ACM, Pau France, April 9-13, 2018. [slide]
  • 赤澤 亮弥, 鵜川 始陽, 岩﨑 英哉:
    言語仮想機械におけるカスタマイズ可能なごみ集めモジュールの実装,
    第20回プログラミングおよびプログラミング言語ワークショップ(PPL 2018) ポスターセッション, 鳥取県 皆生温泉, 2018年3月5日〜7日.
  • 野中智矢,片岡崇史,鵜川始陽,岩崎英哉:
    argumentsオブジェクトに着目したJavaScriptコンパイラの最適化,
    第59回プログラミング・シンポジウム ポスターセッション, 静岡県 伊東温泉, 2018年1月19日〜21日.
  • Takafumi Kataoka, Tomoharu Ugawa, Hideya Iwasaki:
    Generating Type-Based Dispatching Code for Intermediate Language Interpreter of Dynamic Typed Languages,
    15th Asian Symposium on Programming Languages and Systems (APLAS 2017) poster session, Suzhou, China, November 27-29, 2017.
  • 片岡崇史, 鵜川始陽, 岩崎英哉, 仮想機械における型ディスパッチャの自動生成. プログラミングシンポジウム2017 ポスターセッション, 静岡県伊東温泉, 2017年1月6日〜8日