SlideShare ist ein Scribd-Unternehmen logo
1 von 20
Downloaden Sie, um offline zu lesen
SOFTUMEYA, LLC.
MASASHI UMEZAWA
2016 LLoT
Smalltalkとは
 ミニマリズムの言語
1. すべてはオブジェクト
2. オブジェクトがメッセージ送信する
のみで成り立つ
 予約語は6つのみ
nil, true, false, self, super, thisContext
 少ないルールの組み合わせによって何でも作っていける
プログラミング言語の壁
 使う人
 アプリケーションのユーザ
 作る人
 プログラマ
 言語を作る人
 プログラミング言語開発者
 Smalltalkには上の区別が無い
 「この言語にはこれがないから…」
=>「だったら作ればいいじゃん」
 「オブジェクトにメッセージを送る」ことで、アプリのみならず
プログラミング言語そのものを変更できる
自由の世界の重要性
 Kent BeckのFacebookの記事
 http://www.facebook.com/notes/kent-
beck/design-space/510856375613898
 "The greater my knowledge, the freer I feel. It’s
like walking under a Montana sky instead of
being jostled down a narrow, one-way corridor"
 「知れば知るほど、自由を感じる。狭い一方通行の
廊下に押し込まれて進むのではなく、モンタナの空
の下を闊歩するようなものだ」
デモ
 クラス名やメソッド名を複数行対応にする
 http://www.slideshare.net/umejava/multilines
Object subclass: #'
/ \
/ ─ ─\
/ (●) (●) \ よく考えたら俺いらないな
| (__人__) |
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
\ /___ /
'
instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'Test-Multilines'
デモ
 super を拡張して super super を作る
 真ん中のメソッドを飛ばす
 http://www.slideshare.net/umejava/supersupersubsub
静的型の導入とか
 とはいえ定期的に現れるトピックではある
Typed Smalltalk (1988)
StrongTalk (1993)
SmallInterfaces (2000)
Gradualtalk (2014)
Smalltalkにとって型とは?
 あるオブジェクトから見たときのクラス
 すべてはオブジェクト
1, true, nil なども
SmallInteger, True, UndefinedObject
クラス自身もオブジェクト
Number class => メタクラスNumber
Metaclass class => メタクラスMetaclass
 実行時にclassと聞くと必ずクラスの役割を持つ
オブジェクトが返ってくる
 という点で、「動的で強い型づけ」の言語
 「型」という概念はないとも言える
型を明示的に宣言する利点
 不適切なオブジェクトにメッセージを送ることに
なるなどの誤りが、未然に判明する
 実行させなくとも、クラス定義やメソッドシグネ
チャを見てオブジェクトの責務、仕様が把握できる
静的なものが皆無
 Smalltalkにおいて動いていないものは存在できない
 クラス定義、メソッド追加なども含め、すべて動的
に行っている
 クラス定義
ClassBuilderにクラス生成依頼のメッセージを送る
 メソッド定義
ClassA>>mを定義(accept)するとmのバイトコードが
ClassA classのインスタンス変数methodDictに格納される
 「実行前」に型を「宣言しておく」という文化がない
 動かしながら型っぽいものを決めていきながら動く
型を明示的に宣言する利点
 不適切なオブジェクトにメッセージを送ることに
なるなどの誤りが、未然に判明する
 実行させなくとも、クラス定義やメソッドシグネ
チャを見てオブジェクトの責務、仕様が把握できる
 実行し続けている環境においてどれだけの意味が
あるのか?
 こうしてソースを眺めている間にも、
裏でうようよオブジェクトが動いている… !!
が
Typed Smalltalk (1988)
 最初期のアプローチ
 VMの高速化が大きな狙い
 負担となる静的な型指定を省くため、型推定を行う
 結局のところ世に出てはいない
StrongTalk (1993)
 http://www.strongtalk.org/
 初期はBrandと呼ばれるStructural Typing
=> 後にNominal Typingに変化
 型推定はしない
 静的な型チェックは動的な実行モデルに影響を与えない
 リリース直前に会社ごとSunに買われてしまった
 コンセプトの多くはDartへ
SmallInterfaces (2000)
 http://www.jot.fm/issues/issue_2002_05/article1/
 http://www.mars.dti.ne.jp/~umejava/smalltalk/s
tClasses/smallInterfaces/
 Interfaceの概念の導入
 軽量でポータブル
 変数の型宣言は行えない
 動的、構造的にInterfaceに適合しているかを
