SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
メタプログラミングと
Ruby
電子認証局市民ネットワーク福岡
佐塚秀人
2014/3/29
1
近所の小学生
少年A: ば〜か!
少年B: ば〜かって言うやつが馬鹿なんだぞ!
2014/3/29
2
メタプログラマー
プログラムつくるのがプログラマー
プログラムをつくるプログラムをするプログラマー
2014/3/29
3
メタって? Meta?
2014/3/29
4
メタ-なんとか
 メタ(meta-)とは、「高次な-」「超-」「-間
の」「-を含んだ」「-の後ろの」等の意味の接頭語。
ギリシャ語から。
 コンピュータの世界ではよく出てくる言葉なんだ
 メタ-言語
 メタ-文法
 メタ-データ
 メタ-プログラミング
2014/3/29
5
メタプログラミング
 プログラムする機能をプログラムする
 プログラムを生成するようなプログラムをする
 プログラムを生成しながら動くプログラムをつくる
 プログラミング言語の機能をプログラムする
2014/3/29
6
Myプログラミング
 書きたいように書けるプログラミング言語
 より簡潔に書ける文法や機能
 目的にあった記法 DSL
 組み込み言語
2014/3/29
7
プログラムを動かすしくみを
自分で作る
 コンパイラ
 インタプリタ
これは作るのはけっこうたいへんだ
既存の言語をカスタマイズ…
 マクロ・プロセッサ
 トランスレータ
 コンパイラ・コンパイラ(パーザジェネレータ)
2014/3/29
8
Cのプリプロセッサ
Cのプリプロセッサは簡単だがいろいろできる?
#define begin {
#define end ;}
これでC言語をPascal風に記述できる
begin
x = 10;
y = 20
end
{
x = 10;
y = 20;
}
2014/3/29
9
昔からUnixにある道具
 m4 -- マクロプロセッサ
 yacc, lex -- コンパイラ・コンパイラ
C言語を変換したり、加工したりする道具
C++言語はもともとはC言語へのトランスレータだった
2014/3/29
10
LISPを知ってますか?
 世界で2番めに作られた高級言語
 1958年、ジョン・マッカーシー
 プログラムもデータもすべてリスト構造で表現
 インタプリタ言語
プログラムも内部でリスト構造をしている
プログラムをプログラムで操作し、すぐ実行できる
メタプログラミングの世界へ!
2014/3/29
11
LISPプログラム
2014/3/29
12
defmacro
(defmacro revdo (&rest lis)
(revserse lis)
)
> (revdo 1 2 3 +)
6
実行前にプログラムの構造を自由に変更できる
※ただし、リスト表現の範囲だけどね?
2014/3/29
13
インタプリタ言語は素敵
 解釈機能自体をプログラミングできるようにできる
 自分自身の機能を変更できる
 メタプログラミングで自由自在!
 メタプログラミングの世界へ!
2014/3/29
14
関数型言語
 関数を組みわせるプログラミングモデル
 高階関数
 関数自身引数とする関数
 関数を組み合わせる機能を関数で記述できる
 関数 = プログラムのパーツ
 プログラムする機能をプログラムできる!
 メタプログラミングの世界へ!
2014/3/29
15
オブジェクト指向言語
 オブジェクト指向言語の元祖:Smalltalk80
 クラスとインスタンス
 クラスはオブジェクトのひな形
 Smalltalk80ではクラスもオブジェクト
 クラスをダイナミックに操作できる
 インタプリタ自体がオブジェクト指向で作られている
 メタプログラミングの世界へ!
2014/3/29
16
Ruby
 インタプリタ言語
 関数型言語の機能
 Smalltak80を継承するオブジェクト指向言語
 メタプログラミングならRubyでしょ!
2014/3/29
17
Rubyを大改造?
 Ruby on Rails
 メタプログラミングを駆使したフレームワーク
 言語の基本機能を積極的に改変する
 Ruby on Railsの記法(文法?)の実現
2014/3/29
18
RubyでDSL
 DSL:ドメイン特化言語
 Ruby+メタプログラミングで実現
 組み込み言語をRubyで…
 mRuby+メタプログラミング…
 組み込みDSLで簡単プログラミング
2014/3/29
19
やわらかRuby
 オープンクラス/モンキーパッチ
 柔軟でゆる〜い文法
 イテレータを基本とした制御構造
 手続きブロック
 関数表現(λ式)
