Smalltalk で「セレクタ−」というのは、0個以上の引数と組み合わせて「メッセージ」を構成する要素で、端的には通常の言語におけるメソッド名のようなものです。たとえば、arr at: 1 put: #something という Smalltalk の式があったとき、arr がレシーバー、at: 1 put: #something がメッセージ、1 と #something が引数で at:put: がセレクターです(セレクターの実体はシンボルなので #at:put: と書くこともあります)。at: 1 put: #something というメッセージを arr に送ることで、通常であれば #at:put: という名前の(Smalltalk ではコロンもメソッド名に含まれます)メソッドがコールされます。よくある文法で書くと arr.at:put:(1, #something) と同じことで、そんなに難しいことはありません。
@koropicot とある Smalltalker は、プログラム中の上位50のメッセージ、変数、定数、語彙をしゃべれないようでは Smalltalker とは言えない、と言ってますね。その上位50が操れて中級、とも
— でこれきさん (@dico_leque) 2013年5月15日
ということで、このツイートでは「メッセージ」と表現されている「セレクター」、すなわちメソッド名のうち、Squeak Smalltalk のシステム(処理系)内でよく使われている上位50位をカウントして抽出してみました。
| selectors counts | selectors := Set new. SystemNavigation default allBehaviorsDo: [:class | selectors addAll: class selectors]. counts := OrderedCollection new. selectors do: [:sel | counts add: (SystemNavigation default allCallsOn: sel) size -> sel]. ^(counts sort: #>) first: 50
短いコードですが、それなりに時間のかかる処理なので実際にお試しの際には注意してください。また、この手のリフレクション操作は処理系依存的なコードになるのが常なので、他の Smalltalk 処理系で同じことを試すには、似たような方針でその処理系が提供している API やユーティリティクラスを使ったコードに書き直す必要がある点にもご留意ください。
結果を以下に示します。
6999->#== 5509->#= 4774->#new 4270->#+ 3058->#size 3014->#- 2536->#at: 2357->#do: 2298->#, 2051->#assert: 2019->#@ 1762->#<= 1743->#class 1723->#> 1504->#first 1458->#at:put: 1354->#* 1232->#< 1148->#name 1074->#add: 1059->#nextPutAll: 1003->#new: 969->#isEmpty 941->#translated 938->#default 937->#error: 933->#asString 927->#includes: 907->#nextPut: 882->#not 861->#on: 840->#collect: 799->#ifTrue: 792->#extent: 782->#value: 737->#cr 735->#// 732->#printString 711->#notNil 682->#isNil 668->#contents 663->#value 651->#last 640->#/ 630->#at:ifAbsent: 615->#extent 594->#color: 581->#isKindOf: 567->#>= 562->#current
調べるまでもなく、なじみのメソッド名ばかりですね。^^;
なお、前述コードは記述を簡単にするためにソース中でメソッドがコールされる回数そのものではなく、そのメソッドをコールしているメソッドの数をカウントしているので、メソッド内で複数回使われることの多いセレクターの順位は前後するかもしれません。またカウントに使ったイメージは 4.3-ja にさらに手を入れた普段使っているイメージなので公式イメージや、他のバージョンでは結果が異なることがあります。あしからず。