デジタル人材の育成

未踏IT人材発掘・育成事業:2021年度採択プロジェクト概要(PassaweePJ)

最終更新日:2021年6月25日

1.担当プロジェクトマネージャー

  • 竹迫 良範(株式会社リクルート データプロダクトユニット ユニット長)

2.採択者氏名

  • Jantakorn Passawee(株式会社はてな Mackerel 開発チーム)

3.採択金額

  • 2,736,000円

4.テーマ名

  • Goの資産を再利用できるコンパイラ基盤

5.関連Webサイト

  • なし

6.申請テーマ概要

Goは、現在のソフトウェア産業界で最も勢いと需要のあるプログラミング言語の一つである。Goで実装されたソフトウェアやOSSライブラリはコンテナ型仮想化の基盤ソフトウェアであるDockerを始めとして、日に日に増えている。

Goコンパイラの特徴としてソースコードを様々なアーキテクチャで動くシングルバイナリとしてクロスコンパイルできることが挙げられる。これはコンテナサイズを小さくしたいモダンなWebアプリケーションアーキテクチャと相性が良く、実装言語として採用される理由に一役買っている。しかしその一方で、以下のような言語機能やコンパイラアーキテクチャの課題が挙げられる。

  • 他のWebアプリケーションで利用されている静的型付け言語と比較して、型の表現力が弱い。
    • ジェネリクスをサポートしていないため、ユーザが定義した汎用的なデータ構造一つ一つにメソッドを自力で実装しなければいけない。
    • 代数的データ型がない。
  • 設計思想の都合上、言語機能があまり高級ではない。
    • immutability をサポートしていない。
    • 関数型言語によくある高級なパターンマッチングをサポートしていない。
  • コード生成器がGoの抽象構文木と結合していて、別のコンパイラフロントエンドから利用しにくい。

本プロジェクトでは、以上の問題を解決するために、フロントエンドに依存せずにGoの資産を再利用できるコンパイラ基盤を開発する。

7.採択理由

本提案はLLVMやWASMのようなコンパイラ基盤をGo Assemblyベースで実現するという野心的なプロジェクトである。過去PerlコミュニティでParrotというレジスタベースの仮想マシンが提案されたことがあり、Perl6やPythonをサポートするためにPVM、PASM、PIR、PBC、IMCC、PIRCなど様々なレイヤーでの実装が作られたが、実行速度の問題もありメジャーになることはできなかった。

最初の性能要件として実行速度が重要視されて作られたGo Assemblyをベースにコンパイラ基盤を開発することが出来れば、Parrotで実現できなかったことが今の時代でできるかもしれない。コンパイラ共通基盤はCOINSなど学術系でも古くから長く研究されている分野でもあるため、世代を超えて、アカデミアとインダストリーが融合してプログラミング言語の基盤技術と実装が進化していくことを期待したい。

更新履歴

  • 2021年6月25日

    2021年度未踏IT人材発掘・育成事業:Passaweeプロジェクト概要を掲載しました。