22
@huydx CA15新卒勉強会

CA15卒勉強会 メタプログラミングについて

  • Upload
    huy-do

  • View
    160

  • Download
    4

Embed Size (px)

Citation preview

Page 1: CA15卒勉強会 メタプログラミングについて

@huydx CA15新卒勉強会

Page 2: CA15卒勉強会 メタプログラミングについて

今日はマニアックじゃない話を

Page 3: CA15卒勉強会 メタプログラミングについて

めたぷろ

Page 4: CA15卒勉強会 メタプログラミングについて
Page 5: CA15卒勉強会 メタプログラミングについて

インターネット

“write code that write code”

Page 6: CA15卒勉強会 メタプログラミングについて

インターネット

“ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジッ

クによってプログラミングを行う方法”

Page 7: CA15卒勉強会 メタプログラミングについて

日本語が難しい。。。

Page 8: CA15卒勉強会 メタプログラミングについて

めたぷろはコード生成(Code generation)

- コンパイル時

- マクロ (C,C++)

- テンプレート (C++)

- Annotation (Java) - ランタイム

- Reflection (Java/Scala/C#) - method_missing (Ruby)

Page 9: CA15卒勉強会 メタプログラミングについて

めたぷろの代表言語だと LISP

Page 10: CA15卒勉強会 メタプログラミングについて
Page 11: CA15卒勉強会 メタプログラミングについて

マクロ系

マクロによりコードが短くなるが 注意しないと不具合も発生しやすい

Page 12: CA15卒勉強会 メタプログラミングについて

テンプレート系

情報をコンパイラーから取得するジェネリックプログラミングのためのもの

コードがよみづらい。。コンパイル時間が長くなる

Page 13: CA15卒勉強会 メタプログラミングについて

Annotation系

マクロと同じ感じ リッチな処理ができる

Page 14: CA15卒勉強会 メタプログラミングについて

Reflection系

ランタイムでクラス情報取得 パーフォーマンスの問題 ジェネリックと相性悪い

ユースケース: Logging, Exception...

Page 15: CA15卒勉強会 メタプログラミングについて

method missing系

メソッドが見つからないときに処理をフック

RubyScala

メソッドをランタイムで作れる (ruby#send,

scala#invoke)

パーフォーマンス問題バグのときコードをGrepできないwww

Page 16: CA15卒勉強会 メタプログラミングについて

Quineプログラミング- めたぷろの特別な形式

- プログラムのソースコードを自分で出力

Page 17: CA15卒勉強会 メタプログラミングについて

https://github.com/mame/quine-relay

Page 18: CA15卒勉強会 メタプログラミングについて
Page 19: CA15卒勉強会 メタプログラミングについて

インターネット

“めたぷろ要らなくない”

Page 20: CA15卒勉強会 メタプログラミングについて

コードがDRYに!

Page 21: CA15卒勉強会 メタプログラミングについて

めたぷろ最高!

Page 22: CA15卒勉強会 メタプログラミングについて

ご清聴ありがとうございます