Enviar pesquisa
Carregar
super super & sub sub の話
•
0 gostou
•
605 visualizações
M
Masashi Umezawa
Seguir
Smalltalkのメソッド探索の仕組みを自在にいじってみるという話
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 23
Baixar agora
Baixar para ler offline
Recomendados
勉強会1
勉強会1
taisho2
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
CODE BLUE
UnityFukuoka11 自作アセットを出すまで...
UnityFukuoka11 自作アセットを出すまで...
Tomioka Yusei
第6回はじめてのAws jaws ug-iwata
第6回はじめてのAws jaws ug-iwata
iwata jaws-ug
My sql viewに救われる(かもしれない)
My sql viewに救われる(かもしれない)
basicinc_dev
第4回はじめてのAws jaws ug-iwata
第4回はじめてのAws jaws ug-iwata
iwata jaws-ug
Perlでちょいモテデザインパターン
Perlでちょいモテデザインパターン
Yuki Manno
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
SECCON Beginners
Recomendados
勉強会1
勉強会1
taisho2
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
XSSフィルターを利用したXSS攻撃 by Masato Kinugawa
CODE BLUE
UnityFukuoka11 自作アセットを出すまで...
UnityFukuoka11 自作アセットを出すまで...
Tomioka Yusei
第6回はじめてのAws jaws ug-iwata
第6回はじめてのAws jaws ug-iwata
iwata jaws-ug
My sql viewに救われる(かもしれない)
My sql viewに救われる(かもしれない)
basicinc_dev
第4回はじめてのAws jaws ug-iwata
第4回はじめてのAws jaws ug-iwata
iwata jaws-ug
Perlでちょいモテデザインパターン
Perlでちょいモテデザインパターン
Yuki Manno
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
SECCON Beginners
0730 bp study#35発表資料
0730 bp study#35発表資料
Yasuhiro Horiuchi
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
saiken3110
資料
資料
Bob_Mk2
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
Takashi Uemura
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
都元ダイスケ Miyamoto
CSP Lv.2の話
CSP Lv.2の話
Yu Yagihashi
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
Kouhei Sutou
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
Masato Kinugawa
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Masataka Tsukamoto
現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方
時雨 大西
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Mayumi Emori
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
Ryoji Kurosawa
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
Takahiro Okumura
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility
Satoshi Hirata
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
第二章
第二章
jxhtq
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
Masashi Umezawa
Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計
Masashi Umezawa
Sistemas integrados de manufactura
Sistemas integrados de manufactura
ROSS_ANGEL
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Mais conteúdo relacionado
Mais procurados
0730 bp study#35発表資料
0730 bp study#35発表資料
Yasuhiro Horiuchi
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
saiken3110
資料
資料
Bob_Mk2
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
Takashi Uemura
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
都元ダイスケ Miyamoto
CSP Lv.2の話
CSP Lv.2の話
Yu Yagihashi
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
Kouhei Sutou
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
Masato Kinugawa
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Masataka Tsukamoto
現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方
時雨 大西
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Mayumi Emori
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
Terui Masashi
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
Ryoji Kurosawa
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
Takahiro Okumura
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility
Satoshi Hirata
Mais procurados
(15)
0730 bp study#35発表資料
0730 bp study#35発表資料
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
資料
資料
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
CSP Lv.2の話
CSP Lv.2の話
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
Mroongaを選んだ理由と ちょっと嬉しかった話
Mroongaを選んだ理由と ちょっと嬉しかった話
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility
Destaque
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
Masashi Umezawa
第二章
第二章
jxhtq
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
Masashi Umezawa
Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計
Masashi Umezawa
Sistemas integrados de manufactura
Sistemas integrados de manufactura
ROSS_ANGEL
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
NanoStrand
NanoStrand
Masashi Umezawa
視覚化エンジンRoassal
視覚化エンジンRoassal
Masashi Umezawa
Smalltalkでじゃんけん
Smalltalkでじゃんけん
Masashi Umezawa
早わかりSmalltalk
早わかりSmalltalk
Masashi Umezawa
iPadでScratch
iPadでScratch
Masashi Umezawa
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Masashi Umezawa
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
Smalltalkだめ自慢
Smalltalkだめ自慢
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
Destaque
(19)
MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
第二章
第二章
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計
Sistemas integrados de manufactura
Sistemas integrados de manufactura
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
Pillarの紹介
Pillarの紹介
NanoStrand
NanoStrand
視覚化エンジンRoassal
視覚化エンジンRoassal
Smalltalkでじゃんけん
Smalltalkでじゃんけん
早わかりSmalltalk
早わかりSmalltalk
iPadでScratch
iPadでScratch
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Tide - SmalltalkでSPA
Tide - SmalltalkでSPA
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Smalltalkだめ自慢
Smalltalkだめ自慢
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
Smalltalkと型について
Smalltalkと型について
Semelhante a super super & sub sub の話
ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 super
Kaito Minatoya
Pattern match with case class
Pattern match with case class
Kai Sasaki
Ruby on Rails 入門
Ruby on Rails 入門
Yasuko Ohba
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
Nishida Kansuke
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
y_taka_23
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
佑 小田垣佑
第5回勉強会
第5回勉強会
Mugen Fujii
RubyとActive Support for expert 2
RubyとActive Support for expert 2
xibbar
An Internal of LINQ to Objects
An Internal of LINQ to Objects
Yoshifumi Kawai
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
Mugen Fujii
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
Takahiro Yoshimura
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
Toshio Ehara
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
LeapMind Inc
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Miyoshi Kosuke
Ruby test double
Ruby test double
Naotoshi Seo
Start!! Ruby
Start!! Ruby
mitim
Spock's world
Spock's world
Takuma Watabiki
はじめてのPowerShell
はじめてのPowerShell
Trainocate Japan, Ltd.
20180123 power shell
20180123 power shell
Trainocate Japan, Ltd.
Semelhante a super super & sub sub の話
(19)
ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 super
Pattern match with case class
Pattern match with case class
Ruby on Rails 入門
Ruby on Rails 入門
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
第5回勉強会
第5回勉強会
RubyとActive Support for expert 2
RubyとActive Support for expert 2
An Internal of LINQ to Objects
An Internal of LINQ to Objects
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
Ruby test double
Ruby test double
Start!! Ruby
Start!! Ruby
Spock's world
Spock's world
はじめてのPowerShell
はじめてのPowerShell
20180123 power shell
20180123 power shell
Mais de Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
VerStixの紹介
VerStixの紹介
Masashi Umezawa
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Masashi Umezawa
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Masashi Umezawa
Tarantalk
Tarantalk
Masashi Umezawa
Why!? Smalltalk
Why!? Smalltalk
Masashi Umezawa
Mais de Masashi Umezawa
(17)
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
FileManで楽々ファイル操作
FileManで楽々ファイル操作
TruffleSqueakの紹介
TruffleSqueakの紹介
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
TaskItの紹介
TaskItの紹介
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Revealing ALLSTOCKER
Revealing ALLSTOCKER
TarandocでJSONを永続化
TarandocでJSONを永続化
Dockerizing pharo
Dockerizing pharo
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
VerStixの紹介
VerStixの紹介
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Tarantalk
Tarantalk
Why!? Smalltalk
Why!? Smalltalk
super super & sub sub の話
1.
第27回 Smalltalk勉強会 -
Smalltalkの超能力 2010 Tetsuya Hayashi 2010 Masashi Umezawa
2.
動機 Smalltalkのsuperpowers紹介なのでsuper に関わる何かをしたい 実際OOPSLA
2008のSmalltalk superpowers では Travis Griggs さんが super superの話をした模様 メソッド探索部分をいじる好例であろう
3.
特徴 通常のsuper メソッド探索を自分のスーパークラスから開始
super superと書くと… メソッド探索を自分のスーパークラスのスーパー クラスから開始する メッセージなので super super super superなどと 書くことも可能 => オブジェクト指向はさらに自由になったw
4.
作り方 Travisさんの実装はVisualWorksで 行われていたので、Squeak版を作った ついでに調子に乗ってメソッド探索を自分の サブクラスから開始するsubも作った
使ったテクニックはほぼ同じ 割と素直な実装
5.
テクニック (1) Object
>> doesNotUnderstand: aMessage 理解できないメッセージを受け取ったときにVMから 送信されるコールバック aMessage にはもともと送られたメッセージが入る Rubyだとmethod_missing オーバーライドすると、メッセージを自分以外の 誰かに受け流すことが可能
6.
例: doesNotUnderstand: でプロキシ
プロキシの実装 MyLogProxy >> doesNotUnderstand: aMessage Logger log: aMessage. ^ realObj perform: aMessage selector withArguments: aMessage arguments
7.
テクニック (2) CompiledMethod
その名の通り、コンパイルされたメソッド 各クラスの持つmethoDictionaryに値として格 納されている ○ キーはメッセージセレクタのシンボル aClass compiledMethodAt: selector で取り出せる ○ もしくは aClass >> selector バイトコードをいじったりもできるが、今回はおとなし く間接的な起動用に使う
8.
例: CompiledMethodによるメソッド起動 通常の場合 ord
:= OrderedCollection with: 1 with: 2. ord add: 3. ord := OrderedCollection with: 1 with: 2. method := ord class compiledMethodAt: #add:. method valueWithReceiver: ord arguments: #(3). CompiledMethod経由では…
9.
テクニック (3) thisContext
実行中のコンテキストが入っている特殊変数 ○ true, false, nil, self, superに次ぐ、第6の予約語 ○ 約束事の少ないSmalltalkでは希有の存在 典型的にはデバッガの実装などで使われる thisContext sender で送信者のコンテキストが 得られる ○ 次々にたどっていくことも可能
10.
例: thisContextでアクセス制御 privateメソッドの実装
※ Object >> private self class = thisContext sender sender methodClass ifFalse: [SmallTalkAccessViolation private signal] methodA self private. ... 使用例 ※ SmallTalk R4.1 - http://smalltalk.smalltalk-users.jp
11.
コードの解説(1) AnySend というクラスを定義 ProtoObject
subclass: #AnySend instanceVariableNames: 'receiver searchClass' classVariableNames: '' poolDictionaries: '' category: 'SuperSuper' receiver ->メッセージの受けとり手 searchClass -> メソッド探索の起点となるクラス
12.
コードの解説(2) AnySendはProtoObject(Objectのさらに上)を継承 ほとんど全てのメッセージに答えられないため、 doesNotUnderstand:
が起動される CompiledMethodを取り出して起動 doesNotUnderstand: aMessage ^((searchClass whichClassIncludesSelector: aMessage selector) >> aMessage selector) valueWithReceiver: receiver arguments: aMessage arguments
13.
コードの解説(3) Object >>
superを用意 AnySendをsuper:かsupersuper:で作る thisContextで、直前でsuper(変数)を使っているか判断 super | context sendCode | context := thisContext sender. sendCode := context method at: context pc - 2. ^(sendCode == 133) ifTrue: [AnySend supersuper: self] ifFalse: [AnySend super: self]
14.
コードの解説(4) AnySend class
>> self: self: anObject ^self receiver: anObject searchClass: anObject class 生成用のクラスメソッドを定義 super: anObject ^(self self: anObject) super AnySend class >> super:
15.
コードの解説(5) super searchClass := searchClass
superclass supersuper: anObject ^(self super: anObject) super もう少し生成用のクラスメソッドを AnySend class >> supersuper: AnySend >> superでsuperclassをずらす 以上。これで動く!!
16.
デモ super superで真ん中のメソッドを飛ばす
17.
調子に乗ってsubも追加(1) AnySend class
>> sub: sub: anObject ^(self self: anObject) sub AnySend >> sub sub searchClass := searchClass subclass subclass ^self subclassAt: 1 Behavior >> subclass
18.
調子に乗ってsubも追加(2) Behavior >>
subclassAt: subclassAt: anIndex | subs | subs := self subclasses ifEmpty: [self error: 'No subclass']. ^subs at: anIndex ifAbsent: [self error: 'No subclass at: ', anIndex printString]
19.
サブクラスは1つとは限らない(1) methodA ((self sub @
2) sub @ 3) doSomething 2番目のサブクラスの3番目のサブクラスの doSomethingを起動 とか書けるとクール!! methodB ((self sub << ClassA) sub << ClassB) doSomething この際だし直接指定もやっておこう
20.
サブクラスは1つとは限らない(2) AnySend class
>> sub @ anInteger (searchClass inheritsFrom: receiver class) ifFalse: [self error: '@ can be used after sub']. searchClass := searchClass superclass subclassAt: anInteger AnySend >> @
21.
サブクラスは1つとは限らない(3) << aClass …"@と同じ" searchClass :=
searchClass superclass subclassClassOf: aClass AnySend >> << subclassClassOf: aClass ^self subclassAt: (self subclasses indexOf: aClass) Behavior >> subclassClassOf:
22.
デモ subとsuperを使って無限ループ Top >>
doSomethingLoopy self waitASecond. self doSomething: 'Hello'. self sub sub doSomethingLoopy. Middle >> doSomethingLoopy self doSomething: '!!!!'. super doSomethingLoopy. Bottom >> doSomethingLoopy self doSomething: 'World'. super doSomethingLoopy.
23.
まとめ Smalltalkでは、メソッド探索の仕方などは 簡単にいじれる クラスを一つ導入していくつかのメソッドを 追加したのみ
新たな言語もすぐ作れる まじめな開発ではsuper superとか使って いたらクビです
Baixar agora