狠狠撸

狠狠撸Share a Scribd company logo
CITRINE85th Smalltalk Study Meeting
CITRINE
PROGRAMMIN
G LANGUAGE第 85 回 Smalltalk 勉強会
2016-02-15
TAKANO Mitsuhiro a.k.a. @takano32
SORABITO Inc. / jus / CONBU
今日のアジェンダ
? 自己紹介
? Citrine の概要
? Citrine の特徴
? Citrine の内部
? Citrine と Smalltalk の比較
SELF-
INTRODU
CTION自己紹介
お前、誰よ
? 高野 光弘
? TAKANO Mitsuhiro
? @takano32
? おしえて!ギャル子ちゃん
? 所属
? SORABITO株式会社
? 日本UNIXユーザ会
? CONBU
お前、誰よ
? Smalltalk Developer
? 会社で使っている主言語
? 最近インフラ整備にかまけてしまっている感もあるが…
? Ruby committer
? IA-64 メンテナをしていた
? Citrine committer
? 経緯は後ほど紹介← NEW
好きな分野とか
? 電子工作
? 仮想化機構
? 組み込み向け Smalltalk VM
? Web サービス
? 電子商取引サイト
? インフラストラクチャ
? サービスプラットフォーム
? ネットワーク
? 言語処理系
今日は言语処理系
CITRINEProgramming Language
ABOUT
CITRINECitrine とは
CITRINE とは
? 英辞郎 on the Web より
公式サイトより
? Citrine is an easy-to-learn general purpose programming language
for UNIX?-like operating systems. The Citrine Programming
Language focuses on simplicity and emphasizes maintainability
through readability. Simplicity is achieved by syntactical and
conceptual minimalism.
? Citrine は習得が簡単な UNIX 系 OS 向けに作られた汎用プロ
グラミング言語です。 Citrine は簡潔さや可読性を重視したこ
とによる保守性を主軸とした言語です。必要最小限にとどめ
た文法やコンセプトによって簡潔さを実現しています。
习うより惯れる
FEATUR
ES OF
CITRINECitrine の特徴
CITRINE の特徴
? すべてがオブジェクト
? Smalltalk っぽいメッセージ引数
? プロトタイプのオブジェクト指向
? DSL や API に便利なマジックメソッド
? AST にコンパイルすることができる
? ガベージコレクションを搭載
すべてがオブジェクト
? リテラルのオブジェクト
? Nil
? Boolean
? Number
? String
? Block
? その他のオブジェクト
? 組み込みの Object インスタンスをコピーして作成
? Object オブジェクトに new というメッセージを送信
すべてがオブジェクト
? Nil
? Pen は World という特殊なオブジェクトのプロパティ
? 組み込みのオブジェクト
? 標準出力などへの出力機能
(Nil = Nil) ifTrue: { Pen write: 'Nil is Nil!'.}.
Nil is Nil!
(Nil isNil) ifTrue: { Pen write: 'Nil isNil is True!'.}.
Nil isNil is True!
すべてがオブジェクト
? Boolean
? True と False
? 組み込みのオブジェクト
? とても Smalltalky な字面
? `ifTrue:` メッセージにブロック引数
? ブロックについては後述
True ifTrue: { Pen write: 'True is True'.}.
True is True
すべてがオブジェクト
? Number
? 数字に関係するメッセージが定義されている
? 反復などの記述に便利なメッセージ
? 文字列のオブジェクトを返却するメッセージ
? など
5 times: { Pen write: 'ho'. }.
hohohohoho
すべてがオブジェクト
? String
? 文字列を表現するオブジェクト
? `trim`, `ltrim`, `rtrim` などのメッセージをもつ
Pen write: ('title' asciiUpperCase1st).
Title
すべてがオブジェクト
? Block
? `{` や `{` ではじまり `}` で閉じた箇所
? すでに使ってました
? `{` や `{` の使い分け
? `{` は引数なしのブロック
? `{` は引数ありのブロック
? 例 fizzbuzz.ctr
SMALLTALK っぽいメッセージ引数
True ifTrue: { Pen write: 'True is True'.}.
5 times: { Pen write: 'ho'. }.
プロトタイプのオブジェクト指向
Animal := Object new.
Animal on: 'eat' do: {
Pen write: 'munch! munch!'.
}.
dog := Animal new.
dog eat.
fruits := Array <- 'apples' ; 'oranges' ; 'bananas'.
fruits at: 0.
fruits at: 1.
fruits put: ‘lemmons' at: 1.
マジックメソッド
? PHP に触発されて命名されたと思われる
? 製作者の圧倒的 PHP 力
? see also PHP: マジックメソッド - Manual
? 要するにリフレクションの仕組み
マジックメソッド
? 現在は `respondTo:` という系列のメソッドのみ
? PHP では `__invoke()` に相当
? Smalltalk では `#doesNotUnderstand:` の再定義相当
マジックメソッドの利用例
? いまいち有り難みが分からない利用例
? 他の言語での DSL や API の実装を参考にするとよいです
echo := Object new.
echo on: 'respondTo:' do: {
sound |
2 times: { Pen write: sound. }.
}.
echo ho!. #prints ho!ho!
マジックメソッド
? 公式サイトより
? You can make objects respond to arbitrary messages, in some
languages this is known as 'magic methods’.
? いくつかの言語ではマジックメソッドと呼ばれている???
PHP-ER にしか通じ
ない
AST にコンパイルすることができる
? AST とは
? Abstract Syntax Tree
? Wikipedia から引用
? 抽象構文木( abstract syntax tree 、 AST )とは、通常の
構文木(具象構文木、あるいは parse tree とも言う)か
ら、言語の意味に関係ない情報を取り除き、意味に関係
ある情報のみを取り出した(抽象した)木構造のデータ
構造である。
结局は何なの?
AST の利便性
? 意味的な木構造を作成
? (よくある言語の)括弧などの字句解析器の支援に使われているようなもの
は排除する
? よくある使われどころ
? マクロの実現
? 部分木を別の箇所に接ぎ木したり、部分的な置換をすることでダイナミッ
クに
? 最適化の役に立つ
? 新たに字句解析器や構文解析器を使わなくて良い
? AST の構造を変えることで処理を早くする仕組みは幅広く使われている
? 文献が多くてやりやすい
PARSER.C を読みま
しょう
PARSER.C …を読み解くのはツラいです
? 参考図書
? コンパイラ
? 入門
? コンパイラの構成と最適化
? 入門 + よく使う技法
? コンパイラ―原理?技法?ツール
? よく使わない技法もふくめて載っているバイブル
? 「ドラゴンブック」
ガベージコレクション
? system.c で頑張っています
? あまり意味をなしていない気がしています
? 理由は後述
INSIDE
THE
CITRINECitrine の内部
CITRINE の内部
? 実はコントリビュータになっています
? コミッタよりも権限が強い
? Git の使い方を補助しています
? 作成者が GitHub をよく理解していない
? コントリビュータになった経緯
? 経緯となった問題の解決
CITRINE の闇
? else if が大好きすぎる
? マジックナンバーが突然でてくる
? ctr_build_number_from_string
? メモリの管理が雑すぎてガベージコレクションいらない
? $ git grep malloc | wc -l # => 162
? $ git grep free | wc -l # => 119
? 圧倒的 malloc 力
デモ:安全な
MALLOC と FREE
の定番を書く
SMALLT
ALK
AND
CITRINESmalltalk と Citrine の比
較
すみません
この章不要でした
この章不要でした
それだけではあまりにアレなので
? Boolean
? `ifTrue:` `ifFalse:` のみ
? `ifTrue:ifFalse:` や `ifFalse:ifTrue:` を実装してみた
? boolean.ctr
? どんどん Smalltalk っぽくしていくことができます
CONCL
USION結論
CITRINE とは何なのか
? たしかに Smalltalk に似ている言語
? まだまだ成長過程
? PHP と Perl に嫌気がさした PHP-er が作者
? C言語に慣れていないのに書いてる
? バグがあってもくじけない
? 気長にみていこうと思います
? 笑えるコミットとかあります
? https://github.com/gabordemooij/citrine/commit/7741df969f080ae8897b7bbafbeb
? https://github.com/gabordemooij/citrine/pull/31
THANK
YOU
FOR
LISTENI
NGちょっとしたお知らせ
イベント告知
? すしルート
? SORABITO 株式会社 高野 光弘 様
? Ruby コミッタ。日本 UNIX ユーザ会理事。 CONBU コアメンバー。
? 大学修了後、大手電機メーカーにてブレードサーバ開発、特に仮想化機構の開発に携わる。その後、 Web 系の企業に転職する。社
外向けには国内最大規模のインフラストラクチャの管理、社内向けには開発環境や版管理基盤 GitHub:Enterprise メンテナンス、大
規模通知システムの開発に従事。現在は大学時代にソフトウェアハウスでアルバイトしてい
たときに出会った師匠に誘われ SORABITO 株式会社に転職。建機売買のシステ
ム ALLSTOCKER.com の構築に携わっている。日本円にして 2 億円の出品など
も存在しており、驚きである。このようにして、貧民系組み込み開発から富豪系
Web サービス開発までのさまざまな経験を経て寿司も好むようになった。
? 最近はどうやら Smalltalk で寿司を食べている。
? 2 億円で食べられる寿司の量は想像できない…
まだ発表内容が決まってません
? 一瞬で思いついたネタ
? 5 インチベイのドライブの中に寿司いれといて「へい、お
まち!」を音声認識したらおもむろに eject するっていう
ネタ
? ドライブついてるマシンを渋谷まで搬入するのが地獄
? 光学ドライブつき MacBook ならのある
? 搬入できそう
? だが、ペラペラの寿司が必要…
? まだまだ検討の余地がある…
ご清聴ありがとうございました

