SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
第27回 Smalltalk勉強会 - Smalltalkの超能力
2010 Tetsuya Hayashi
2010 Masashi Umezawa
動機
 Smalltalkのsuperpowers紹介なのでsuper
に関わる何かをしたい
 実際OOPSLA 2008のSmalltalk
superpowers では Travis Griggs さんが
super superの話をした模様
 メソッド探索部分をいじる好例であろう
特徴
 通常のsuper
 メソッド探索を自分のスーパークラスから開始
 super superと書くと…
 メソッド探索を自分のスーパークラスのスーパー
クラスから開始する
 メッセージなので super super super superなどと
書くことも可能
=> オブジェクト指向はさらに自由になったw
作り方
 Travisさんの実装はVisualWorksで
行われていたので、Squeak版を作った
 ついでに調子に乗ってメソッド探索を自分の
サブクラスから開始するsubも作った
 使ったテクニックはほぼ同じ
 割と素直な実装
テクニック (1)
 Object >> doesNotUnderstand: aMessage
 理解できないメッセージを受け取ったときにVMから
送信されるコールバック
 aMessage にはもともと送られたメッセージが入る
 Rubyだとmethod_missing
 オーバーライドすると、メッセージを自分以外の
誰かに受け流すことが可能
例: doesNotUnderstand: でプロキシ
 プロキシの実装
MyLogProxy >> doesNotUnderstand: aMessage
Logger log: aMessage.
^ realObj perform: aMessage selector
withArguments: aMessage arguments
テクニック (2)
 CompiledMethod
 その名の通り、コンパイルされたメソッド
 各クラスの持つmethoDictionaryに値として格
納されている
○ キーはメッセージセレクタのシンボル
 aClass compiledMethodAt: selector で取り出せる
○ もしくは aClass >> selector
 バイトコードをいじったりもできるが、今回はおとなし
く間接的な起動用に使う
例: 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経由では…
テクニック (3)
 thisContext
 実行中のコンテキストが入っている特殊変数
○ true, false, nil, self, superに次ぐ、第6の予約語
○ 約束事の少ないSmalltalkでは希有の存在
 典型的にはデバッガの実装などで使われる
 thisContext sender で送信者のコンテキストが
得られる
○ 次々にたどっていくことも可能
例: 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
コードの解説(1)
 AnySend というクラスを定義
ProtoObject subclass: #AnySend
instanceVariableNames: 'receiver searchClass'
classVariableNames: ''
poolDictionaries: ''
category: 'SuperSuper'
 receiver ->メッセージの受けとり手
 searchClass -> メソッド探索の起点となるクラス
コードの解説(2)
 AnySendはProtoObject(Objectのさらに上)を継承
 ほとんど全てのメッセージに答えられないため、
doesNotUnderstand: が起動される
 CompiledMethodを取り出して起動
doesNotUnderstand: aMessage
^((searchClass whichClassIncludesSelector:
aMessage selector) >> aMessage selector)
valueWithReceiver: receiver
arguments: aMessage arguments
コードの解説(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]
コードの解説(4)
 AnySend class >> self:
self: anObject
^self receiver: anObject
searchClass: anObject class
 生成用のクラスメソッドを定義
super: anObject
^(self self: anObject) super
 AnySend class >> super:
コードの解説(5)
super
searchClass := searchClass superclass
supersuper: anObject
^(self super: anObject) super
 もう少し生成用のクラスメソッドを
 AnySend class >> supersuper:
 AnySend >> superでsuperclassをずらす
以上。これで動く!!
デモ
 super superで真ん中のメソッドを飛ばす
調子に乗ってsubも追加(1)
 AnySend class >> sub:
sub: anObject
^(self self: anObject) sub
 AnySend >> sub
sub
searchClass := searchClass subclass
subclass
^self subclassAt: 1
 Behavior >> subclass
調子に乗って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]
サブクラスは1つとは限らない(1)
methodA
((self sub @ 2) sub @ 3) doSomething
 2番目のサブクラスの3番目のサブクラスの
doSomethingを起動
とか書けるとクール!!
methodB
((self sub << ClassA) sub << ClassB) doSomething
 この際だし直接指定もやっておこう
サブクラスは1つとは限らない(2)
 AnySend class >> sub
@ anInteger
(searchClass inheritsFrom: receiver class)
ifFalse: [self error: '@ can be used after sub'].
searchClass := searchClass superclass
subclassAt: anInteger
 AnySend >> @
サブクラスは1つとは限らない(3)
<< aClass
…"@と同じ"
searchClass := searchClass superclass
subclassClassOf: aClass
 AnySend >> <<
subclassClassOf: aClass
^self subclassAt: (self subclasses indexOf: aClass)
 Behavior >> subclassClassOf:
デモ
 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.
まとめ
 Smalltalkでは、メソッド探索の仕方などは
簡単にいじれる
 クラスを一つ導入していくつかのメソッドを
追加したのみ
 新たな言語もすぐ作れる
 まじめな開発ではsuper superとか使って
いたらクビです

Mais conteúdo relacionado

Mais procurados

0730 bp study#35発表資料
0730 bp study#35発表資料0730 bp study#35発表資料
0730 bp study#35発表資料Yasuhiro Horiuchi
 
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話saiken3110
 
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6Takashi Uemura
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!Kouhei Sutou
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~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!Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!Masataka Tsukamoto
 
現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方時雨 大西
 
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方Mayumi Emori
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Terui Masashi
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Ryoji Kurosawa
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話Takahiro Okumura
 
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility20201102 postgresql unconference_debility
20201102 postgresql unconference_debilitySatoshi Hirata
 

Mais procurados (15)

0730 bp study#35発表資料
0730 bp study#35発表資料0730 bp study#35発表資料
0730 bp study#35発表資料
 
My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話My sqlで2億件のシリアルデータと格闘した話
My sqlで2億件のシリアルデータと格闘した話
 
資料
資料資料
資料
 
What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6What's new! TwentyThirteen + WordPress3.6
What's new! TwentyThirteen + WordPress3.6
 
20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS20121215 DevLOVE2012 Mahout on AWS
20121215 DevLOVE2012 Mahout on AWS
 
CSP Lv.2の話
CSP Lv.2の話CSP Lv.2の話
CSP Lv.2の話
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
X-XSS-Nightmare: 1; mode=attack ~XSSフィルターを利用したXSS攻撃~
 
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
Macユーザーに贈る!OmniOSで作るお手軽・カンタン・高性能なZFS-NAS!
 
現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方現実世界から学ぶ効率のいいサーバの使い方
現実世界から学ぶ効率のいいサーバの使い方
 
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
大江戸Ruby会議01 "mission critical"なシステムでも使えるThreadの作り方
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
 
Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方Elasticsearch 変わり種プラグインの作り方
Elasticsearch 変わり種プラグインの作り方
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 
20201102 postgresql unconference_debility
20201102 postgresql unconference_debility20201102 postgresql unconference_debility
20201102 postgresql unconference_debility
 

Destaque

MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッドMultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッドMasashi Umezawa
 
第二章
第二章第二章
第二章jxhtq
 
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサSmalltalkで四則演算パーサ
Smalltalkで四則演算パーサMasashi Umezawa
 
Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計Masashi Umezawa
 
Sistemas integrados de manufactura
Sistemas integrados de manufacturaSistemas integrados de manufactura
Sistemas integrados de manufacturaROSS_ANGEL
 
視覚化エンジンRoassal
視覚化エンジンRoassal視覚化エンジンRoassal
視覚化エンジンRoassalMasashi Umezawa
 
Smalltalkでじゃんけん
SmalltalkでじゃんけんSmalltalkでじゃんけん
SmalltalkでじゃんけんMasashi Umezawa
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0Masashi Umezawa
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPAMasashi Umezawa
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Masashi Umezawa
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0Masashi Umezawa
 
Smalltalkと型について
Smalltalkと型についてSmalltalkと型について
Smalltalkと型についてMasashi Umezawa
 

Destaque (19)

MultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッドMultilineクラスとMultilineメソッド
MultilineクラスとMultilineメソッド
 
第二章
第二章第二章
第二章
 
Smalltalkで四則演算パーサ
Smalltalkで四則演算パーサSmalltalkで四則演算パーサ
Smalltalkで四則演算パーサ
 
Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計Smalltalkで文字列解析・集計
Smalltalkで文字列解析・集計
 
Sistemas integrados de manufactura
Sistemas integrados de manufacturaSistemas integrados de manufactura
Sistemas integrados de manufactura
 
Cuis Smalltalkの紹介
Cuis Smalltalkの紹介Cuis Smalltalkの紹介
Cuis Smalltalkの紹介
 
Pillarの紹介
Pillarの紹介Pillarの紹介
Pillarの紹介
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
視覚化エンジンRoassal
視覚化エンジンRoassal視覚化エンジンRoassal
視覚化エンジンRoassal
 
Smalltalkでじゃんけん
SmalltalkでじゃんけんSmalltalkでじゃんけん
Smalltalkでじゃんけん
 
早わかりSmalltalk
早わかりSmalltalk早わかりSmalltalk
早わかりSmalltalk
 
iPadでScratch
iPadでScratchiPadでScratch
iPadでScratch
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
 
Tide - SmalltalkでSPA
Tide - SmalltalkでSPATide - SmalltalkでSPA
Tide - SmalltalkでSPA
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
Smalltalkだめ自慢
Smalltalkだめ自慢Smalltalkだめ自慢
Smalltalkだめ自慢
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
Pyonkeeの皮をはぐ
Pyonkeeの皮をはぐPyonkeeの皮をはぐ
Pyonkeeの皮をはぐ
 
Smalltalkと型について
Smalltalkと型についてSmalltalkと型について
Smalltalkと型について
 

Semelhante a super super & sub sub の話

ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superKaito Minatoya
 
Pattern match with case class
Pattern match with case classPattern match with case class
Pattern match with case classKai Sasaki
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfestay_taka_23
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)佑 小田垣佑
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
RubyとActive Support for expert 2
RubyとActive Support for expert 2RubyとActive Support for expert 2
RubyとActive Support for expert 2xibbar
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験Toshio Ehara
 
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説LeapMind Inc
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningMiyoshi Kosuke
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 

Semelhante a super super & sub sub の話 (19)

ebisu.rb #19 超実践 super
ebisu.rb #19 超実践 superebisu.rb #19 超実践 super
ebisu.rb #19 超実践 super
 
Pattern match with case class
Pattern match with case classPattern match with case class
Pattern match with case class
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
 
デザイナーのためのPHP講座 for WordPress (初級)
デザイナーのためのPHP講座  for WordPress (初級)デザイナーのためのPHP講座  for WordPress (初級)
デザイナーのためのPHP講座 for WordPress (初級)
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
RubyとActive Support for expert 2
RubyとActive Support for expert 2RubyとActive Support for expert 2
RubyとActive Support for expert 2
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 
GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験traceur-compilerで未来のJavaScriptを体験
traceur-compilerで未来のJavaScriptを体験
 
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
20180613 [TensorFlow分散学習] Horovodによる分散学習の実装方法と解説
 
Androidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearningAndroidで動かすはじめてのDeepLearning
Androidで動かすはじめてのDeepLearning
 
Ruby test double
Ruby test doubleRuby test double
Ruby test double
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Spock's world
Spock's worldSpock's world
Spock's world
 
はじめてのPowerShell
はじめてのPowerShellはじめてのPowerShell
はじめてのPowerShell
 
20180123 power shell
20180123 power shell20180123 power shell
20180123 power shell
 

Mais de Masashi Umezawa

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーションMasashi Umezawa
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作Masashi Umezawa
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門Masashi Umezawa
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Masashi Umezawa
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化Masashi Umezawa
 
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門Masashi Umezawa
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すMasashi Umezawa
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Masashi Umezawa
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へMasashi Umezawa
 

Mais de Masashi Umezawa (17)

第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
 
FileManで楽々ファイル操作
FileManで楽々ファイル操作FileManで楽々ファイル操作
FileManで楽々ファイル操作
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
TaskItの紹介
TaskItの紹介TaskItの紹介
TaskItの紹介
 
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
 
Revealing ALLSTOCKER
Revealing ALLSTOCKERRevealing ALLSTOCKER
Revealing ALLSTOCKER
 
TarandocでJSONを永続化
TarandocでJSONを永続化TarandocでJSONを永続化
TarandocでJSONを永続化
 
Dockerizing pharo
Dockerizing pharoDockerizing pharo
Dockerizing pharo
 
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
 
VerStixの紹介
VerStixの紹介VerStixの紹介
VerStixの紹介
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
 
Pyonkeeを鳴らす
Pyonkeeを鳴らすPyonkeeを鳴らす
Pyonkeeを鳴らす
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
Why!? Smalltalk
Why!? SmalltalkWhy!? Smalltalk
Why!? Smalltalk
 

super super & sub sub の話