Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Purely Functional Smalltalk-72
Search
Minori Yamashita
December 27, 2012
Programming
1
10k
Purely Functional Smalltalk-72
SchemeのマクロでSmalltalk-72をシミュレートします。それを踏まえて言語デザインについて考えます。
Minori Yamashita
December 27, 2012
Tweet
Share
More Decks by Minori Yamashita
See All by Minori Yamashita
Cloxp @ Smalltalk Meetup
ympbyc
0
310
Real World Objects
ympbyc
2
3.3k
ClojureScriptで変わるクライアントサイドWeb
ympbyc
0
960
LittleSmallscript
ympbyc
2
1.5k
Other Decks in Programming
See All in Programming
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
200
エージェント開発初心者の僕がエージェントを作った話と今後やりたいこと
thasu0123
0
250
AI 開発合宿を通して得た学び
niftycorp
PRO
0
130
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
110
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions
handlename
0
200
Unity6.3 AudioUpdate
cova8bitdots
0
130
The Ralph Wiggum Loop: First Principles of Autonomous Development
sembayui
0
3.7k
ベクトル検索のフィルタを用いた機械学習モデルとの統合 / python-meetup-fukuoka-06-vector-attr
monochromegane
2
450
Claude Code の Skill で複雑な既存仕様をすっきり整理しよう
yuichirokato
1
390
Understanding Apache Lucene - More than just full-text search
spinscale
0
120
Ruby and LLM Ecosystem 2nd
koic
1
840
Featured
See All Featured
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
9.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
390
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
83
Designing for humans not robots
tammielis
254
26k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
830
Balancing Empowerment & Direction
lara
5
940
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
640
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Test your architecture with Archunit
thirion
1
2.2k
Transcript
Purely Functional Smalltalk-72 Dec 2012 Minori Yamashita
自己紹介 山下実則(19) • ハンドル: ympbyc ◦ twitter, github …etc •
代々木の12階でWebとスマホやってます。 • Available for hire 9月の合同勉強会でLittleSmallscriptの発表をさせ て頂きました。今回もよろしくです。
Smalltalk-72
コード例 Smalltalk-72 Manualより
コード例 Smalltalk-72 Manualより
goto ☞ox←mx ☞oy←my
• The first real Smalltalk ◦ -71は仲間内だけ? • 記号がいっぱい •
名前呼び出し。レシーバがトークンを食いながら 実行されて行く • クラスベースオブジェクト指向 ◦ クラスを関数としても呼び出せる ◦ 継承はない (-76から) • 本来は関数型的な思想 ◦ 代入dis • Lispの特殊形式をdisりながら作られた ◦ 全てメッセージングなのが理想 概要だけ…
LispのマクロでSmalltalk-72
コード例
コード例 Smalltalk-72 Manualより
(☝ _ )☝ SO
(☞ _ )☞ COOL (☝ _ )☝ SO
⇑
☞x←y ☞x←:.
(☞ x ← : . (+ x 2)) ☟ (lambda
(x) (+ x 2)) 定義側 ((foo 'bar) 5) ;=> 7 呼び出し側 これは、 (foo 'bar 5) と書きたい。後で出てきます。
None
to
to WAT DA FSCK IS Z
Z Combinator
None
to ⇒!?!?←#☞⇑!???!
(to animal (name) ( 'name ⇒ name '())) (define (animal
name) (Z (lambda (SELF) (lambda (⇒) (if (equal? 'name ⇒) name '()))))) ☟ メソッド名が束 縛される
コード例2
デモ
ここからが本題
アラン ケイは言いました
"take the hardest and most profound thing you need to
do, make it great, and then build every easier thing out of it" Alan Kay 1993
1970年、関数は弱かった。 • LISPしかない • ダイナミックスコープ • 先行評価 • 特殊形式に依存していた
そこでケイは 関数を"Make it great"するのではなく、 "The hardest and most profound thing"
として、オブジェクトとメッセージングを選ん だ。 Smalltalkでこれは成功した。
時は流れ
オブジェクト指向言語は肥大化した。 • C++, Java, Ruby ... • 無節操なAlgol風構文追加 • 副作用ベース
• オブジェクト指向誕生の動機が全く尊 重されていない
It is unfortunate that much of what is called "object-oriented
programming" today is simply old style programming with fancier constructs. Many programs are loaded with "assignment-style" operations now done by more expensive attached procedures. Alan Kay 1993
いっぽうそのころ
関数が強くなっていった! • クロージャ(レキシカルスコープ) • メッセージパッシング(Scheme) • 遅延評価 • カリー化 •
参照透明(副作用は最小) • The most profound thingとして十分 な機能を獲得した
今、Take the most profound thing and make it greatしたらどうなるの か。
一例
Nadeko
遅延評価とカリー化とシンプルなオブジェクトシス テムを積んだ純粋関数型言語. S式を使うけどマク ロはなし。 構文はラムダ抽象と関数定義と関数呼び出しの3 つだけ!
遅延評価とカリー化とオブジェクト指向風メッセー ジングを積んだ純粋関数型言語. S式を使うけどマ クロはなし。 構文はラムダ抽象と関数定義と関数呼び出しの2 つだけ! Haskell, Io Smalltalk Lisp
Smalltalk-72風 使っているのは関 数だけ!
Actor
後置風関数 - リストが高階関数 語順がSmalltalkと同じになる 無限リスト 部分適用
コミット歓迎
おしまい!
The Early History of Smalltalk http://www.esug. org/data/HistoricalDocuments/Smalltalk80/Smalltalk History.pdf Smalltalk-72 Instruction
Manual http://www.textfiles. com/bitsavers/pdf/xerox/alto/Smalltalk72_Manual. pdf Nadeko https://github.com/ympbyc/Nadeko 参考