OOPL

忙しい人のための“What Killed Smalltalk Could Kill Ruby, Too”

http://railsconf.blip.tv/file/2089545/ Ruby の未来は TDD が救うというお話。ただ、悲しいかなボブおじさんが持っている Smalltalk の特に最近の知識は、最新の Smalltalk といえば Squeak(←VisualWorksだろjk)、Squeak で書かれたソフトは Etoys く…

Euler 4: Finding Palindroms を Squeak Smalltalk で

ひさしぶりにPythonシェイプアップ - 西尾泰和のはてなダイアリー 経由で http://blog.bestinclass.dk/index.php/2009/10/python-vs-clojure-evolving/ の Clojure のコード (reduce max (filter #(let [s (str %)] (= (seq s) (reverse s))) (for [x (range…

“居眠り床屋”を Io language で

id:sumim:20090923:p1 の続き。逆に、アクターだから長くなっているってこともないんじゃないのかな…とも思ったので アクターが組み込みの言語である Io で書いてみました。予想通り、比較的短く書けたのではないかと思います。ただ、非同期メッセージングに…

“1から10までの自然数の合計”を Squeak Smalltalk で

ときどきの雑記帖 i戦士篇 2009年10月(上旬) 経由で 「転職活動する暇があったらブログを書け」について:ベンチャー社長で技術者で:エンジニアライフ にある件の問題をを半ば空気を読まずに(*1)書くと。 (1 to: 10) sum Smalltalk スキーとしては「1から10…

“居眠り床屋”を Squeak Smalltalk で

http://twitter.com/yukihiro_matz/statuses/4079331380 経由で http://blog.bestinclass.dk/index.php/2009/09/scala-vs-clojure-round-2-concurrency/ より。 The problemAn old concurrency problem/exercise is ‘The sleeping barber’ and you can eithe…

いや。それはない。(キッパリ)w

ケントベック「SmallTalkが世の中に広まればいいとおもっていたら、広まった時の名前はRubyだった」 幸せなエンジニアになるための仕事術/まつもとゆきひろ&平鍋健児 - @tmtms のメモ ケント・ベックともあろう人が「SmallTalkが世の中に広まればいい」など…

Ruby にも Method や Proc に自らのソースを吐かせる機能が組み込まれるらしい

1.9.3 への導入を目指す予定とか。こうした機能は、Ruby で Smalltalk ばりのクラスブラウザのようなツールを作るのにも役立ちそうですね。 例: proc = ->(x, y) { x + y } proc.to_source #=> "x + y" [ruby-dev:39301] [Feature #2080] Proc#to_source, Me…

MWさんの実行速度比較を、Smalltalkを追加して手元のMacとWinで試す

このページは削除されました Python2.5.1、 Ruby1.8.6、Ruby1.9.1 に Smalltalk 勢として愚直な Squeak3.9 と、精鋭の VisualWorks7.6NC とを加えて速度比較を行なってみました。Java にはあえて抜けてもらったり、元ページで活躍の Python3.1 がまだインス…

“最悪のHello World”を Squeak Smalltalk で

JAPH (Just Another Perl Hacker)みたいなもん? - ときどきの雑記帖 i戦士篇 経由での http://blog.cnu.jp/2009/07/08/hello-world-2/ に Squeak Smalltalk ならではの駄目さ加減でトライ。 World findATranscript: nil; withAllOwnersDo: [:owner | Transcr…

Re: Smalltalk勉強会ってどこでやってるんだろう?

遅レスですが… Smalltalk勉強会ってどこでやってるんだろう? 後で調べてみるか。 なんとなく北海道あたりのような気がしてならないのだけどw ときどきの雑記帖 i戦士篇 - ネタ拾い from ム板 残念ながら札幌ではまだです。今のところ、東京と京都で月1ペー…

join が熱いので Squeak Smalltalk でも

話題の join を模した #join: は GNU Smalltalk にはあるみたいなのですが、 $ gst -v GNU Smalltalk version 3.0.1 $ gst GNU Smalltalk ready st> #('this' 'is' 'a' 'pen') join: ' ' 'this is a pen' 残念ながら Squeak Smalltalk には無いので、同じこ…

Ruby がクラスにメソッドを詰め込みすぎだって? ふっ…

ソフトウェア工学の講義中、先生が「Rubyはクラスにメソッドを詰め込みすぎ」という主旨のことを言ったけれど、オブジェクトが何であるかよりもオブジェクトがどのように振る舞うかを重視するとき、Rubyのやりかたは正しいんじゃないかなーと思った。 ともく…

次のAPLの式が何を計算しているかわかったあなたは…を Squeak Smalltalk で

次のAPLの式が何を計算しているかわかったあなたは... もう、APLにはまっている! http://homepage3.nifty.com/ysaigusa/jp/apl/guide/index.html いや。はまってはいないのですが、だいたいは分かるので Squeak Smalltalk に意訳して動きを見てみるテスト。…

Squeak Smalltalk における“真偽のほど”