More Related Content

What's hot (11)

PDF
Groovyで学ぶプロセス代数 #jjug
kyon mm
?
PDF
笔贬笔の関数実行とその计测
shinjiigarashi
?
PDF
「やっは?り怖かったPerl」In Kichijoji.pm #2
民人 青山
?
PDF
PECL を数えてみた
y-uti
?
PDF
PECL operator で演算子オーバーロード
y-uti
?
PDF
Windows で拡張モジュールをビルドしてみた
y-uti
?
PDF
笔丑辫勉强会资料20090629
Takako Miyagawa
?
PPT
第1回厂贰勉强会(080302)
柴田 篤志
?
PDF
Python3 プログラミング勉強会
Tetsuya Morimoto
?
PDF
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
?
PDF
2015/08/08 第8回G-Study発表資料-部屋と自宅サーハ?と私
Yuta Hayakawa
?
Groovyで学ぶプロセス代数 #jjug
kyon mm
?
笔贬笔の関数実行とその计测
shinjiigarashi
?
「やっは?り怖かったPerl」In Kichijoji.pm #2
民人 青山
?
PECL を数えてみた
y-uti
?
PECL operator で演算子オーバーロード
y-uti
?
Windows で拡張モジュールをビルドしてみた
y-uti
?
笔丑辫勉强会资料20090629
Takako Miyagawa
?
第1回厂贰勉强会(080302)
柴田 篤志
?
Python3 プログラミング勉強会
Tetsuya Morimoto
?
言語処理するのに Python でいいの? #PyDataTokyo
Shuyo Nakatani
?
2015/08/08 第8回G-Study発表資料-部屋と自宅サーハ?と私
Yuta Hayakawa
?

