pco2699’s blog

学んだものについて、メモしておく場所

アメリカに留学に来て1年が経った

アメリカに来て1年が経ったので、1年で思い出深かったことなどをざっと振り返ろうかと思う。

アメリカに来た過去の経緯などは以下を参照。

blog.pco2699.net blog.pco2699.net

2023春

2023春は今振り返っても「コンパイラデザイン」という授業が地獄だった、という記憶しかない。

www.cs.cmu.edu

コンパイラデザインはCMUの中でOSと双璧をなす、課題がエグい授業として有名なのだが、噂通りであった。

www.quora.com

The work is spread fairly evenly throughout the semester; each assignment is similarly sized, and they all have the same amount of time, roughly. It is however, a lot of work; these assignments would be considered, in a normal course, difficult assignments. If you've taken or heard of OS, it's like doing P2 every two weeks all semester. Thus, you spend basically all semester working hard but not drowning in it.

ざっと日本語訳すると、「すべての課題が普通の授業の難しい課題として扱われ、セメスターを通して頑張らないといけない」と言っており、ほんとうにこの通りである。

ちなみにOSはコンパイラデザイン以上にヤバい授業として有名で、授業のウェイトリストに登録しておくと「マスターの学生はほとんどCを取るからGPAを高く保ちたいなら大人しくdropしなさい」という脅迫めいたメールが来る。

コンパイラのヤバいところは、課題である。

課題はご想像の通りコンパイラを自作する課題なのだが、毎2週ごとに、コンパイラの仕様書が与えられるだけで、実装方針や実装方法のヒントはほとんど与えられない

そして、課題をsubmitすると、クラウド上でテストコードが走るのだが、そのテストコードが1万ケース以上ある

そして、テストコードが一つでもfailすると-1されるので、100点だとして100以上failedしていると0点である。

この非常に厳しいルールもあり、毎回課題の提出締め切り直前には、相棒と一週間ほど徹夜して頑張るという、命を削ったクラスであった。

そのほか、コンパイラについては、いろいろ語ることがあるのだが、ここには書ききれない気がするのでまた今度。

面白かったのは、一番ヤバい課題を徹夜して作業しているときにクラスの掲示板をのぞいたら、以下の投稿があったことである。

人生はGPAやバグやコンパイラよりも重要である

同意しかなかった。

コンパイラ以外にも、Studioと呼ばれるプロジェクトワークが始まったりもしたのだが、それもまた今度。

2023夏

うちのプログラムは夏もセメスターとして授業を受ける必要があるのが特徴で、そのためインターンシップなどはできない。

夏は主にStudioというプロジェクトワークが36単位で12単位は選択授業が取れる。 ただ、夏は人がいないこともあり、選択授業はほとんど選択肢が無い。

そのため、自分はコンパイラの地獄を生き抜いた戦友(以下も戦友と引き続き呼ばせていただく)とともにIndependent Studyをやることにした。

Independent StudyとはCMUの教授に個人的にお願いして、自分のアイデアで軽い研究をしたり、あるいは教授のプロジェクトを手伝ったりすることができるものである。

たまたま、うちのプログラムで春にWebAssemblyのテックトークをしに来た教授(以降も教授と呼称する)1がいて、よくよく調べたら「WebAssemblyの創始者」の一人だったのだが、「せっかくCMUに来てるしなんかedgyなことしたいよね」みたいな短絡的な理由でIndependent Studyできないか話を聞きに行くことにした。

なお、テックトークはWebAssemblyのVM上でJava?を動かすというもので、高度すぎて全く理解できなかった。ちなみにいまだに理解できていない。

テックトークの内容が全く理解できなかったので、実際に話に聞きに行くときには話が通じるかいささか心配ではあったが、非常に気さくにIndepedent Studyを受け入れてくれた。

自分は、教授が作っているWebAssemblyのVMでWASI2を実装することになり、戦友はWebAssemblyのVMのBytecode Instrumentation3のフロントエンド改善を行うことになった。

wasi.dev

ちなみに先にネタバレしてしまうと、最終的には、WASIの実装は半ば中断し、最終的に自分と戦友と教授でBytecode Instrumentationの論文を書いて投稿する、という学期当初は全く想定していなかった着地をして終える。

実際に、WebAssemblyのVMを見てみるとセルフホストした自作言語であるVirgilという言語でWebAssemblyのVMを自作しており、これが究極の自作erか...と教授の技術力に驚嘆せざるをえなかった。

github.com

github.com

Virgilは、JavaとOCamlとPythonを合わせたような言語で、本人も、「なるべく他の言語をやってきた人のLearning Costsや参入障壁を下げたい」という設計意図があるそうである。 一人で開発してるのでエコシステムが若干、不足している感じ4もあるが、非常に書きやすい言語だと思った。

そのほかにも、戦友が論文のパフォーマンス検証で、自分でコンパイルしたデカいWebAssemblyを食わせてエラーが出る問題があって困っていたのだが、週次ミーティングでその挙動を戦友が報告するなり、すぐさまVMのバグを特定して、ものの10分で修正するなど、自分が子供のころに思い描いていたスパーハッカー感がすごかった。

ネタバレした通り、夏中盤は、教授にガイダンスにより、論文を書くことになり、自分はBytecode Instrumentationのツール調査や実際にツールの比較を行った。一重にBytecode Instrumentationと言っても、論文はたくさんあり自分もざっと20本ぐらいはざっと読んだ。 おかげ、だいぶBytecode Insrtumentationの知識が深まり、楽しい夏になった。

論文は、現在カンファレンスの査読中なので、査読が無事に通ったら、リンクを貼り付けたい。

教授が単著で書いたWebAssemblyのインタプリタの論文やJITコンパイルの論文も非常に面白いので、ぜひ興味がある方は読んでいただきたい。

arxiv.org

arxiv.org

勉学以外でも教授が「Cultural Education」だと言ってハッカーやサイバーパンクな映画を上映するmovie-nightを行ったりと終始スーパークールなギークという感じで尊敬の念でいっぱいであった。

www.youtube.com

Hackersはなぜ日本で知名度が低いのかわからない90年代サイバーパンク映画。「すげえ、ちょっぱやな35.5 kbpsのモデムだ!」とか今見ると笑えるセリフが。。。

www.youtube.com

thirteenth floorは、マトリックスと同じ年に出たのがもったいないくらい脚本がよくできた仮想現実SF映画。ノワール的な感じの雰囲気もあってよい。

これから

最後の秋学期が始まる。最後の秋学期は自作DBerで有名なDatabase Systemsを取る予定。あと昨年取った Distributed SystemsのTAをやる予定。

15445.courses.cs.cmu.edu

あと就職活動中である。アメリカでの就職活動も行っているが、諸事情により日本での就職も検討している。もし来年1月以降に雇ってくれる会社でシニアソフトウェアエンジニア職5のJob Openinigsがあればご連絡いただけると...!!! 以下ができるとうれしい。

  • 英語を日常的に使う(読み書きだけなく喋りも)
  • 大規模・分散バックエンドの開発

  1. Ben L. Titzer先生 https://s3d.cmu.edu/people/core-faculty/titzer-ben.html
  2. WebAssembly System Interface
  3. デバッガやトレースなどプログラムの挙動をDynamicに見れるようにすること
  4. LSPやデバッガなど。デバッガは現在、鋭意開発中だった。
  5. 日本で8年ほどJava, Springのバックエンドエンジニアとして働いていたため、シニアのポジションを中心に就職活動中