2009-10-14
■ [ruby] (Ruby 1.9の)Hashが順序を保持するのは自然か
という話がありましたが:
Rubyは、ArrayがStackやQueueを含んでいるように、大クラス主義の言語です。 Hashが順序を保持するようになったというよりは、 「HashがOrderedHashを含むようになった」と考えると自然かなぁと思います。
■ [smalltalk] GNU Smalltalkなら、コマンドラインでSmalltalkを試せる
そんなものがあったのか!ということで、MacPortsで入れてみる。 *1
$ port install gst
gstコマンドで起動。
/Users/yhara/proj/smalltalk % gst GNU Smalltalk ready st> 1 + 2 3 st>
おお、動いてるっぽい。
st> nil nil
nilがnilなのでニヤリとしてしまう(笑)。
Smalltalkというと環境とセットになってるイメージが強いけど、こうやって言語の方だけ手軽に試せるのはありがたい。
目下気になってるのは、「SmalltalkはRubyとどのくらい違うのか?」という点。 「マクロ」をLispの本質だとすると、LispとRubyはそれなりに離れてるけど、もし「全てがオブジェクト」がSmalltalkの本質ならば、Lispよりも実は近いのかな? などと想像している。
まあとりあえずはチュートリアルですかね。
リンク:
それにしても、構文定義の短さには驚いた。 さすが、ifすらメソッドである言語。
*1 デフォルトだとGTKとかも入るので、時間がかかるのが嫌な人は適宜variantを指定しましょう。
お邪魔します。Ruby と Smalltalk の近さは、特に#collect式のようなブロック付きメソッド呼び出し式などで際だつように思います。<br><br>#ruby<br>(1..10).collect{ |n| n*2 }<br>(1..10).map{ |n| n*2 }<br><br>"Smalltalk"<br>(1 to: 10) collect: [:n | n*2 ]<br><br>;;Lisp<br>(mapcar #'(lambda (n) (* n 2)) (loop repeat 10 for i from 1 collect i))