SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Smalltalkについて
@sumim
2020/5/4
Smalltalkを学ぶ会(リモート開催)
Smalltalkとは…
プログラミング言語とその処理系?
Smalltalkとは…
プログラミング言語とその処理系だけではなく
それらを含む(いわゆる)“OS”のひとつ
• かなり早い時期に仮想化された─
• オブジェクトベース(not ファイルシステムベース)の─
• グラフィカルなUI付きの─
Smalltalkとは(別の言い方をすると)…
プログラミング言語とその処理系。ただし
• オンメモリ簡易OODB内に構成
• メモリダンプ(ファイル化)して持ち出し可
• プリミティブな描画関数を一つ持ち
簡易OODB内に構成されたGUIを
(ウインドウ内等)ホストPC画面に投影
Smalltalkの系譜(コンセプトの理解に重要)
• Smalltalk-72 … タートル描画が使えるスクリプト言語
• Smalltalk-74 … -72+高速描画ルーチン → GUI
• Smalltalk-76 … -72とは別物。省コスト版メッセージング
• Smalltalk-78 … 8086でも動かせるコンパクト版-76
• Smalltalk-80 … 実験色を排除し商用言語処理系(IDE)へ
Smalltalk-72 Smalltalk-74 Smalltalk-76 Smalltalk-80
Smalltalkに関わりをもった人たち
Smalltalk-72 Smalltalk-76 Smalltalk-80
1973 Hewitt (Actor) 1978-79 Reenskaug (MVC)
1978 Borning (ThingLab)
1979 Jobs (Lisa/Mac/NeXT)
1980-
Joe Armstrong (Erlang)
Dave Thomas
Beck/Cunningham/Fowler
Jeff Sutherland (Scrum)
メッセージングのオブジェクト指向(アラン・ケイ)
• 「コンピューターは“計算機”である以上にメタメディアである」という気づき
• そんなコンピューターの中身(プログラム)を、データ構造、手続き、関数など
のように、コンピューターそれ自体よりも弱いものに分割して構成し、それらの
手のかかる管理に煩わされるのはつまらない。
• オブジェクト → 小さなコンピューター
• すべてをオブジェクトのみで構成 → 再帰的(Turtles All the Way Down)
• それらが非常に高速なネットワークで相互に接続されてメッセージをやりとり。
サーバー指向プログラミング(生命体の細胞とその営みにも例えられる)
• 個々のコンピューターが期待通り正しく動くなら、それらが具体的にどう実装さ
れていようと気にする必要はない。答えが間違っていたり、いくら待っても答え
を返してこなかったら、そのときはどう実装すべきか考えればいい。決定の遅延
Smalltalk考案時のスキーム
• すべてはオブジェクトである。
• すべてのオブジェクトはメモリーを持つ(メモリーもオブジェクト)。
• オブジェクトはメッセージをやりとりし協働する(メッセージもオブジェクト)。
• すべてのオブジェクトはクラスのインスタンスである(クラスもオブジェクト)。
• クラスはそのインスタンスであるオブジェクトに共通する動作をメソッドとして保
持する(コードもオブジェクトにより構成される)。
• コードの評価にあたっては、最初のオブジェクトに制御が渡され、残りのオブジェ
クト群はそれへのメッセージとして扱われる。
Smalltalk考案時のスキーム
• すべてはオブジェクトである。
• すべてのオブジェクトはメモリーを持つ(メモリーもオブジェクト)。
• オブジェクトはメッセージをやりとりし協働する(メッセージもオブジェクト)。
• すべてのオブジェクトはクラスのインスタンスである(クラスもオブジェクト)。
• クラスはそのインスタンスであるオブジェクトに共通する動作をメソッドとして保
持する(コードもオブジェクトにより構成される)。
• コードの評価にあたっては、最初のオブジェクトに制御が渡され、残りのオブジェ
クト群はそれへのメッセージとして扱われる。
メッセージングのアイデアの実現
3 + 4
オブジェクト3 への + 4 というメッセージの送信と解釈すればいい!
• Smalltalk-72
for i ← 1 to 10 do ( i print. user ← 13 )
オブジェクト for への i ← 1 to …の送信として実装
• Smalltalk-76
for⦂ i from: 1 to: 10 do⦂ [ i print. user cr ]
省略されたオブジェクトへの for⦂ i from: 1 to: …の送信で実装
for⦂ from:to:do⦂ メソッドのコール(実体は for:from:to:do:on: )
• Smalltalk-80以降
1 to: 10 do: [:i | Transcript show: i printString; cr; endEntry]
オブジェクト1 への to: 10 do: … の送信として実装
to:do: メソッドのコール(実際はコンパイル時にインライン展開)
Smalltalk変遷の追体験が可能
• Smalltalk-72 … https://lively-web.org/users/Dan/ALTO-Smalltalk-72.html
• Smalltalk-74 … いまのところ無し
• Smalltalk-76 … ContrAltoエミュレーター + resume xmsmall.boot
• Smalltalk-78 … https://lively-web.org/users/bert/Smalltalk-78.html
• Smalltalk-80 … https://squeak.js.org/demo/simple.html#fullscreen
Smalltalk-72 Smalltalk-74 Smalltalk-76 Smalltalk-80
・クラスはJavaScriptと同様に関数(かつif式のネスト)で継承機構は無い
条件 ⇒(非false時の処理) false時の処理,条件分岐式
∢(アイボール),パターンマッチ
☺(スマイリー),タートル(クラス turtle のインスタンス)
☞(指さし)+文字列,シンボルリテラル表現(主に変数をあらわす)
:(コロン),解釈中メッセージ内の次のオブジェクトの読み込み
・メッセージングはメソッド呼び出しではなくトークン列のパース
非同期ではなかったが「アクター」の着想に大きな影響を与えた
参考:Smalltalk-72で学ぶOOPの原点 Advent Calendar 2019
Smalltalk-72
Smalltalk-76
• Simula67スタイル(つまり現在主流のと同じ)のクラスへの転換
継承機能のサポート
メソッドもパターンマッチからメンバー関数に
メッセージはメソッドの動的呼び出しに → 省コスト版メッセージング
メソッドが存在しないときだけメッセージをハンドリング可能に
• 現在に続くウィジェットやUIパターンを創出
• スクロールバー(ただし左にポップアップしフォーカス明示を兼ねた)
• カラムインターフェース(システムブラウザー)
• 仮想デスクトップ(サブビュー)
• ラジオボタン、ペイントツール、ドット拡大編集
必読文献(ただし追体験とあわせないと難解)
• 構想
1972 - A Personal Computer for Children of All Ages
https://swikis.ddo.jp/abee/74
• 最初の成果報告
1975 - Personal Computing
http://mnielsen.github.io/notes/kay/Personal_Computing_1975.pdf (PDF, 乱丁注意)
• 振り返り
1993 - The Early History Of Smalltalk
http://worrydream.com/EarlyHistoryOfSmalltalk/
• 総括
2003 - “Software Engineering” an Oxymoron?
http://metatoys.org/oxymoron/oxymoron.html
まとめ
• Smalltalkは言語処理系を含む、仮想化されたGUI付きオブジェクトベースOS。
• データ構造や関数ではなく、コンピューターの再帰的定義で(PoC的側面が濃い)
• すべてがオブジェクト。処理系もオブジェクトでオブジェクトストア内に構築。
• 操作はすべてメッセージを介して行われる。疎結合。決定の遅延。
• メッセージングは非同期まで到達せず。パース、動的関数コール…と実装は自由。
• Smalltalk-76以降の現在に至るSmalltalkは、抽象データ型のスーパーセットのオブ
ジェクト指向プログラミングを限定的ながらシミュレート(切り分けが大事)
• コンセプトの理解は現存する当時の処理系の体験と相補的に進めると効率がよい。
• 分かってしまえばシンプル(だが、考え方の切り替えに苦痛やコストを伴う)
• 些細な疑問は気軽に訊いて解決し先に進む!(自力解決、完璧な理解に拘らない)