Similar to Smalltalk との比較で深まる Citrine の理解 (20)

PDF
Alluren of prototype-based OOP
azuma satoshi
?
PDF
2011年10月21日
nukaemon
?
PDF
TAM 新人ディレクター システムスキルアップ プログラム 第7回 「プログラム言語」
(株)罢础惭
?
ODP
Introduction of Python
Tomoya Nakayama
?
PPT
Start!! Ruby
mitim
?
PDF
Clojure
Uehara Junji
?
ODP
フ?ロク?ラミンク?言语颁测补苍の绍介
baban ba-n
?
PDF
JavaWorld Day 2009 Scala
Tomoharu ASAMI
?
PDF
?搁耻产测とプログラミング言语の潮流
Kazuhiko Kato
?
PDF
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
?
PPTX
Ll tiger clojure
Toshiaki Maki
?
PDF
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
?
PDF
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
Shoot Morii
?
PDF
闯补惫补开発の强力な相棒として今すく?使える骋谤辞辞惫测
Yasuharu Nakano
?
PDF
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
?
PDF
人類の役に立たないDSL、そしていつからRubyか?最高の言語た?と錯覚してた? with PHP
Kenta USAMI
?
PDF
Reading Self-descriptive FizzBuzz
Hiroyuki Morita
?
PPTX
Css2014 ruo ando_2014-10-23-01
Ruo Ando
?
KEY
How wonderful to be (statically) typed ?型が付くってスバラシイ?
Hiromi Ishii
?
Alluren of prototype-based OOP
azuma satoshi
?
2011年10月21日
nukaemon
?
TAM 新人ディレクター システムスキルアップ プログラム 第7回 「プログラム言語」
(株)罢础惭
?
Introduction of Python
Tomoya Nakayama
?
Start!! Ruby
mitim
?
Clojure
Uehara Junji
?
フ?ロク?ラミンク?言语颁测补苍の绍介
baban ba-n
?
JavaWorld Day 2009 Scala
Tomoharu ASAMI
?
?搁耻产测とプログラミング言语の潮流
Kazuhiko Kato
?
PFIセミナー 2013/02/28 「プログラミング言語の今」
Preferred Networks
?
Ll tiger clojure
Toshiaki Maki
?
関数型言語テイスティング: Haskell, Scala, Clojure, Elixirを比べて味わう関数型プログラミングの旨さ
Kent Ohashi
?
セキュリティ&プログラミングキャンプ2009参加レポート (PDF版)
Shoot Morii
?
闯补惫补开発の强力な相棒として今すく?使える骋谤辞辞惫测
Yasuharu Nakano
?
Code Reading at Security and Programming camp 2011
Hiro Yoshioka
?
人類の役に立たないDSL、そしていつからRubyか?最高の言語た?と錯覚してた? with PHP
Kenta USAMI
?
Reading Self-descriptive FizzBuzz
Hiroyuki Morita
?
Css2014 ruo ando_2014-10-23-01
Ruo Ando
?
How wonderful to be (statically) typed ?型が付くってスバラシイ?
Hiromi Ishii
?
Ad