404 Blog Not Found:js/perl/python/ruby/scheme - 真偽のほどはいかに Smalltalk では真は true 、偽は false だけです。よく知られているように Smalltalk では条件分岐などの処理は単なるメソッドコールで、それらのメソッド(#ifTrue:ifFalse: など)は…

Ruby で bool?

TrueClass | FalseClass の親クラスBoolClass(仮)が欲しい! on Ruby - ASIPのRubyistなるままに bool - odz buffer jijixi's diary - bool ロバート・マーチンには「Ruby が死ぬ!」とか言われそうですが、Smalltalk 使いとしては、id:asipruby さんの提案通…

この世で最も役に立たない関数を Squeak Smalltalk で

404 Blog Not Found:js/scheme/perl/ruby/C - この世で最も役に立たない関数 ▼ブロック版 Squeak Smalltalk | pointless | pointless := [ | sender | sender := thisContext sender. sender tempAt: (sender tempNames indexOf: #pointless) put: nil. 'tur…

Smalltalk-76 で Array|sum を定義する

http://home.netsurf.de/helge.horch/esug/ な実装の Smalltalk-76 でメッセージングの考え方をレクチャーするとは斬新な! すばらしすぐる。 http://search.twitter.com/search/thread/1797837022 Array#sumとか作れたら(1,2,3) sum.は6になって('1', '2', …

ハリー・ポッター本の割引き額を求める問題を Squeak Smalltalk で

そろそろ http://railsconf.blip.tv/file/2089545/ について何か言っておこうか…と思い、その下調べにと Robert C. Martin のブログをぼんやりと眺めていたところ Ruby がらみの ArticleS.UncleBob.MakingMessesInRuby というエントリーを見つけたまではよか…

素数を洗い出すベンチで Python、Ruby、Smalltalk を戦わせてみる

Ruby1.8が遅いことと、psycoが速いことは認めるが、1.9の測定値が明らかに遅すぎる Twitter / Yukihiro Matsumoto 経由で。 Python+Psycoが速い - DoMshi Modbook はあいにく入院中なので OQO model 02 (VIA C7M 1.6GHz) を使用。 言語 処理系 時間(上限 100…

Squeak Smalltalk 向け、マルチコア対応 VM(Hydra VM)を試す

AO bench のスコアでは Cincom Smalltalk に遠く及ばない Squeak Smalltalk ですが、この差を少しでも縮めるのに役立ちそうなので、つい先頃、最新版がリリースされた Hydra VM がどんなかんじで動くのか調べてみました。 Hydra VM についてはこちらを。 Qwa…

AO bench を Smalltalk で

[ruby-dev:38080] [Feature:trunk] nested loop construct 経由で、AO bench が流行っている(いた?)のを知ったので Smalltalk でも試してみました。使用した処理系は Cincom Smalltalk (VisualWorks 7.6 非商用版) 、マシンは Modbook (MacBook改。2.4GHz…

28人中にB型が3名以下になる確率

Rに苦戦中にて候 - ときどきの雑記帖 i戦士篇 を読んで R の練習にちょうど良さそうだな…とチャレンジしてみようと思ったのですが、その前にとりあえず Squeak Smalltalk を使ってオーソドックスに。 | 血液型群 B型が三名以下 試行回数 bag | 血液型群 := …

APL で書かれたライフゲームをネタに R に再挑戦

id:sumim:20090218:p1 に対して ライフゲーム - MEMO:はてな支店 でいろいろとアイデアをいただいたので、それを手がかりに別途仕入れた知識を活用して書いてみました。 life3 = function(m){ rot = function(n,d) (1:n + d-1)%%n + 1 shift2 = function(dx,…

APL で書かれたライフゲームをネタに R に初挑戦

id:sumim:20090216:p2 の続き。 最近データ処理や統計処理に適した言語としてにわかに注目を集めている「R」など、APLのように配列やベクトルの処理を得意とする言語もある。 未来の言語は「APL」? Rubyのまつもと氏が講演 − @IT mrkn: APL って意外と無名…

Ruby1.9 の Proc 内 return の挙動に関するクイズ

次のような #f が定義されたとき、 def f yield proc{ |v| return v } end これをコールする次のコードはどんな出力をするでしょうか? p f{ |b| 10.times{ |i| p i; b[i] if i == 5 } } もちろん Ruby には無用なテクニックなんですけれどもね。^^; 2ch で…

APL で書かれたライフゲームを Squeak Smalltalk に翻訳 (ついでに Ruby版も)

未来の言語は「APL」? Rubyのまつもと氏が講演 − @IT で登場した APL で書かれたライフゲームが何をやっているのかさっぱりだったのが悔しかったので、とりあえずちょっと勉強してだいたいの内容が分かるくらいには読めるようにしてから Squeak Smalltalk …

インスタンスが属するクラスをあとから変更する操作を Perl で

インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です どうにも苦手な Perl の勉強をかねて。Perl のオブジェクトは「blessed reference」で、かつ、bless しなおせば新しいクラス(パッケージ)に属させること…

インスタンスが属するクラスをあとから変更する操作を Io で

インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です 動的なプロトタイプベース言語の特徴として、Io は他の言語の class スロットにあたる protos スロット(移譲先を収めた特殊なスロット)の内容を自由に変…

インスタンスが属するクラスをあとから変更する操作をいろいろな言語で

id:sumim:20090121:p2 の続き。はたしてどんな言語にこの種の機能が備わっているのか興味を持ったので調べて書いてみることにしました。ただ、会社員と学生の例のままではワンニャン同様、そういうことが出来て何が嬉しいのかイメージしにくいと思うので、Co…

インスタンスが属するクラスをあとから変更する操作を Squeak Smalltalk で

インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です Object subclass: #Cartesian instanceVariableNames: 'x y' Cartesian >> x ^x Cartesian >> y ^y Cartesian >> setX: newX y: newY x := newX. y := newY…