Island Life

< Why Ruby is an acceptable... | Paul GrahamのY Combinator... >

2005/12/06

Binary 2.0、 ネタをここまで昇華するノリが素晴らしい。 行きたかったなあ。

感想を見ていると、軽量言語とは対極にある世界だ、というような言及が ちらほらあった。確かに高レベル言語の重要な機能の一つはプログラマが低レベルな 世界を気にしないで済むようにすることだけれど、二つの世界は表と裏、葉っぱと根っ子、 あるいは舞台と舞台裏。客として眺めるだけなら表を見ていればいいけれど、 この世界でプログラミングを生業とするなら両者は切っても切れない関係にあるはず。 何故なら、裏を知らないとトラブルに対応できないから。

だいたい、抽象度の高い、ハイレベルなものごとというのは泥くさい現実の ある面を特定の切り口で簡略化することで成り立っている。 (そもそも、デジタル回路からしてアナログな世界を閾値でえいやと 2分することで動いてるわけだし。) その際に、簡略化が成り立つ前提ってのが必ずある。システムが 正常動作してる間はそういう前提を余裕でクリアしているんだけれど、 システムがリミットぎりぎりまで使い込まれて、 マージンが無くなった時が問題だ。 トラブルとは、抽象化の壁のほつれである。 抽象化されたハイレベルな世界でいくら強固なロジックを組み立てても、 根元がぐらついたらそのロジックはぺしゃんこだ。 それを建て直すには、少なくともほつれた抽象化の壁の一つ向こうの 世界を知ってないとどうにもならない。

もう一つ、軽量言語と低レベルな世界をスペクトルの両端に置くのに 違和感があるのは、Lispでは両者はそんなに離れていないからかも。 inner loopを最適化する時は普通にdisassembleするし (そもそもdisassembleが言語仕様に含まれている)。

Tags: Programming, Conference