Island Life

< Endianness | らむ太とメタ認知 >

2011/01/21

名前づけ

http://twitter.com/gengar68/statuses/28615043041992704

@gengar68 shiftもresetもマクロなのが気持ち悪い.いや,マクロもあったらいいけど,Scheme的には関数で書けるならプリミティブは関数であるべきなんじゃないの?call/ccのように.

そーなんだよねー。だからKahuaではshift相当物としてcall/pcというのを入れたりもしたんだけど、 shift, resetはプリミティブとして定着しちゃったっぽいので、refj:gauche.partcontでは諦めた。

shift, resetという名前も一般的すぎるんだよな。call-with-current-continuationは多義的に取りようがないけど、shiftやresetっていろんな場面でいろんな意味に使われるわけだし。

で、こっから先は印象論なんだけど。こういう名前の付け方ってCSのサイエンス寄り、あるいは数学よりの人っぽい感じがする。後で、それが使われてるところだけ見ても分かるように記述的な名前をつけようってんじゃなく、「定義見ればわかるんだからこれでいいっしょ」的な。いやもちろんそのアイディアに至るまでの議論の歴史とかは踏まえてるんだろうけれど、そういう論文を順繰りに追ってないと、なんでそういう名前になってるのかわからない。Haskellの本読んでても、新しい概念に対してわりと無造作に短い名前や記号を割り当ててる感じがして、貴重な名前をそんなに大胆に使っちゃっていいのかしら、と心配になったりする。3文字までの記号のみの組み合わせなんて限られた資源なのに。

(名前空間があるからいいじゃん、というのはまた別で、コンパイラは名前空間できっちり意味を分けられるけど、読んでる人間にとっては「どっからimportしてきた名前か」とか「このモジュール省略名の本名これだ」とかいうのは隠された文脈になるわけで。)

Common Lispな人はその逆で、エディタが補完してくれるからいいじゃん、とばかりに、やたらと長い名前をつけたがるような気が。Javaの名前もうんざりするほど長いね。「インダストリ」寄りの感覚なのかな。

Tags: Programming, Lisp, Scheme, Haskell

Past comment(s)

ささだ (2011/01/22 13:42:28):

数学寄り,という印象があります. ドラゴンブックと言語理論の話の違い,みたいな.

オブジェクト指向だと,その辺が緩和されている印象があります.send メソッドが顕著だと思うのですが(動的なメソッド呼び出し,もしくは socket などでの送信),それなりにわかりやすいような,やっぱりわかりづらい時もあるような(前者には,そのために __send__ という別名があります).

shiro (2011/01/23 08:25:15):

クラスが名前空間になる設計の場合、確かに動詞たるメソッド名はわりと大胆に短くできますが、クラス名そのものについてはやっぱり悩みません? でも動的言語や型推論ありの言語ではクラス名を書く場所ってあまり多くないから長くてもいいか。

Post a comment

Name: