2007-05-01から1ヶ月間の記事一覧

“lethevert is a programmer - 言語を選ぶ基準”を Smalltalk で

lethevert is a programmer - 言語を選ぶ基準 一般的な Smalltalk の場合、 | f | f := [:x | | g h | g := [:y | x + y]. h := [:x | g value: 10]. h]. (f value: 10) value: 1 "=> 20 " 残念ながら、Squeak Smalltalk ではこれでは駄目で、h のブロック変…

reduce(l|r) を Squeak Smalltalk で

404 Blog Not Found:Code Snippets - reduce(l|r)を実装汁! 定義。 SequenceableCollection >> reducel: binaryBlock ^self allButFirst inject: self first into: binaryBlock SequenceableCollection >> reducer: binaryBlock | nextValue | nextValue := …

Ruby「ファイバ」vs. Io「アクター」 スピード対決

平たく言うとコルーチン対決。ついでに Squeak Smalltalk もスレッドで参戦。環境は 1GHz PowerPC, OS X 。 まず、一個あたりの生成にかかる時間を計測。 Ruby (1..10).each do |n| GC.start num_fs = (n * 1e3).to_i t0 = Time.new root = Fiber.current fs…

Python でいろいろな階乗

4chan BBS - Evolution of a Python programmer 個人的に好きだったのは、 reduce(int.__mul__, xrange(1,11)) Squeak Smalltalk で無理矢理書くと、メソッドオブジェクト(の属するクラス、CompiledMethod)に #value:value: を CompiledMethod >> value: a…

Squeak Smalltalk で 20 minutes ago

Ruby-Like Syntax in C# 3.0 Squeak3.9 には #minutes はあるけれども #ago がないので、改めて Duration に定義。 Duration >> ago ^DateAndTime now - self これで、 20 minutes ago

Squeak Smalltalk で、Python と Haskell のに触発された FizzBuzz

ときどきの雑記帖 リターンズ - HaskellでFizz(ry 経由で、Python の repeat を使った odz buffer - FizzBuzz、Haskell の cycle を使った版とまあ似ていなくもないかな…と思った Squeak Smalltalk の #atWrap: を使った版。 (1 to: 100) collect: [:n | | f…

Ruby の Thread.pass によるスレッドの明示的切り替えは異常に重い?

404 Blog Not Found:ruby & perl - 軽量プロセスをthreadで代用 にあるスクリプトで遊びながら、ふと、明示的にスレッドを切り替えた(つまり、答えを早く出せる順に並ぶ)場合も見てみたくなって次のようにしたところ、id:sumim:20070513:p1 で軽く触れた、…

Erlang の ring benchmark を Squeak Smalltalk で

haskell - haskellのある暮らし - リングノードベンチマーク: Erlang vs Haskell 経由で知った、Programming Erlang の Chapter 7 [β版 PDF] にある課題に Squeak Smalltalk にて挑戦。 そのまえに、Squeak Smalltalk でどのていど太刀打ちできるものなのか…

トレイトで遊ぶための最低限のブラウザ拡張

Squeak3.9 で Traits(トレイト)を扱うにあたっては、公式には OmniBrowser を使え…ということになるのでしょうが、ちょっと試した感じ、残念ながら OmniBrowser は私の手にはなじまないようです。そこで、使い慣れたクラシカルなシステムブラウザでも、ト…

トレイトで、再定義時に遮蔽されてしまうメソッドを super へのメッセージングで呼び出せるようにする方法

Ruby のモジュールや Strongtalk のミックスインは、継承パスに挿入された抽象的なクラスのように振る舞うため、下位のクラスやモジュール(ミックスイン)でオーバーライドしたメソッドでも、 super(Strongtalk では super へのメッセージング)でコールで…