読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

1月と2月の振り返り

近況

1月の前半

読書記録の方に書いていたけど、ひたすら読書してた。

などを読んだ。

わからないところは飛ばしてとりあえず目を通そう、と思って読んだ。

特にゲームエンジンアーキテクチャとGame Programming Patternsで「これを知れて良かった」という知識はあった。しかし一方で、その後読み飛ばしが癖になって、わかるとこすら読み飛ばしてしまうようになってしまった。元々斜め読みするタイプなので意識して読み飛ばす必要は無かったかもしれない。

「文章に集中できない」って結構恐怖だったので、もう二度とやりたくない。何を拾うか意識しての拾い読みか、進められそうなものをしっかり進めていくか、にしよう。

他にECSとSICPを進めていたけど、ECSはアセンブリのところで、SICPは一章で止まってる。2つ進めるのは無茶だったのでECSを選んで、次の理由でECSも止まってしまった。

1月の後半

事情があって、数年ぶりに実家に帰った。ここでいろいろと気づきがあったので後で書いておきたい。

まともにプログラミングできる環境では無かったので、A Little SmalltalkSmalltalk-80青本を読みながらSmalltalkVMの設計を学んで、後にプログラミングできるようになったのでJSでバイトコードインタプリタを書いていた

しかし段々と、「これは自分が今作りたいものには合わないぞ」との思いが強くなる。一番満たしたい「アセンブリで手早く処理系を作って動かしたい」「RAM192KBの環境で動かしたい」という条件がかなりキツく感じる。あとS式が恋しくなった。

2月

実家に帰ったことでいろいろ過去の情熱と触れる機会があったので、昔を思い出しながら曲を作ったりしていた

同時に「今作りたいもの」を作る道具の選択肢の1つ、Forth処理系をまた書いていた。

書いててやっぱり思ったのは、流石にコードに木構造は欲しいということ……。というか木構造だけでいい。

「今作りたいもの」に欲しい要素を挙げて整理してみると

  1. アセンブリで手早く処理系を作れる
  2. RAM数百KBの小さい環境で動く
  3. メタプログラミングができる
  4. インタラクティブに開発できる
  5. セルフホスティングまで辿り着きやすい
  6. シミュレーションがしやすい

6がちょっと漠然としてるけど、こんなところ。

Forthは1,2,4,5を満たしているし、3もできないこともない。しかし3は単にトークン又は文字を読み込む超原始的なマクロなので、少し凝ったことをしようとするとリスト処理を手動でやることになる。また、やはり6にはメモリの自動管理や、immutableに扱えるシンプルなデータ構造、つまりリストが欲しい。それもできないことはないんだけど、3と併せて考えると、やはりリスト処理が言語の核にあったほうが楽。

Smalltalkは4,6について超強いけど、1,2はめちゃ難しそうだし、5も自分がやると何年かかるやら……と現実的に思えない。ある程度の無茶はしたいんだけど、それでも現実的に思えない時点で情熱が出てこないのでキツい。

というわけで久々にLisp(というかS式)触るゾーと思って、S式→JavaScriptトランスレータを再度書いた。が、途中でこれ、なんかちょっと、違うぞ……?と思い始める。そもそも作りたいものにかなり遠回りしてる。

その後ヒューメイン・インターフェースに感化されて作りたいものの姿をはっきりと意識するにつれ、段々と何をやるべきか見えてきた。

同業者に認められようとしないという考えを知って、挑戦するぞという気持ちが再充填されたので、難しそうだと思っていたSECDマシンにとりかかる。めちゃくちゃ簡単だった。部分継続なんかも実装できてかなり高まる。あとやっぱScheme、というかGaucheいいな。書いててストレスに感じる瞬間が物凄く少ない。

SECDマシンで結構行けそうだと思えてきたので、アセンブリでの実装に挑戦します。がんばるぞ〜

広告を非表示にする