最近、「CommonLispはLisp-2で、SchemeはLisp-1である」という文章を読んだが、 恥ずかしながらLisp-1とかLisp-2ってなんのことだかわからない。 Lisp 1.5なら知ってるんだけど。
ので、調べてみた。
で、その結果、名前空間がひとつ(関数と変数に区別がない)のがLisp-1で、 区別があるのがLisp-2であるということだそうだ。なるほど。
だとすると、PythonやJavaScriptはLisp-1で、RubyはLisp-2だな。
スクリプト言語に欠けているもの、という話。
まあ、最後のものはともかく(Javaよりも開発者が少ないという意味らしい)、 残りについては自覚はしている。次第に改善されるんじゃないかな。
Ruby 2.0ではぜひAST(Abstract Syntax Tree)が欲しい、という話。
一度公開しちゃうと変更できなくなって面倒だから、 という非常に開発者の都合で公開していないんだが、 やっぱりAST機能欲しいんかねえ。
いっそ、RubyのソースコードからS式を吐くフロントエンドを作るというのはどうだろう。 で、S式からYARVバイトコードを作るとか、Gaucheに喰わせるとか。
その場合、Rubyってのは本当にLispの一種になっちゃうね。 なんとなく先祖帰りな雰囲気。
「毎秒、11,000アクセスというのはすごいけど、それDBアクセスいらなくね?」という話。
確かに毎秒11,000回DBにアクセスすると大変なことになりそうだけど、 Twitterの性質をよく考えてみると、そもそもDBに格納する必要のない情報ではないだろうかと。 ActiveRecordのおかげでDBアクセスが簡単になって、 DBを単なるストレージのように扱えるが、本当はSQLデータベースに向いてない使い方も されているんではないだろうか、という指摘。
あと、毎秒11,000アクセスってのは純粋にものすごい数で、 それってAPの設計の見直しでもうちょっと下げられるような気もする。
「なぜRailsはRubyでしか可能にならなかったのか」という話。 TurboGearとかDjangoの人とかは「Pythonでもできたぞ」とか言いそうだけど。
それはRubyismのおかげだそうで、で、「Rubyismとはなにか」ということは、 『Rubyisms in Rails (Digital Short Cut) - $9.99』を読むとわかるんだそうだ。
そうかぁ。 $9.99かぁ。
Rubyのメタプログラミング機能を使ってプロパティやプラガブルタイプを実現する、 という話。
ところで、例題に
property :speed {|v| v >= 0 && vn< 300 }
というコードがあるが、これはSyntax Errorになる。 これはRubyのパーザーが「:speed {|v| v >= 0 && vn< 300 }」をメソッド呼び出しと 解釈しようとするからだが、数値、文字列、配列、シンボルなど 識別子以外のものの後ろのブレースの優先度が高すぎるのが原因だ。
ということで、1.9の文法を少々いじって、文法エラーでなくすことにした。