Transcript

Smalltalkお題解説

2014 SoftUmeYa, LLC

Masashi Umezawa

CROSS 2014

言語CROSS

Smalltalkのお題

現在実行中のプログラムの全オブジェクトを得るには?

解答

Smalltalkだと実にシンプル

ちなみに今現在いくつのオブジェクトがい

るのか見てみましょう

時間がかかるのでforkしておきます

Object allSubInstances

[Object allSubInstances size inspect] fork

実装の解説(1) 「小さな要素の組み合わせ」でできている

allInstancesから対話的にみていく

Behavior >> allSunInstances

Behavior >> allSubInstancesDo:

allInstancesDo: と allSubclassesDo: を使った再帰

になっている

allSubInstancesDo: aBlock self allInstancesDo: aBlock. self allSubclassesDo: [:sub | sub allInstancesDo: aBlock]

実装の解説 (2) Behavior>>allInstancesDo:

allInstancesDo: aBlock | inst next | inst := self someInstance. [inst == nil] whileFalse: [ next := inst nextInstance. aBlock value: inst. inst := next]

実装の解説 (3) Behavior>>allSubclassesDo:

Class >> subclassesDo:

allSubclassesDo: aBlock self subclassesDo: [:cl | aBlock value: cl. cl allSubclassesDo: aBlock]

subclassesDo: aBlock subclasses == nil ifFalse:[subclasses do: aBlock]

ちなみにいくつのオブジェクトが?

XXXXXX個でした

これらのオブジェクト達がメッセージを

送ってくれるのを待っている

ワクワクしてきます

膨大なオブジェクト空間に飛び込んで、

オブジェクト達を育くむ「育てゲー」

ちなみにセーブは一瞬

もっときついお題

もっときついお題

SmallTalk R4.1チャレンジ http://smalltalk.smalltalk-users.jp/oshirase/smalltalkr41challenge

• gotoを新たに実装せよ

• 継承やソースの変更、クラスの削除等が行えなく

なるbeFinalメソッドを実装せよ、など

変態的なパワーに興味がある人は

「SmallTalk R4.1のつくりかた」 • http://smalltalk.smalltalk-users.jp/oshirase/smalltalkr41notsu

kurikata

Smalltalk Superpowers 勉強会資料

• http://atnd.org/events/11043


Recommended