Contenu connexe

Similaire à 20200504 Smalltalkを学ぶ会 (リモート開催) - Smalltalkについて

Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Tadahiro Ishisaka
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Etsuji Nakai
 
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"Ryohei Suzuki
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回Ryuichi Ueda
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)Naoki Okino
 
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Kazuhiko Kato
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのかHibino Hisashi
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法Meiji Kimura
 
Japan it 20160707short
Japan it 20160707shortJapan it 20160707short
Japan it 20160707shortHidekazu Ikeda
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説Daisuke Nishino
 
IoT におけるシングルボードコンピュータとワンボードマイコンについて考える
IoT におけるシングルボードコンピュータとワンボードマイコンについて考えるIoT におけるシングルボードコンピュータとワンボードマイコンについて考える
IoT におけるシングルボードコンピュータとワンボードマイコンについて考えるkakakikikeke
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来増田 亨
 
自由文思考プログラミング環境における手続的機能の実装
自由文思考プログラミング環境における手続的機能の実装自由文思考プログラミング環境における手続的機能の実装
自由文思考プログラミング環境における手続的機能の実装Keisuke NAKAMURA
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開Hideki Takase
 
Open design computer project
Open design computer projectOpen design computer project
Open design computer projectIto Takahiro
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料OCHI Shuji
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜Hideki Takase
 
hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorockyuzorock
 

Similaire à 20200504 Smalltalkを学ぶ会 (リモート開催) - Smalltalkについて (20)

Ossで作成するチーム開発環境
Ossで作成するチーム開発環境Ossで作成するチーム開発環境
Ossで作成するチーム開発環境
 
Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造Dockerイメージ管理の内部構造
Dockerイメージ管理の内部構造
 
iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"iii_SGMI #5 "OOP & Design Patterns"
iii_SGMI #5 "OOP & Design Patterns"
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)
 
Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流Rubyとプログラミング言語の潮流
Rubyとプログラミング言語の潮流
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか
 
MySQLインストールのお作法
MySQLインストールのお作法MySQLインストールのお作法
MySQLインストールのお作法
 
Japan it 20160707short
Japan it 20160707shortJapan it 20160707short
Japan it 20160707short
 
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
『これからの.NETアプリケーション開発』セミナー .NET用アプリケーション フレームワーク Open 棟梁 概説
 
Python勉強会 2015-12-02
Python勉強会 2015-12-02Python勉強会 2015-12-02
Python勉強会 2015-12-02
 
IoT におけるシングルボードコンピュータとワンボードマイコンについて考える
IoT におけるシングルボードコンピュータとワンボードマイコンについて考えるIoT におけるシングルボードコンピュータとワンボードマイコンについて考える
IoT におけるシングルボードコンピュータとワンボードマイコンについて考える
 
オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
 
自由文思考プログラミング環境における手続的機能の実装
自由文思考プログラミング環境における手続的機能の実装自由文思考プログラミング環境における手続的機能の実装
自由文思考プログラミング環境における手続的機能の実装
 
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
 
Open design computer project
Open design computer projectOpen design computer project
Open design computer project
 
2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料2012 05-19第44回cocoa勉強会発表資料
2012 05-19第44回cocoa勉強会発表資料
 
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
ロボットシステムのつくりかた 〜Robot Operating Systemというアプローチ〜
 
hbstudy#6LTyuzorock
hbstudy#6LTyuzorockhbstudy#6LTyuzorock
hbstudy#6LTyuzorock
 

Dernier

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 

Dernier (10)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 

20200504 Smalltalkを学ぶ会 (リモート開催) - Smalltalkについて