9
Smalltalkお題解説 2014 SoftUmeYa, LLC Masashi Umezawa CROSS 2014 言語CROSS

Smalltalkお題「実行中の全オブジェクトを得るには?」

Embed Size (px)

DESCRIPTION

CROSS 2014 「言語CROSS」 Smalltalkからのお題です

Citation preview

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