Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2005-12-05)
[go: Go Back, main page]

«前の日記(2005-12-04) 最新 次の日記(2005-12-06)» 編集

Matzにっき

迷惑メール対策なら Dr.WEB
『Dr.WEB メールデーモン』、MTA 用迷惑メール対策製品です!


2005-12-05 [長年日記]

_ 低レベル

[ruby-dev:27399]で、 『ハッカーのたのしみ』が紹介されていたので、 いつか読もうと思っていたが、松江では入手できない。 一度だけ見かけたときに捕獲しておくべきだったな。

先週東京に行ったときにも見つからなかった。 が、東京オフィスに実物があったので眺めてみた。

なかなか良い本のようなので購入を決意して、Amazonで購入した。

しかし、実物を見たときからわかっていたことだがこの本はなかなか「低レベル」で、 読むのがつらい。「低レベル」といっても、デキが悪いわけでも、 初心者むけというわけでもなくて、要するに「マシンに近い」ということ。

どうも普段やってることが言語処理系なんてマシンから遠いところにいるせいか、 このような「低レベル系」が苦手だ。

実は先日来『Write Great Code』という本の監訳しているのだが、 これも低レベルで大変だった。良い本なのは確かなのだが、 私がお手伝いできたのは文字コードに関する部分がほんのわずかだけだった。 監訳料はお断りしないといけないかしら?

_ [Ruby] Why Ruby is an acceptable LISP

RubyがLispの良い点を継承しているので、 「受け入れられる」Lispになるかもしれないという話。 来月発行の「ハッカーズライフ」を先取りされたようなネタ。

具体的には

  • 簡潔な関数型言語である点
  • 実用的なマクロがある

点を取りあげている。前者についてはブロックによる簡潔な高階関数が紹介されている

Lisp:
;; Call 'fn' once for each natural number.
(defun each-natural-number (fn)
  (loop for n from 1 do (funcall fn n)))

  ;; Print 1, 2, 3...
  (each-natural-number
    (lambda (n) (format t "~D~%" n)))

Ruby:
def each_natural_number(fn)
  n = 0
  loop { fn.call(n += 1) }
end

each_natural_number(lambda {|n| puts n })

または
def each_natural_number
  n = 0
  loop { yield n += 1 }
end

each_natural_number {|n| puts n }

実用的なマクロについては、ブロックやリフレクション(たとえばRailsが使っているような)DSL的表現によって提供できると述べている。

しかし、案の定Lispファンから反論が来ていて

Ruby is not Lisp. A Lisp is a Lisp because it’s code is represented as its basic data structure.

RubyはLispじゃない。Lispはコードが基本的データ構造で表現されているからこそLispなんだ

だそうだ。ごもっとも。

しかし、あらかじめ予想したようなエントリがあった。

Power vs Popularity」では、 「確かにLispの方が強力だ(マクロあるし)。では、なぜRubyがはやって、Lispはマイナーなままなのか? また、人気とパワーのトレードはどのくらいが適切か?」について、自答している(作者はLispファン)。

で、結論は要するに「Rails」ということらしい。つまり、Lispにはなんでもできるパワーはもっているが、結局自分でLisp on Railsを作らなくちゃいけない。そんなことしたくないから、Rails(とそれを使うためにRuby)を選んでいるわけだ。

「どこまでできるか」という可能性よりも、「今できる」という現実の方が人気に直結するということらしい。言語屋としてはちょっとさみしい結論だな。

本日のツッコミ(全5件) [ツッコミを入れる]
_ kyuppon (2005-12-08 12:52)

ではRails以前はどうなのでしょう?なんて誰でも<br>思いつくツッコミでした。<br>難しい理屈なしで素直に使えるから?<br>なんてサンプルしか動かしたこと無い私でした。

_ まつもと (2005-12-08 12:58)

多くの人にとってはRails以前のRubyは「存在しなかった」のと同じなんでしょう。<br>少なくともLispと同程度にはマイナーであったと。<br>私も同意します。

_ wan (2005-12-08 14:17)

Lisp on RailsがあればLispを使う人が増えるんでしょうか。<br>Lisp on RailsがないのはLispで作るのが難しいから?<br>単にそういうものを作ろうという発想がないから?(作る必要がないから?)<br>似たようなものはすでにあるかも知れませんがどうなんでしょうね。

_ まつもと (2005-12-08 14:23)

「Lisp on Railsがあれば」というのは面白い思考実験だと思います。<br><br>どうもLisp派はそう思っているみたいですね。LispがマイナーなままなのはRailsのような「大衆にアピールする」ものがないからだと。まあ、それも理由のひとつではあるでしょう。<br><br>でも、私自身はLispには大衆受けする障害になる別の本質的な「なにか」が言語そのものにあるような気がしています。そして、Lispの良さを残しつつ、その「なにか」を取り除くとRuby(のようなもの)になるのではないかと。

_ 通りすがり (2005-12-08 14:38)

私自身はLispファンなのですが、大衆受けしないのは言語全体が均質的すぎて最初の離陸が難しいから、という印象があります。<br><br>例えば代入が<br>x = 1<br>なのと<br>(define x 1) or (set! x 1)<br>では前者の方が「代入に見える」と思います。<br><br>条件なんかも一般的な「条件の枠組み+ブロック」に対する「全部S式」はS式脳ができるまではきついでしょう。<br><br>ただ一方Lispが強力なのはそもそもそういう均質さがあるおかげて、マクロが強力だったりS式脳で物を考えられたりするからなのですが。

お名前:
E-mail:
コメント:
[]

«前の日記(2005-12-04) 最新 次の日記(2005-12-06)» 編集

RSS feed meter for http://www.rubyist.net/~matz/ track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.