SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
今からでも遅くない
Smalltalk入門
Pharoではじめよう!
Smalltalk忘年会2017
合同会社ソフトウメヤ 梅澤真史
Borderless
「垣根がない」
いいところ1
プログラミング言語の壁
▶ アプリを使う人
▶ アプリケーションのユーザ
▶ アプリを作る人
▶ プログラマ
▶ 言語を作る人
▶ プログラミング言語開発者
Smalltalkには垣根が無い
「オブジェクトにメッセージを送る」ことで、
アプリを作るのみならず、
プログラミング言語そのものを変更してい
くことができる
「この言語にはこれがないから…」=>「だったら作ればいいじゃん?」
Simple
「シンプル」
いいところ2
ミニマリズムの言語
▶ 予約語は 6つのみ
▶ nil, true, false, self, super, thisContext
▶ あとは「オブジェクトにメッセージを送る」
「こんなふうに短く書けます」的なシンタックスシュガーはない
安易ではなく、簡潔
少ないルールの組み合わせによって何でも作っていける
Direct「直接つかめる」
いいところ3
動いているオブジェクトに直接触れる
▶ メモリにうかんだオブジェクトをメッセージ
送信で変容させていくスタイル
▶ 常にデバッガの中でプログラムを作っているようなもの
Smalltalker的には、テキストエディタに書かれたプログラムは、「た
だの文字列」で死んでいる
「動いてないし、ある部分を選択してメッセージを送れない」
自由の世界へ
▶ Kent Beckさんの Facebookでの記事
▶ http://www.facebook.com/notes/kent-beck/design-spa
ce/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”
▶ 「知れば知るほど、自由を感じる。狭い一方通行の廊下
に押し込まれて進むのではなく、モンタナの空の下を闊
歩するようなものだ」
Pharoとは
● OSSのSmalltalk処理系で最もポピュラー、開発も活発
○ https://pharo.org
● VMも高速
(https://www.slideshare.net/pharoproject/pharo-vm-performance)
● イメージはWin, Mac, Linuxでバイナリコンパチブル
● ライブラリも豊富 (Catalog Browserですぐに入る)
Zeroconf Scriptで入れてみる
● curlやwgetで気軽に入れる
○ http://get.pharo.org
curl get.pharo.org/64/61+vm | bash
wget -O- get.pharo.org/64/61+vm | bash
● 64部分がないと32ビット版になる(が、おすすめしない)
pharo-ui で起動
./pharo-ui Pharo.image
フォントを日本語に
● デスクトップのクリックでメニューがでる
○ System -> Settings で Settings Browserが開く (Cmd + os)
○ Search for: の検索窓に'font'と打つ
○ Use Free Type をoffしてonにするとフォントを読む
○ Standard font -> Default の箇所で日本語のフォントを指定し
て"Force All"のボタンを押す
ライブラリを入れる
● Tools -> Catalog Browser
○ 検索窓に'soup'と入れてみる
■ 絞り込まれるので
選択して右クリックし
"Install stable version"
● Soup
○ スクレイピング用のHTMLパーサ
■ PythonのBeautiful Soupっぽいもの
特定のリンクを抽出する
● Playgroudを開く (Cmd + ow)
○ Smalltalkコードを書いて評価するためのツール
● http://swikis.ddo.jp/squeak の勉強会関連リンクを取り出す
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
((soup // 'a') select: [ :each | each text beginsWith: '第'])
collect: [ :each | each text -> (each @ 'href')]
● テキスト選択して右クリックで "Inspect it"
○ あるいは Cmd + i
実行結果は...
画像をまとめて取得し保存
soup := Soup fromUrl: 'http://swikis.ddo.jp/squeak'.
baseUrl := 'http://swikis.ddo.jp' asUrl.
dir := './downloads' asFileReference ensureCreateDirectory.
imageUrls :=((soup // 'img') @ 'src') collect:
[:each | baseUrl / each ].
imageUrls asSet do:
[:each |each saveContentsToFile: dir / each file].
● "Do it" あるいはCmd + d
実行結果は...
Smalltalkの場合、文法よりも体験
● 早わかりSmalltalk
● Smalltalk基本文法編
● Smalltalk入門 (ドットインストール)
● 難しくはないが異質
● 習うよりも慣れろ
● Smalltalk勉強会に参加すると良いことがあるかも
まとめ
● Smalltalkは古くて新しい不思議な言語
○ 味わっておいて損はない
■ 妥協しないピュアなオブジェクト指向
■ オブジェクトがうごめくライブな環境
● まずはPharoがオススメ
○ 開発が活発
○ 実プロジェクトも多い

Mais conteúdo relacionado

Mais procurados

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
 

Mais procurados (20)

オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来オブジェクト指向プログラミングの現在・過去・未来
オブジェクト指向プログラミングの現在・過去・未来
 
エラーハンドリング
エラーハンドリングエラーハンドリング
エラーハンドリング
 
GoでMinecraftっぽいの作る
GoでMinecraftっぽいの作るGoでMinecraftっぽいの作る
GoでMinecraftっぽいの作る
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っているやはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021C#メタプログラミング概略 in 2021
C#メタプログラミング概略 in 2021
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門
 
Marp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライドMarp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライド
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解Spring Day 2016 - Web API アクセス制御の最適解
Spring Day 2016 - Web API アクセス制御の最適解
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 

Semelhante a 今からでも遅くないSmalltalk入門

言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
atmarkit
 

Semelhante a 今からでも遅くないSmalltalk入門 (12)

Herlockサービス紹介
Herlockサービス紹介Herlockサービス紹介
Herlockサービス紹介
 
20200803 プログラミングの基礎
20200803 プログラミングの基礎20200803 プログラミングの基礎
20200803 プログラミングの基礎
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
 
MTプラグイン入門以前
MTプラグイン入門以前MTプラグイン入門以前
MTプラグイン入門以前
 
C#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnetC#でアプリを作ってみよう! #ngtnet
C#でアプリを作ってみよう! #ngtnet
 
Weekend Androidのススメ
Weekend AndroidのススメWeekend Androidのススメ
Weekend Androidのススメ
 
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフトおばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
 
0から教える簡単アプリ開発
0から教える簡単アプリ開発0から教える簡単アプリ開発
0から教える簡単アプリ開発
 
Cap01
Cap01Cap01
Cap01
 
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
iアプリつくろうぜ!~20101020 DevLOVE Android勉強会~
 
Interop2017
Interop2017Interop2017
Interop2017
 

Mais de Masashi Umezawa

Mais 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入門