zendengine study meeting @tokyo

30
Copyright © 2004-2007 GREE,Inc. All Rights Reserved. Confidential Copyright © 2004-2010 GREE,Inc. All Rights Reserved. ZendEngine勉強会@東京 ZENOP グリー株式会社 藤本真樹

Upload: masaki-fujimoto

Post on 20-Jul-2015

1.080 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2007 GREE,Inc. All Rights Reserved.Confidential Copyright © 2004-2010 GREE,Inc. All Rights Reserved.

ZendEngine勉強会@東京

ZENOP

グリー株式会社藤本真樹

Page 2: ZendEngine Study Meeting @Tokyo

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日)

Page 3: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

Agenda

ZENOP

Page 4: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

Agenda

ZendEngine

Page 5: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

Agenda

is Not

Page 6: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

Agenda

Only for

Page 7: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

Agenda

PHP!

Page 8: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

ZENOP

Page 9: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

その前に

Page 10: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

俺とZendEngine

Page 11: ZendEngine Study Meeting @Tokyo

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なひたたちが、世代交代がまったくすすま

Page 12: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

よくわかるまとめ

Page 13: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

• ZendEngineはPHPと切り離し

て動作させることができる

ライブラリ(PHP 5.3.xでも

まだ一応)

• Zendなひとたちは当初それ

で商売をたくらんでいた(っ

ぽい)

Page 14: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

つかってみよう

ZendEngine

Page 15: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

http://bit.ly/ZENO

P• 最初にいっておきますがすげー適当です

• ZTS?なにそれ状態とか

Page 16: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

(1) とりあえず

Build

(空でいいから)

Page 17: ZendEngine Study Meeting @Tokyo

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的なのも)

(これ意外にめんどい)

Page 18: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

(2) startup

->

shutdown

Page 19: ZendEngine Study Meeting @Tokyo

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.はわりとよぶだけ

Page 20: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

(3) Hello World!

Page 21: ZendEngine Study Meeting @Tokyo

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”;

Page 22: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

/tmp/foo:

-> result

-> だっさ

<?php print “hello world!\n”;

hello world!

Page 23: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

(4) ほんとのHello

World!を目指して

Page 24: ZendEngine Study Meeting @Tokyo

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);

Page 25: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

And More?

Page 26: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

• classもnamespaceもlambdaも動くんだぜ

• 関数はぜんぜんない

• でもextensionと同じ要領でもりもり追加すれば

いいだけです

• niigataも[…]も自由です(そりゃそうだ)

• とかとか!

Page 27: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

さいごに

Page 28: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

結論としてはPHPを

そのまま or 拡張

して使えばいいと

思う(あとTSRMのライセンスが謎)

Page 29: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2011 GREE,Inc. All Rights Reserved.Confidential

まぁ暇なら遊んで

みてください:

http://bit.ly/ZENO

P

Page 30: ZendEngine Study Meeting @Tokyo

Copyright © 2004-2007 GREE,Inc. All Rights Reserved.Confidential Copyright © 2004-2010 GREE,Inc. All Rights Reserved.

Thank You

&

Happy Hacking!

<[email protected]>

@masaki_fujimoto