見出し画像

時間が足りないという感覚に追われて

10月14日日曜日、曇りのち晴れ

先月から KALDI で売っているブラックハロウィンブレンドがお気に入り。

コクをうたって強めにローストされた苦味は、あまり得意でないとおもっていた。けれどこの「ブラック」ハロウィンブレンドに関しては強めローストの味がおいしいと感じる。
それどころか好きだとおもっていた酸味のある味が、ちょっと刺激が強いかも? と感じるくらいに変わってしまった。

ひょっとしたら季節性のものかもしれないし、好みなんて流行り廃れがある。一月もしたら、「やっぱり酸味だよね〜」などと言っているかもしれない。

* * *

1週間しか練習していなかったのに、そしていくつか指摘もあったけれど、これでいいでしょうとオーケーをもらってしまった。バッハの『ミュゼット』。アンダンテ・パストラーレ、中ぐらいの速さで牧歌的に。

次回に向けてウェーバーの『狩人の合唱』をさらうよう言われたんだけれど、これだと『ユダス・マカベウス』もどれもこれも中途半端になってしまいそうで怖い。

1週間くらい、起きている時間すべてをつぎこんで練習ばかりしていたい。

大学生の頃、夏休みにサークルで行っていた合宿みたいなもの。実際のところ、ありあまる時間のなか練習だけしていたというのでもないのだけれど、ああいう贅沢な使いかたがしたい。

いまは
あれもしないと、
これもしないと、
時間が足りない。そんな感覚に追い立てられていていけない。

* * *

絵も描きたい。

* * *

自作の LISP インタープリターで「順列」の生成プログラムを正しく評価できない原因を探るために書いていた、環境と中途の評価結果をプリントする仕組みを機能として組み込んだ。

この LISP インタープリターは純粋に C だけで書いているのだけれど、ところどころに関数型言語から拝借した概念だとか、オブジェクト指向っぽい香りを残している。

今回実装した評価経過をプリントする機能は、オブジェクト指向っぽいところ。

環境に *verbose-eval* というシンボルが非 nil の値として定義されているときに経過をプリントするように実装している。
手続き型言語で素直にこれを実装すると、以下のような(擬似)コードを書くことになる。そしてプリントが必要なすべての箇所に、この条件分岐をばらまくことになる。

if (symbol *verbose-eval* is defined in the environment
    && its value is not nil) {
  printf(...);
}

今回は FILE ストリームの力を借りて、条件分岐をストリームに隠蔽した。つまり冒頭でストリームをつくって……

FILE* fp;
if (symbol *verbose-eval* is defined in the environment
    && its value is not nil) {
  fp = copy_of(stdout);
} else {
  fp = fopen("/dev/null", "w");
}

以降、評価経過のプリントに関わるすべての箇所で、無条件にストリームに書き出している。

fprintf(fp, ...);

この実装に関するコミットはこれ。

すべての箇所にプリントの要否チェックを入れる実装と、プリントの要否をオブジェクトに隠蔽して常にプリントする実装と。

いずれが優れているとおもうかは好みの問題になるとおもう。

そして僕のプログラマー人生で、このような実装の選択は見かけたことがない。
つまり多くのプログラマーはこれを見て、「ふーん、たしかに動いているみたいだけれど見たことがない。大丈夫なの? なんか面倒なことが起きない?」という感想を抱くだろう。(つまり嫌われるとおもう)

けれど僕はこういう工夫が好きだ。

他人があまり使わないだろう表現を使っているという一点でゾクゾクする。

この記事が気に入ったらサポートをしてみませんか?