有限猿定理

  •  About
  •  GitHub

Cookpad Spring 1day Internship 2019 Swiftコンパイラコースに参加した

  •  Swift
  •  コンパイラ

2019年3月28日(木)にクックパッド株式会社で開催された1dayインターンシップのSwiftコンパイラコースに参加しました。

このコースは、名前の通りSwiftを用いてSwift言語のサブセットコンパイラを作成するための技術・知識を学ぶためのワークショップです。

インターンシップの主な講義内容、課題はGitHub上で公開されています。

https://github.com/NagayamaRyoga/MinSwift-workshop

作成するコンパイラについて

このワークショップの目的は、関数の定義、呼び出しなどができる簡単なSwift言語のサブセット(MinSwift)を構文解析し、LLVM IRを出力する(もしくはJITコンパイルする)コンパイラを作成することでした。

そのために、再帰降下構文解析器の作成と、LLVM IRを出力するコードジェネレータの作成方法を学びました。

また、字句解析器は実装せず、トークンの分割にはswift-syntaxを使用しました。

講義の難易度について

講義の内容は主にLLVMのチュートリアルであるKaleidoscopeの前半程度の範囲であり、要求される知識・取得できる知識もおおよそそれに準じます。

実装の難易度に関しては、すでにある程度基盤の書かれたコードの一部が歯抜け・未実装になっており、それを穴埋めする形で実装していくため、上記Kaleidoscopeの実装よりも難易度が低めです。

また、開発はテスト駆動開発(TDD)で行われ、テストケースのいくつかはあらかじめ用意されているため、実装の検証も簡単化されていました。

参加直前

事前にインターンシップで利用するSlackチャンネルを通じて、 当日の講義で使用するプロジェクトと環境構築の方法が公開されました。

参加直前は1dayとはいえはじめてのインターンシップということもあり強い不安を憶えていたため、 「知っている(=1人でも実装が可能な)コードの実装に貴重なインターンシップの時間を割くべきではない」 「インターンシップに参加する他の意欲的な参加者に対して出遅れるべきではない」 と考え、2日前から移動中などの合間時間で当日の課題をあらかじめ実装していました。

参加当日

そうすると当日にやることがほとんどなにもありませんでした。

参加した感想

普段からコンパイラを開発しており、また、とても詳しいとまでは言えずとも以前から趣味や研究でLLVMを利用してきたため、一定量の知識がありました。 さらに、数年前にKaleidoscopeのチュートリアルを読んだこともあったので、今回のインターンシップに参加したことで新たに得られた知識や技術は特にありませんでした。

そういう意味ではわずかに不満の残る内容となってしまいました。

最後に

クックパッドの講師の先生方、共にインターンシップへ参加した皆さん、今回はありがとうございました。

また、午後からは体調を崩してしまったため様々な方々に大変なご迷惑をおかけしました。重ねてお礼を申し上げます。