20号。ぱちぱちぱち。
しかし、私は今月めちゃめちゃ忙しくて、 連載(他言語探訪)はお休みしてます。
ごめんなさい。
商用Smalltalk処理系としてはそれなりに有名だったDolphinの開発が 中止される、という話。最大の理由は「商売にならないから」。
また、「オープンソース化してほしい」というリクエストには 「オープンソース運動は好きじゃない。 Dolphinの商業的価値を投げ棄てるくらいなら、 時の砂の中に埋もれて消えていく方がマシ」という返答が。
いずれにしても、Smalltalkは世間に受け入れられない証拠がまた一つ、 という感じか。残念だ。
しかし、Dolphinが市場からいなくなっても Smalltalkが死んでしまったわけじゃない。
たとえば、Syxは Smalltalk-80の新しい実装。頑張っているようにみえる。 ソースはまだ読んでないけど。
Smalltalk言語そのものではなく、その影響ということなら、 それは現代でも決して小さいものではない。 たとえばRubyもそうだ。RubyにはSmalltalkの影響が随所に見られる。
で、ここで紹介するSScriptはJavaScriptに対するSmalltalkの影響(文字列ベースだけど)。
実際にSScriptを使ったソースコードを見れば、ひとめでその面白さが分かるのではないだろうか。
[1, 2, 3]._collect(':x | ^x+1'); -> [2, 3, 4] [1, 2, 3, 4]._select(':x | ^x > 2'); -> [3, 4] [1, 2, 3]._collect(':x | ^x*2'); -> [2, 4, 6] [1, 2, 3]._reject(':x | ^x > 1'); -> [1] [1, 2, 3, 4]._inject_into(1, ':x :y | ^x*y'); -> 24 [1, 2, 3, 4]._inject_into(0, ':x :y | ^x+y'); -> 10 [1, 10, 7, 8]._sort(':x :y | ^x < y'); -> [1, 7, 8, 10] [1, 2, 3]._sort(':x :y | ^x > y'); -> [3, 2, 1] var a= { x: 1, y: 'howdy' }; var b= { x: 4, y: 'howdy' }; var c= { x: 2, y: 'howdy' }; [a, b, c]._sort(':w :z | ^w.x < z.x'); -> [a, c, b] var counter= 0; '^counter < 5'.whileTrue('counter._print(); counter++;'); (5)._to_do(10, ':counter | counter._print();') (0 > 1)._ifTrue(' "howdy partners!"._print(); '); return (this <= 2)._ifTrue_ifFalse('^1', '^('+this+' -1).fibo(); + ('+this+' - 2).fibo();');
えーと、なんてクレージーなんでしょう(ほめてる)。 APIリファレンスも参照のこと。
Nuは「Rubyでない言語」。 どういうことかっていうと、Objective-CとRubyは思想的にはかなり近い線だが、 実装はまるで違う。文字列も配列もなにもかも。 で、Objective-Cのデータ構造を使ったRubyのような(しかも、Cのように効率が良く、 Lispの強力さも併せ持つ)言語なのだそうだ。
ただ、まだこれ以上の情報はないので、続報を楽しみに待ちたい。
追記: 続報
実態がよくわからない言語、その2。
Otterは「いつまでも公開されないArcはきっとこういう言語なんじゃないかな」というような言語。 だが、現時点ではホームページには なんの情報もない。
このLisp NYCに出席した人からの情報がほしいな。
追記: 過去ログが公開されているらしい。
ActiveRecordの欠点はテキストベースのカラムタイプの扱いと、 属性ハッシュにデータベースからのテキストとシリアライズされたオブジェクトが混じること、だとか。
私には判断できないが、欠点の指摘や改善の提案は非常に健全だと思う。
個人的にはRailsの最大の欠点は、 「自己中心性」にあると思う。 つまり、Railsはかなりすごい勢いでRubyそのものを変化させてしまうので、 他のライブラリなりフレームワークなりが似たようなことをしようとすると すぐに衝突してしまう。まあ、同じようなことをみんながやると大抵悲惨なことになるので、 基礎クラスを書き換えるような「黒魔術」はActiveSupportに任せておけ、 というのも理解できる態度ではあるが。
ま、このRailsの欠点はそのままRubyの弱点のせいでもあるわけで、 Ruby 2.0では、この辺になんとか対処したい。
Erlangのメッセージリングの例題をRubyで実装したもの、だと思うのだが、 ソースコードを読んでもいまいちなにをやっているのかわからない。
誰か解説してくれると嬉しいなあ。