Upload
yuya-takeyama
View
2.750
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
自己紹介•@yuya_takeyama
•LAMP でお仕事
•メタラー (Black Sabbath, 聖飢魔II, Eyehategod)•Openpear でライブラリ公開してます•\Text\Ngram•HTTP_Parallel•Cache_Casual
DSL?
DSLDomain (ドメイン)
Specific (特化)
Language (言語)
特定の問題領域に注目し
限られた表現を持つ言語 Domain Specific
Languages(Martin Fowler)
DSLの例
•SQL (データベース操作)•正規表現(パターンマッチ)•Rake (ビルドの自動化)
PHP だとどうなる?
DSL としては構文が冗長で不向き ※個人の感想です
PHP5.3ェ...
PHP5.4 alpha3
[]
作ってみた
•テンプレートエンジン•PHP array markup Language
•[] (array) で HTML が書ける
•PHP 5.4 でしか動かない•元ネタは Clojure の Hiccup
Pamlhttps://github.com/yuya-takeyama/php-HTML_Paml
デモ
[] (PHP) vs JSON
•JSON なら PHP 5.4 未満でも使える
•JSON なら他の言語でも使える
配列とハッシュの区別が無い
PHP には...
[ "foo", "bar", "hoge" => "piyo"]
array(3) { [0]=> string(3) "foo" [1]=> string(3) "bar" ["hoge"]=> string(4) "piyo"}
PHP の 配列 にはキーワード引数のような柔軟さがある
フレームワークへの応用
public $id = array( 'type' => 'int', 'primary' => true, 'serial' => true);public $name = array( 'type' =>'string', 'required' => true, 'unique' => true);public $birthday = array( 'type' => 'date');
モデル定義
public $id = [ 'int', 'primary' => true, 'serial' => true];public $name = [ 'string', 'required' => true, 'unique' => true];public $birthday = ['date'];
モデル定義
まとめ
•PHP 5.4 では [] で配列が作れる•[] で DSL っぽさを演出しよう•[] の導入に関わった皆様に感謝を
おまけ
['begin', ['define', 'fib', ['lambda', ['x'], ['if', ['<', ':x', 2], ':x', ['+', ['fib', ['-', ':x', 2]], ['fib', ['-', ':x', 1]]]]]], ['print', 'fib(10) = '], ['println', ['fib', 10]]] => fib(10) = 55
LisPHPhttps://github.com/yuya-takeyama/LisPHP
ご清聴ありがとうございました