チェック
Gradualtalk (2014)
 http://pleiad.cl/research/software/gradualtalk
 いいとこ取りを狙う
 Traitsを使って型システムをon/off
 Structural & Nominalの両方をサポート
 Optional & Gradualの両方をサポート
 型推定は(まだ)しない
 Gradualモードで動かすと型チェックが激しすぎて遅く
なる
現状は
 "I’m not against types, but I don’t know of any
type systems that aren’t a complete pain, so I
still like dynamic typing." - Alan Kay
 思い切りlate-binding側に降った言語の良さを失わ
せないような静的型システム・環境とは?
産業界では
 実のところあまり困っていない
 オブジェクトが答えてくれる
 ALLSTOCKER.com by
 建機売買の総合プラットフォーム
498クラス、7705メソッド
継続ベースのWebアプリフレームワーク
Seasideを魔改造して使っている
個人的には
 ライブラリのリリースのタイミングなどで、型を明
らかにさせたいときもある
 リファクタリング時に、型情報を使って影響範囲を
正確に把握したいこともある
 オンデマンドに候補となる型を浮かび上がらせるよ
うなもの
 があったら使うかもしれない

Weitere ähnliche Inhalte

Was ist angesagt?

アラン・ケイ氏の未来の創り方
アラン・ケイ氏の未来の創り方アラン・ケイ氏の未来の創り方
アラン・ケイ氏の未来の創り方sumim
 
フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方H Iseri
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜Megagon Labs
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalkSho Yoshida
 
生存時間分析数理の基礎
生存時間分析数理の基礎生存時間分析数理の基礎
生存時間分析数理の基礎Koichiro Gibo
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイするTakayuki Itoh
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!takehikoihayashi
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual FeaturesARISE analytics
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会takehikoihayashi
 
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )Kenji Urai
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情Yuta Kikuchi
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景Masato Nakai
 
Motpy ros rosjp
Motpy ros rosjpMotpy ros rosjp
Motpy ros rosjpRayAr3
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】Unity Technologies Japan K.K.
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話torisoup
 

Was ist angesagt? (20)

アラン・ケイ氏の未来の創り方
アラン・ケイ氏の未来の創り方アラン・ケイ氏の未来の創り方
アラン・ケイ氏の未来の創り方
 
フィーチャモデルの描き方
フィーチャモデルの描き方フィーチャモデルの描き方
フィーチャモデルの描き方
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
今日から使おうSmalltalk
今日から使おうSmalltalk今日から使おうSmalltalk
今日から使おうSmalltalk
 
生存時間分析数理の基礎
生存時間分析数理の基礎生存時間分析数理の基礎
生存時間分析数理の基礎
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
cvpaper.challengeについて
cvpaper.challengeについてcvpaper.challengeについて
cvpaper.challengeについて
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
【論文読み会】Deep Clustering for Unsupervised Learning of Visual Features
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会
 
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )
ガウス過程回帰の導出 ( GPR : Gaussian Process Regression )
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情最近のDeep Learning (NLP) 界隈におけるAttention事情
最近のDeep Learning (NLP) 界隈におけるAttention事情
 
BlackBox モデルの説明性・解釈性技術の実装
BlackBox モデルの説明性・解釈性技術の実装BlackBox モデルの説明性・解釈性技術の実装
BlackBox モデルの説明性・解釈性技術の実装
 
Word2vecの理論背景
Word2vecの理論背景Word2vecの理論背景
Word2vecの理論背景
 
Motpy ros rosjp
Motpy ros rosjpMotpy ros rosjp
Motpy ros rosjp
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
コールバックと戦う話
コールバックと戦う話コールバックと戦う話
コールバックと戦う話
 

Mehr von 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
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すMasashi Umezawa
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Masashi Umezawa
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へMasashi Umezawa
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0Masashi Umezawa
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Masashi Umezawa
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0Masashi Umezawa
 

Mehr von Masashi Umezawa (20)

第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
 
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒すTarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
 
VerStixの紹介
VerStixの紹介VerStixの紹介
VerStixの紹介
 
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
 
Pyonkeeを鳴らす
Pyonkeeを鳴らすPyonkeeを鳴らす
Pyonkeeを鳴らす
 
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へSmalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
 
Tarantalk
TarantalkTarantalk
Tarantalk
 
Introduction of Pharo 5.0
Introduction of Pharo 5.0Introduction of Pharo 5.0
Introduction of Pharo 5.0
 
Pillarの紹介
Pillarの紹介Pillarの紹介
Pillarの紹介
 
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
 
NanoStrand
NanoStrandNanoStrand
NanoStrand
 
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
 

Smalltalkと型について