Smalltalkにはif文がない

すみさん経由で見たhttp://www.programmers-paradise.com/tdiary/?date=20050223#p02

if文がない、というのはそんなに驚くほどのことではない、とも思ったりはしていたこともありました。学部生のころSchemeを習っていたときに、

(if cond (f) (g))

と書く代わりに

(if cond (lambda () (f)) (lambda () (g)))

みたいに書くことになっていたら、「ifはspecial-form」みたいな特別扱いをしなくても良くなるのに、と思ったことがあります。その後HOPLを読むと、某「パソコンの父」がPARCに行く前にそういうような言語をデザインした、というような話(だったとおもう)を読んで、まあそうだろうな、と思ったことがあった気がします。

もちろんいちいちifのたびにlambdaとかいう長いキーワードを書きたくはないわけですが、Smalltalkでは四角い括弧を使うことによってその問題を回避しているわけですね。

言語において構文と意味論は手に手をとって一つの世界を形作るので、要素還元主義的に考えてもあんまり良いことはないという例ではないかな、と思ったりはしています。

速度に関しては、ifのinline化をやめても、きっと全体としてはそれほどの速度低下はないのだろうと思います(というか、いろんな意味で事実に反するときに「当然」とはあまり書いてほしくないなあ)。whileTrue:やto:do:のインライン化をやめたらきっと(いろんな段階で)死ぬと思いますが(笑)。