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

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

私に教えられることなら

5月の振り返りと近況

ですます調にしたりしなかったりしてるこのブログですが、してない記事を読み返してて「無愛想だなこの人……」と感じたのでまたですます調にしてみます。

音楽

ドラムとベースのパターンを打ち込みたくなったので久々に曲作りました。愉快な雰囲気。

soundcloud.com

他にもスケッチを2つほど。

サウンドクラウドで曲の個別URLから聞くと、他人の曲が流れてしまうのが誤解を招きそうでどうかと思うので、次から別のサイト使おうと思います。

あと、やっぱり打ち込みじゃなくて楽器やりたい……

AmeLisp & 3imp

オリジナルLisp処理系(AmeLisp)は、

  1. アセンブリでSECDマシン(シンボルは作りっぱなし、コンスセルのみのMark&Sweep)
  2. CでSECDマシン(コピーGC複数データ型対応)

まで作って、3impのスタックベースVMに移行しようと思いました。

どうせならS式でCを書いてマクロで楽したいと思い、3impを読みながら並行してS式→CのトランスレータScheme/Gaucheで書きました。ついでに名前をAmeLispから変えたり。

GitHubリポジトリ

例えば次のようなコードからCを生成します。エントリポイントに(dotest%)と記述すると、そこにテスト実行コードを展開して、assertの結果を云々したりとかそんなかんじです。

(deftest root-stack
  (garbage-collect 0)
  (def :Obj* o1 (alloc-obj 2))
  (root-push o1)

  ;; root stackがGCから退避できているか
  (garbage-collect 0)

  (def :Obj* o2 (root-pop))
  (assert "root push/pop" (= (cell-size o2) 3)))

それから3imp4章のスタックベースVMも、バグがありますが一応読んで実装して、最適化や改善で何を行うかもわかってきました。

GitHubリポジトリ

しかし、ここからどうするかを悩んでいます。

3impのバグをとって、末尾「再帰」最適化やDirect Invocationに取り組んだとしても、結局それらは捨てます。そしてAmeLispで再実装することになるでしょう。バグもまた変わった形になると思います。

芸術系の人の上手いプロトタイピングに比べて、プログラマはちょっと作りこみすぎてしまう、というような意見を見て確かになあ〜と思いました。

プロトタイプを作ることで経験や洞察が得られて有利になるとは思うんですが、それにかける時間というコストと、リターンのバランスを自分は上手く取れてないと感じました。

そして、Lisp処理系を作るモチベーションが今は低くて、他の作りたいものに対するモチベーションが高い状態です。毎日少しずつ続けていけば、後々大きいものができるだろう、と30分ずつ毎日1時間作業し続けていました。

しかしその時間を、他の作りたいもののプロトタイプ制作に回していれば、もうちょっと楽しく過ごせた気がします。

「学習のために」や「毎日コツコツと」という言葉に出会うと、どうしてもサンクコストに気を払わなくなってしまいがちだと、振り返って思います。

要するに、その時一番作りたいものだけに着手して、もうちょっと上手いプロトタイピングを目指し、他のプロジェクトを放置することを受け入れよう、という決意でした。

Smalltalk

パーサやVMを作る前に、ちょっとSmalltalkでいくつか便利ツールを作ろうと思って、いろいろ調べていました。

来月はそのツールに取り掛かります。

運動

相変わらずMTBに乗っています。体が軽くなってきました。心拍数は前ほど上がらなくなり、同じ坂を重いギアで一気に上がっても150〜160ぐらいで収まるようになりました。心肺機能にもマッスルメモリー的なものがあるんでしょうか?

それから、肩の脱臼が癖になってしまい一度辞めた空手を、紆余曲折の末再開しました。元々健康のために続けていたのに、打ち合いで頻繁に怪我するのはどうなんだと常々思っていたので、相手も自分も怪我をしないような技術を目指していきたいと思います。

広告を非表示にする