集中講義、2日目。今日は「プログラミング言語の実装」。
今日は言語処理系の典型的な構造や実行環境などについて。字句解析、構文解析、最適化などの基本的な部分や、仮想機械やガーベージコレクションについても説明する。
昨日はプログラミング言語概論という感じで「お話」としても聞ける内容だったと思うのだが、今日はいきなり実装の詳細部分まで踏み込んだのでかなり難易度が高かったように思う。難しいと思った人はごめんね。
今年も昨年同様、実際に学生さんに前に出てもらって、ガーベージコレクションを実地で体験してもらった。リファレンスカウント、マークアンドスイープ、ストップアンドコピー、それとジェネレーショナルの各アルゴリズムについて実際に体を動かして学んでみた。
学生さんからは「オブジェクトの参照関係が見えにくかった」という指摘があったのだが、これはある程度わざとである。というのも、コンピュータにとってオブジェクト間の参照関係は鳥瞰的には見えないので、いちいちオブジェクトを覗きに行かないとわからないからだ。
まあ、自分でGCアルゴリズムをデザインする機会はまずないだろうけど、各種処理系のGCがどういうアルゴリズムで動いているか把握しておくことは役に立つこともある、かもしれない。
集中講義はこれでおしまい。三年間やってみたけど、三年目が一番うまく行ったような気がする。
来年もやりたいか、と聞かれると、ビミョー。
Lispのことをわかってない人は、結局Lispを「再発明」する破目に陥る、という話。グリーンスパンの第10法則ふたたび。
まあ、RubyだってLispの再発明であると言えないことはないわけで、それは認めちゃうんだけど、とはいえ、じゃあ、Lispが再発明も要らないほど素晴らしい言語かっていうと、ちょっと疑問がある。
「Lispファン」にはまったく見えないが、そうでない人には障害になる「なにか」が確実に存在して、再発明されたRubyとかが(Lispよりも)人気があるのはその「なにか」成分が少ないんじゃないかと。
ということは、再発明したのも無駄じゃなかったんじゃないかと思う。