アラン・ケイも認めた!Ruby>>>>>Smalltalk

このエントリーをはてなブックマークに追加
169デフォルトの名無しさん
>>165
やっつけですが、Squeak Smalltalk で。

Object >> inc
  | sender index |
  sender := thisContext sender.
  index := (sender method at: sender pc - 2) \\ 16 + 1.
  ^sender tempAt: index put: (sender tempAt: index) + 1

| a b before after |
a:= 1. b := 2.
before := {a. b}.
a inc. b inc.
after := {a. b}.
^{before. after} "=> #(#(1 2) #(2 3)) "
170デフォルトの名無しさん:2008/02/08(金) 14:09:59
>>169
参考になりました。
ああ、やっぱり、破壊的に代入ができないために
senderからたどる必要あるんですね。
171デフォルトの名無しさん:2008/02/08(金) 14:47:43
>>170
そうですね。ちゃんとやるんなら、168 の言うとおりコンパイラに手を加えてインライン展開するのが
ベターだと思います。これは処理系も Smalltalk で組まれている Smalltalk ならではの解決方法かと。