More from TAKANO Mitsuhiro (8)

PPTX
平成生まれのための MINIX 講座
TAKANO Mitsuhiro
?
PPTX
Learn Languages 2017 従来言語て?理解する次世代言語の概念 #ll2017jp
TAKANO Mitsuhiro
?
PDF
Pharo 6 最新情報 | 第101回Smalltalk勉強会
TAKANO Mitsuhiro
?
PDF
型、ついてますか? - 型の本質を振り返る -
TAKANO Mitsuhiro
?
PDF
CONBU API の開発
TAKANO Mitsuhiro
?
PDF
インターネットにおける悪評 - 高野光弘編
TAKANO Mitsuhiro
?
PDF
魁!!インターネット塾
TAKANO Mitsuhiro
?
KEY
Brainfush
TAKANO Mitsuhiro
?
平成生まれのための MINIX 講座
TAKANO Mitsuhiro
?
Learn Languages 2017 従来言語て?理解する次世代言語の概念 #ll2017jp
TAKANO Mitsuhiro
?
Pharo 6 最新情報 | 第101回Smalltalk勉強会
TAKANO Mitsuhiro
?
型、ついてますか? - 型の本質を振り返る -
TAKANO Mitsuhiro
?
CONBU API の開発
TAKANO Mitsuhiro
?
インターネットにおける悪評 - 高野光弘編
TAKANO Mitsuhiro
?
魁!!インターネット塾
TAKANO Mitsuhiro
?
Ad

Recently uploaded (9)

PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PPTX
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
PPTX
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
PPTX
色について.pptx .
iPride Co., Ltd.
?
PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
Vibe Codingを始めよう ?Cursorを例に、ノーコードでのプログラミング体験?
iPride Co., Ltd.
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
Forguncy 10 製品概要資料 - ノーコードWebアプリ開発プラットフォーム
フォーガンシー
?
勉強会_ターミナルコマント?入力迅速化_20250620. pptx. .
iPride Co., Ltd.
?
色について.pptx .
iPride Co., Ltd.
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?

Smalltalk との比較で深まる Citrine の理解