SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
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を魔改造して使っている
個人的には
 ライブラリのリリースのタイミングなどで、型を明
らかにさせたいときもある
 リファクタリング時に、型情報を使って影響範囲を
正確に把握したいこともある
 オンデマンドに候補となる型を浮かび上がらせるよ
うなもの
 があったら使うかもしれない

Contenu connexe

Tendances

知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
Ken Morishita
 
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモAnaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
ayohe
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
 

Tendances (20)

最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)知らないと損するアプリ開発におけるStateMachineの活用法(full版)
知らないと損するアプリ開発におけるStateMachineの活用法(full版)
 
えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?えっ?まだそのツール使ってるの?
えっ?まだそのツール使ってるの?
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Issueの書き方と伝え方
Issueの書き方と伝え方Issueの書き方と伝え方
Issueの書き方と伝え方
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
 
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモAnaconda navigatorのアップデートが終わらないときの対処方法メモ
Anaconda navigatorのアップデートが終わらないときの対処方法メモ
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
私にとってのテスト
私にとってのテスト私にとってのテスト
私にとってのテスト
 
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章PythonクライアントライブラリrclpyROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
ROS2勉強会@別府 第7章Pythonクライアントライブラリrclpy
 
大学でC言語をはじめて触る人へ
大学でC言語をはじめて触る人へ大学でC言語をはじめて触る人へ
大学でC言語をはじめて触る人へ
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Oss貢献超入門
Oss貢献超入門Oss貢献超入門
Oss貢献超入門
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 

Plus de Masashi Umezawa

Plus de 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と型について