Download - ZendEngine Study Meeting @Tokyo
Copyright © 2004-2007 GREE,Inc. All Rights Reserved.Confidential Copyright © 2004-2010 GREE,Inc. All Rights Reserved.
ZendEngine勉強会@東京
ZENOP
グリー株式会社藤本真樹
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
自己紹介
藤本 真樹
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
• 31歳(あと1日)
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
Agenda
ZENOP
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
Agenda
ZendEngine
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
Agenda
is Not
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
Agenda
Only for
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
Agenda
PHP!
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
ZENOP
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
その前に
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
俺とZendEngine
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
俺とZendEngine
19
なんか知らないうちにZendEngineを全然書いたことがないという噂が広まっていていや全然広まってもいないし全く心外でもないんだけど一応ZendEngine勉強会という貴重な場で話す機会を得ることができたので俺とZendEngineとのいろいろについてここに記しておくのも悪いことではないだろう。長くなるかもしれない。うまくすればこれで20分かせげたりもしないだろうか?という邪な思いはさておき、僕とZendEngineの出会いはPHP 4.0.0がリリースされて間もない頃だったので多分2000年にさかのぼるのだと思う。もう10年以上前か…時の流れって残酷ですね。それはさておき、僕がZendEngine、引いてはPHPを知ったのは、当時とあるウェブアプリケーションをPerl(!)で書いていて、そのストレージとしてPostgreSQLを利用していたのですが、如何せん素人だった僕は所謂シーラカンス本を読んでPostgreSQLのお勉強をしていて、そのコラムにPHPと、そしてまさかのZendEngineの記述があったのがきっかけだったわけです。当時はまだまだ世界が狭く、自分で何でも書いてやる、自分で書いたほうが絶対おもしろいものができると信じて疑わなかった僕は、仕事の傍らプログラミング言語のLexer/Parserを書いていたのですが、まぁ今にして思えばドラゴン本も読まずになにをやっていたんだという感じですね(いちおうYacc/Lexのあの本は読んだ)。それはさておき、そんなことをしていた僕に、PHPにとどまらず独立した言語エンジンとしても動作するというZendEngineというライブラリは大層興味深いものに映ったわけです。そこからPHP 4.0.0のアーカイブをダウンロードしたりインストールしたりPHP自体を使うのはそっちのけでZendEngineのソースコードを追ってみたり、という趣味がスタートしたわけで、当然のようにPHPでウェブアプリケーションなんか書くわけもなく、PHPは僕にとってただのZendEngineの実装サンプルでしかなかったりしたのでした。そんな僕は、当時自分で取得していたドメインで運用していた「ほーむぺーじ」にZendEngineの解説記事なんかを書いたりしていて、そうするとなんということでしょう、まさかのZend Technologiesからメールがきたりして当時
は舞い上がっていたりしていたものです、というか今でもそのときの気持ちは結構鮮明に思い出すことができます。オープンソースへ関わっていると、こういう瞬間ってものすごいエキサイティングですよね、そのうち慣れちゃったりもするけれど。まぁそのサイトは未だにWebArchiveに残っ
ていたりするんですがもう恥ずかしくて死んでも見せたくないけど削除依頼するのもなんか違うと思うのでまぁインターネットの片隅には転がっています。そしてそんな一環としてWindowsで動くZendEngineを利用したスクリプト言語なんかを実装してVectorで公開していたりもして、いや意
外に評判よかったんですが、ちゃんとメンテしきらずに放置してしまいましたごめんなさい。一応窓の杜(なつかしいな)でも紹介されたりして、これはこれでものすごいどきどきしたんですよ、えぇ。関係ないですが、そのあと「シェアウェア」というものをつくってみよう、ともって、とあるアプリをリリースしたんですが、これも紹介してもらえていやー、ラッキーでした、うん。というか最近シェアウェアってききませんね。まぁそれはそれとして、そんな感じで当時は割とWindowsでPHPを動かしたりもしていて、そのスクリプト言語を作る一環としてCOM Extensionをhack
していたりしました。PHP-UsersでCOM関連の質問にreplyしていたのが懐かしいなぁ。というか僕は1998年からメールはすべてIMAPで読んでい
て、まだそのときのメールがサーバ上にあるのですがもうこれも恥ずかしくて死にますね。なんかただ自分が懐かしい思い出を語る恥ずかしい文章になっているのは周知の通りですがどうせだれもよまないからいいや。そんな感じでZendEngineから入ってCOM ExtensionをいじるというイレギュラーなかたちでPHPな世界に足を踏み入れたのですが、ぼくのことはどうでもよくって要するにZendEngineのはなしです。もうしらないひとも多いと思いますがZendEngineのリリース当初、Zendなひとたちはその言語エンジン自体で商売をしようとたくらんでいたんですよね、ちょうどMySQLがDual Licenseで組込版ではFeeをとっていたりするような形で組込可能な言語エンジンっていうのはマーケットで需要があると思ったんでしょうね。実際あるんだけど、まぁみんなLuaとか使っていて、ZendEngineはいまいち組込言語ライブラリとしては流行らずに今に至っているわけで、Zend Technologiesもその線はすててかかってるよね、まぁ懸命だと思います。ただ、もうちょっとドキュメントやサンプルがちゃんと公開さればまたちがった未来もあったんじゃないかなぁとも思ったりはしますが過ぎたことはわすれましょう。と、はなしを「俺とZendEngine」に
戻しますが、というかいつの間にか常体が敬体になっちゃってるというか常体だったのは最初だけなわけですが、まぁなれない文体で書くのはしんどいですはい、で、そんなことをしているうちに、2000年当時というのはわりとあちこちでi18nというのが流行っていて、まぁ当時はなにもわかっていなかったなぁと思いつつ、ZendEngineにSJISのエンコーディングを判別させるパッチを書いてみたりして、わりとそこから僕のPHPコミュニティライフは始まったわけです。そのパッチはmoriyoshiやhirokawaさんをはじめとしたみなさまのおかげ様でPHP本体に組み込まれ、どうせどっかでrevertされるんだろうなと思っていたら(moriyoshiの手による改善のおかげで)いまも残っていて不思議なものですね。そんな10年前の自分の振舞があってこうして2011年にZendEngine勉強会という場所でしゃべっているのは本当に不思議な、そして素敵なことだと思うわけなのでみなさんもぜひぜひ、特に若い皆さんはぜひぜひOpenSourceなSoftwareをhackしまくって世界を広げていっていただけると嬉しいなと思います。そういったみなさんお少しずつの、あるいはたくさんのコードが世界を前に進めていくと思いますし、10年後に予想もしないような形でつながっていくかもしれませんよ、となんかおっさんぽいことをいってみました。おっさんといえば、LinuxConなひたたちが、世代交代がまったくすすま
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
よくわかるまとめ
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
• ZendEngineはPHPと切り離し
て動作させることができる
ライブラリ(PHP 5.3.xでも
まだ一応)
• Zendなひとたちは当初それ
で商売をたくらんでいた(っ
ぽい)
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
つかってみよう
ZendEngine
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
http://bit.ly/ZENO
P• 最初にいっておきますがすげー適当です
• ZTS?なにそれ状態とか
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
(1) とりあえず
Build
(空でいいから)
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
1. contrib/Zendとかにphp-x.y.z/Zendをcp
1. 意外にZendだけではBuildできません
2. contrib/TSRMとかにphp-x.y.z/TSRMをcp
3. Makefile.amをちまちま書く (subdirs書く
くらい)
4. configure.acとかを書く (まぁついでに
autogen.sh的なのも)
(これ意外にめんどい)
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
(2) startup
->
shutdown
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
1. zend_startup()
(ここに渡すutility functionsの準備がめんどいです)
2. gc_globals_ctor()
3. zend_set_utility_values()
4. zend_startup_modules()
5. zend_startup_extensions()
6. zend_activate()
7. zend_activate_modules()
2.-7.はわりとよぶだけ
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
(3) Hello World!
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
/tmp/foo:
-> result
-> せつね
zenop_startup();
// …
zend_execute_scripts(ZEND_REQUIRE, NULL, 1, &file_handle);
zenop_shutdown();
print “hello world!\n”;
print “hello world!\n”;
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
/tmp/foo:
-> result
-> だっさ
<?php print “hello world!\n”;
hello world!
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
(4) ほんとのHello
World!を目指して
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
手を抜けば3行で出来なくはないという:
Zend/zend_language_scanner.l:
• まぁ閉じタグをどうするかってのはあるけど、手
抜きだとこんな感じで?
298 // BEGIN(INITIAL);
299 BEGIN(ST_IN_SCRIPTING);
// …
513 BEGIN(ST_IN_SCRIPTING);
// …
590 BEGIN(ST_IN_SCRIPTING);
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
And More?
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
• classもnamespaceもlambdaも動くんだぜ
• 関数はぜんぜんない
• でもextensionと同じ要領でもりもり追加すれば
いいだけです
• niigataも[…]も自由です(そりゃそうだ)
• とかとか!
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
さいごに
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
結論としてはPHPを
そのまま or 拡張
して使えばいいと
思う(あとTSRMのライセンスが謎)
Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential
まぁ暇なら遊んで
みてください:
http://bit.ly/ZENO
P
Copyright © 2004-2007 GREE,Inc. All Rights Reserved.Confidential Copyright © 2004-2010 GREE,Inc. All Rights Reserved.
Thank You
&
Happy Hacking!
@masaki_fujimoto