3年ぶりに日記を書くことにしました。
前の記事は2022-10-07。高校3年生のときです。
ちょうどこの頃が大学受験の真っ最中で、面接に行った頃だったと記憶しています。
VimとQuineを引っ提げて大学に行き、うっかり電通大に入学しました。
大学というのはとても楽しいもんで、あっという間に3年生です。
大方単位は取れているので、4年生への進級は確実でしょう。数値計算の授業さえ落とさなければ。
仮に留年をすると、その時点で100万の追加の費用負担が生じ、大学にとどまることができなくなります。
3年になってからは金曜が全休になり、他の日が全て1限から始まるようになりました。
よるにきっかり体力を消耗して寝れる生活に。
言語論の先生とALGOLに再帰関数導入された経緯を話していました。
ALGOL60の仕様策定段階では、どうも再帰関数というのは通常の関数と別のものとして定義しないと処理系を実装できないと考えられていたみたい。よって、再帰関数の実装には消極的だったんだけど、土壇場で無理くりこれを可能にする文言(16word)を入れたとか。
ただ、結局それがなくても再帰関数を実装できることがわかっちゃった。残念
あと、algolのcall-by-nameの話。引数が参照されるたびに評価されるやつ
algolはcall-by-valueとcall-by-nameの両方の評価戦略がつかえるからややこしい。実用法はきっとたくさんあるんだけど、多分何やるにしても大変だと思う。call-by-valueはきっと超強力な概念。call-with-current-continuationと似た雰囲気を感じる。
Pythonのリスト内包表記って、いつからかのバージョンでスコープを作るようになったらしい。あるコード片を実行してベンチマークを取るときは、関数にくるんだ状態とそうでない状態を別のものとして分ける必要がありそう。
トップレベルならグローバル変数で名前引きだけど、ローカルならindexで引くから速いとか、しょうもない理由で結果が変わってしまう。
ところで、Ruby Kaigi 2025でずっとパーサの話を考えていたこともあり、湯淺 太一先生のコンパイラでLR(1)構文解析のことを調べていた。junk0612さんから強力な資料を提示してくださったこともあり、LALR(1)完全に理解したというところまで持ってこれた気がする。パーサーを議論するために必要な言語をある程度会得したんじゃないか?
speakerdeck.com
というわけで、いったんLALR(1)パーサージェネレーターを書くことを目標にしてやってこうかなと思っている。