目次

前のトピック

< ようこそ!

次のトピック

Zephirの紹介 >

このページ

なぜZephirなのか?

今日のPHPアプリケーションは、安定性、パフォーマンスおよび機能性を含む多くの懸念を釣り合わせる必要があります。各PHPアプリケーションは、ほとんどのアプリケーションのための土台ともなっている共通のコンポーネントのセットを土台とします。

これらの共通コンポーネントはライブラリ/フレームワーク あるいはそれらの組み合わせです。一度インストールすると、フレームワークはほとんど変更されず、アプリケーションの土台となり、それらは非常に機能的で高速でなければなりません。

ライブラリを高速および頑丈にすると、一般的にそれらに実装されている高度な抽象化のために、複雑になるかも知れません。基本のライブラリあるいはフレームワークをほとんど変更することは無いと仮定すると、パフォーマンスとリソースの消費を改善するコンパイルを利用するこの機能を提供する拡張をビルドする良い機会です。

With Zephir, you can implement object-oriented libraries/frameworks/applications that can be used from PHP gaining important seconds that can make your application faster while improving the user experience.

もしPHPプログラマであれば...

PHPはwebアプリケーションの開発で使われるもっとも人気のある言語のひとつです。PHPのように動的に型付けされ解釈される言語は、それらの柔軟性により、とても高い生産性を提供します。

バージョン 4 と5から、PHPは Zend Engine の実装に基づいています。これはバイトコード表現からPHPコードを実行する仮想マシーンです。Zend Engineは世界中の各PHPインストレーションのほとんどに存在し、Zephirを使ってZend Engineの元で実行するPHPのための拡張を作成することができます。

PHPはZephirをホストします。そのため明らかにそれらはとても多くの類似性があります; Zephirそれ自身の特徴を与える重要な違いがあります。例えば、Zephirはより厳格で、コンパイルの段階の結果PHPに比べて生産性が低くなるかも知れません。

もしCプログラマであれば...

Cはこれまでに作成された中でもっとも強力で人気がある言語の一つです。実際、PHPはCで書かれ、それはなぜPHP拡張が利用可能かの理由の一つです。Cによりメモリの管理、低レベルの型およびインラインのアセンブリ ランタイムを使う自由さを得られます。

しかし、Cで巨大なアプリケーションを開発することはPHPあるいはZephirに比べて時間が掛かるかも知れず、もし経験したことが無い開発者であれば幾つかのエラーは見つけることが難しいかも知れません。

Zephirは安全なように設計されているため、ポインタあるいは手動のメモリ管理を実装しません。つまり、Cプログラマであれば、Zephirは強力では無いがCよりはより親切だと感じるでしょう。

コンパイル vs インタプリタ

コンパイルは通常は開発が遅くなります; 実行する前にコードをコンパイルするために少し長く耐える必要があるでしょう。更に、インタプリタは開発効率のパフォーマンスを減らす傾向があります。場合によっては、インタプリタとコンパイラのコードのスピードに目に見える違いがありません。

Zephir はコードのコンパイルを必要としますが、機能性はインタプリタのPHPから使用されます。

一度コードがコンパイルされるとそうする必要はありませんが、インタプリタのコードは実行するたびに解釈されます。開発者はアプリケーションのどの部分がZephirでどの部分がそうでないかを決めることができます。

静的な型 Versus 動的な型の言語

一般的に言って、静的な型の言語では、変数は生涯の間特定の型に縛られますその型は変更することができませんが、それは型互換のインスタンスとオペレーションを参照するだけです。C/C++ のような言語は以下のスキーマを使って実装されました:

int a = 0;
a = "hello"; // 許可されません

動的な型では、型は値に縛られ、変数には縛られません。つまり、変数は型の値を参照し、関係しない型の値に後で再割り当てされるかも知れません。Javascript/PHP は動的な型の言語の例です:

var a = 0;
a = "hello"; // 許されます

それらの生産性の有利さにも関わらず、動的言語は全てのアプリケーションにとって、特にとても大きいコードベースで高パフォーマンスのアプリケーションにとっては、最適な選択では無いかも知れません。

PHPのような動的言語のパフォーマンスの最適化は、Cのような静的言語よりももっとやりがいのあるものです。静的な言語では、オプティマイザは決定をするために型の情報を利用します。動的な言語では、オプティマイザに利用可能なそのような手がかりはほとんどなく、最適化する選択肢が難しくなります。

動的な言語についての最適化の最近の進歩は(JITコンパイラのように)見込みがありますが、それらは静的言語についての技能の状況に後れを取っています。つまり、高パフォーマンスを必要とする場合、静的言語がおそらく安全な選択です。

静的言語のもう一つの小さな利点は、コンパイラのパフォーマンスの追加のチェックです。コンパリアはロジックのエラーを見つけることができません。これは遥かに重要ですが、コンパイラは動的言語が実行時にのみ見つけることができるエラーを前もって見つけることができます。

Zephir は両方の可能な箇所を利用することができる静的および動的な型です。

コンパイラのスキーマ

Zephir はネイティブコード生成(現在のところCへのコンパイル)を提供し、gcc/clang/vc++ のようなコンパイラがコードをマシーンコードに最適化およびコンパイルします。以下のグラフは処理がどのように動くかを示します:

_images/scheme.png

時間が経つうちに、Zephirによって提供されるものに加えて、コンパイラはコンパイルされたアプリケーションのパフォーマンスを改善する多くの最適化を実装および完成してきました:

コードの保護

ある状況では、コンパイルはあまりパフォーマンスを改善しません。これはボトルネックが(往々にして)アプリケーションのI/Oに限界にあり、計算/メモリの限界では無いからです。しかし、コードのコンパイルはアプリケーションのある程度のレベルの知的な保護ももたらします。Zephirを使ってネイティブなバイナリを生成すると、元のコードをユーザあるいは顧客に"隠す"こともできます。

結論

ZephirはPHPあるいはCを置き換えるために作られたものではありません。そうではなく、開発者がコードのコンパイルと静的な型に敢然と望むことができるようにし、それらを補足するものだと考えます。Zephirは正確にはCおよびPHPの世界から良いものを結びつける試みで、それらのアプリケーションをより早くする良い機会を探しています。

inserted by FC2 system