2014/3/29
20
オープンクラス
 クラスの定義をいつでも追加・変更可能
 クラス機能に自由にパッチ(モンキーパッチ)
 特異クラス
2014/3/29
21
メソッド?コマンド?宣言?
foo(a, b, c)
は
foo a, b, c
と書いてもいい
ご自由に解釈を…
文法上の宣言と思っていたものが、実はメソッド呼び
Ex. private宣言
2014/3/29
22
好きに作ろう繰り返し
 イテレータで自由につくる繰り返し
 timesの機能(kai)はこんな風に追加できてしまう
class Fixnum
def kai
i = 0
while i < self do
yield i
i += 1
end
end
end
2014/3/29
23
クラスもメソッドも
 クラスはClassクラスのメソッドなので
MyClass = Class.new(MySuperClass) { … }
 メソッドをつくるメソッド
def mymethod(x) { … }
は
define_method(:mymethod) {|x| … }
と書けるし
define_method :mymethod do |x| … end
でもいい
2014/3/29
24
Rubyの仕組みはおもしろい
 どこからがメタプログラミングなのか?
 RubyはRubyでプログラムされている。
 Rubyはかなり自由に手を入れられる。
 Ruby言語がRubyではない。
2014/3/29
25
DSLの方針
 構文はイテレータ
 一括定義は関数、ブロック、
2014/3/29
26
mRubyでメタプログラミング
 Rubyはかなり大きい
 ちいさなRuby、mRuby
 組み込み言語として使えるRuby
 C言語じゃなくてmRubyを使う理由
 メタプログラミングが可能だから…
2014/3/29
27
こんな本が読まれているよう
です。
2014/3/29
28
メタプログラミングとRuby

Más contenido relacionado

Destacado

)の品格
)の品格)の品格
)の品格emasaka
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
MATLABモデルご提供開始
MATLABモデルご提供開始MATLABモデルご提供開始
MATLABモデルご提供開始Tsuyoshi Horigome
 
TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0Toyoki Hashimoto
 
skiplist&overlay-111030
skiplist&overlay-111030skiplist&overlay-111030
skiplist&overlay-111030Mikio Yoshida
 
挿入ソート
挿入ソート挿入ソート
挿入ソートs5yata
 
論文紹介:The wavelet matrix
論文紹介:The wavelet matrix論文紹介:The wavelet matrix
論文紹介:The wavelet matrixYuki Igarashi
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementationMITSUNARI Shigeo
 
木をめぐる混乱について
木をめぐる混乱について木をめぐる混乱について
木をめぐる混乱についてRyuichi Tanabe
 
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data MatricesScalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data MatricesYasuo Tabei
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今Yuki Igarashi
 
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナーKoichi Hamada
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界Preferred Networks
 

Destacado (18)

)の品格
)の品格)の品格
)の品格
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
Rubyの黒魔術
Rubyの黒魔術Rubyの黒魔術
Rubyの黒魔術
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
MATLABモデルご提供開始
MATLABモデルご提供開始MATLABモデルご提供開始
MATLABモデルご提供開始
 
TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0TREE dynamics Program slide ver.1.0
TREE dynamics Program slide ver.1.0
 
skiplist&overlay-111030
skiplist&overlay-111030skiplist&overlay-111030
skiplist&overlay-111030
 
挿入ソート
挿入ソート挿入ソート
挿入ソート
 
論文紹介:The wavelet matrix
論文紹介:The wavelet matrix論文紹介:The wavelet matrix
論文紹介:The wavelet matrix
 
Wavelet matrix implementation
Wavelet matrix implementationWavelet matrix implementation
Wavelet matrix implementation
 
木をめぐる混乱について
木をめぐる混乱について木をめぐる混乱について
木をめぐる混乱について
 
Hash Tree
Hash TreeHash Tree
Hash Tree
 
Nazoki
NazokiNazoki
Nazoki
 
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data MatricesScalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
Scalable Partial Least Squares Regression on Grammar-Compressed Data Matrices
 
.NET Coreとツール類の今
.NET Coreとツール類の今.NET Coreとツール類の今
.NET Coreとツール類の今
 
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
「樹木モデルとランダムフォレスト-機械学習による分類・予測-」-データマイニングセミナー
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 

Último

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 

Último (7)

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 

メタプログラミングとRuby