PHPの将来に関する意芋の1぀





最近、開発者のコ​​ミュニティでは、PHPずその将来に関連するすべおに぀いお非垞に掻発な議論が行われおいたす。 喜ばしいこず-これらの䌚話のほずんどは前向きな方法で行われたす。 PHP 6ずその倖芳に぀いおの議論は人気がありたす。 人々は、蚀語ずコミュニティの将来におけるHHVMずその圹割に぀いお倚くの質問をしたす。 それで、これに関する私の考えのいく぀かをあなたず共有させおください。





䞋䜍互換性に぀いお


次の各リリヌスは、前のリリヌスずの䞋䜍互換性を維持するために必芁であるず考えおいたす。6、7、99、「象の愛奜家」-奜きな名前を付けおください。 そしお、いく぀かの非互換性が䟝然ずしお発生するため、「䞻に」ず蚀いたす。 しかし、これらの非互換性は正圓化および制埡する必芁がありたす。 たた、境界線のケヌスのすべおの動䜜のレビュヌのみを目的ずする必芁がありたす。 これは、深刻な内郚再線成ができないこずを意味するものではありたせんが、物事の玔粋さず単玔さを远求しおいたす。 これは、非互換性が開発者を劚害しないこずを意味したす。



このアプロヌチは非垞に簡単に怜蚌できたす。



蚘述したコヌドは、PHP 5.xずPHP 6.xおよび2぀の連続したメゞャヌリリヌスの䞡方で問題なく実行されるはずです。




なぜこれが重芁なのですか PHP 4からPHP 5ぞの移行を芋おください。PHP5ぞの最終的な移行には玄10幎かかりたしたが、プログラマヌは䞡方のバヌゞョンで動䜜するコヌドを曞くのは簡単でした。 そしお、これを行うこずが困難だった堎合、想像しおみおください



結局のずころ、䜕も提瀺する必芁はありたせん。 これはたさにPythonで起こったこずです。 Python 3の最初のリリヌスは玄5幎前に発衚されたした。 そしお今日、2014幎、圌はただ完党には関䞎しおいたせん。 悪いからではなく、䞡方のバヌゞョンで問題なく動䜜する単䞀のコヌドを䜿甚するのは非垞に難しいからです。 ぀たり、Python 2、たたはPython 3で機胜する機胜のいずれかを䜿甚したすその結果、䞡方の利点が倱われたす。 たた、必芁なラむブラリたたはプラットフォヌムにPython 3のバヌゞョンがない堎合は、自分で移怍する必芁がありたす。たあ...運がありたせん。 実際、これがたさに起こるこずです。



私はこのアプロヌチが間違っおいるずは蚀いたくありたせん。蚀語はそのような倉曎から100䞇の異なるグッズを獲埗したす。 しかし、私にずっおは、コミュニティず平均的なナヌザヌにずっお、このような移行は䟝然ずしお䞍必芁に基本的なこずです。



゚ンゞンの曞き換えに぀いお


倚くの人が蚀うあなたはPHP゚ンゞンを曞き盎す必芁がありたす。 私は間違いなくこれをプラスず考えおいたすがはい、゚ンゞンは非垞に掗緎されおいたす、質問をしなければなりたせんこれは本圓に必芁ですか 基本的な犬はどこに埋葬されおいたすか 確かに、PHP゚ンゞンにはアヌキテクチャ䞊の蚈算ミスがありたすが、党般的にはうたく機胜したす。



したがっお、゚ンゞンのコンポヌネントベヌスぞの移行、サブシステムぞの分割を確認したいず思いたす。 今日、これはすでに郚分的に行われおいたす。 しかし、私ぱンゞンを本圓にコンポヌネントにする倉曎を芋たいです。 なぜこれが重芁なのですか このアプロヌチでは、個々の改善が゚ンゞンの開発に倧きく貢献できるためです。



䟋えば、珟時点でPHPの最も混乱しおいる郚分は、パヌサヌずコンパむラヌです。 それらは非垞に密接に関連しおおり、混乱しおいるため、開発においお倚くの問題が生じたす。 䞀方、それらが゚ンゞンの個別のコンポヌネントである堎合、コンパむラヌの眮換がはるかに簡単になるずいうパヌサヌ。 そしお、それらの共通郚分は、特定の抜象構文ツリヌである可胜性がありたす。 なぜASTなのか これは、䞡方のコンポヌネントが䜿甚できる䞀皮の䞀般的なアむデアです。 はい、それは倚くの仕事ず良い仕事でしたが、利益は長くはかからなかったでしょう䞀貫性があり、より予枬可胜な構文から、PHP自䜓を䜿甚しお独自の構文を定矩する機胜を远加するこず実際に蚀語。



したがっお、曞き換える必芁はありたせん。 リファクタリングずクリヌン。



暙準ラむブラリのオブゞェクト指向アプロヌチぞの移行に぀いお


䞀郚の人々は、暙準のPHPラむブラリをオブゞェクト指向のアプロヌチに移行するこずを提案しおいたす。スカラヌ型でさえオブゞェクトの振る舞いをしたす。 ぀たり、次のようなものを曞くこずができたす。



$string = "Foo"; var_dump($string->length); // 3 var_dump($string->toLower()); // string(3) "foo" // etc
      
      







クヌルに聞こえるずは思いたすが、これを行う必芁はないず思いたす。



その理由は簡単です。スカラヌはオブゞェクトではありたせん。 しかし、最も重芁なこずは、それらはどのタむプにも属しおいたせん。 PHPは、文字列を敎数ずみなす型システムに䟝存しおいたす。 システムの柔軟性は、任意のスカラヌ型を別のスカラヌ型に簡単に倉換できるずいう事実にもありたす。 もちろん、これは非垞に倚くの゚ラヌが発生するため、垞に良いずは限りたせん。



ただし、このような状況は、より具䜓的な動䜜によっお解決できたす。 たずえば、「ダヌティ」型キャストを詊行するずきにキャッチ譊告たたは䟋倖をスロヌできるため、誰かが「123abc」を敎数にキャストしようずするず、郚分的なデヌタ損倱に関するメッセヌゞが衚瀺されたす。



さらに重芁なのは、そのような型システムでは、特定の倉数が特定の時間にどの型を持っおいるかを100知るこずができないずいうこずです。 さたざたなオプションを想定できたすが、実際に䜕が存圚するかは䞍明です。 これらの型は埌で倉曎できるため、型倉換埌たたは蚀語がスカラヌ型のヒントをサポヌトしおいる堎合でも、状況はあたり倉わりたせん。



したがっお、これはすべお、オブゞェクト指向のアプロヌチでは、すべおのスカラヌ操䜜をすべおのスカラヌ型にバむンドする必芁があるこずを意味したす。 これは、スカラヌが数孊的メ゜ッドだけでなく、文字列を操䜜するメ゜ッドも持぀オブゞェクトモデルに぀ながりたす。 なんおナンセンス...



HHVMになる


今日、この蚘事を曞いおいる時点では、本番環境でHHVMを䜿甚するこずはお勧めしたせん。 これにはいく぀かの理由がありたす。 それらはすべお既知であり、基本的なものではありたせん。 それらが解決できるかどうかは時間が経おばわかりたすが、私は本圓にそう願っおいたす。



  1. HHVMは1぀の䌚瀟によっお管理されおいたす。 誀解しないでください、問題はFacebookが開発に倚額のお金を費やしおいるずいうこずではありたせん。 しかし、実際には、プロゞェクトはHHVMを䜿甚するかどうかに䟝存しないビゞネスを営む䌚瀟によっお管理されおいたす。 圌らが有料サポヌトを提䟛し、HHVMを本栌的な補品にした堎合、それは1぀のこずです。 もう1぀は、珟圚はオヌプン゜ヌスプロゞェクトでも商甚プロゞェクトでもないこずです。 そしお、そのような状況で生産をHHVMに倉換するずき、私は非垞に緊匵したす。
  2. HHVMには公開仕様がありたせん。぀たり、䞀般に、Zend゚ンゞンの堎合ず同じ方法でプログラミングしたす。 ただし、これは詊行錯誀の方法です。耇数の実装をサポヌトしようずするたではすべおうたくいくからです。 ラむブラリ開発者ずしお、私はすでに自分の肌でこれを感じおいたした。 䞀方、HHVMずPHPが最終的に䜕らかの共通仕様になった堎合、倚くのこずがはるかに簡単になりたす...
  3. HHVMはクロヌズド゜ヌスプロゞェクトですが、サヌドパヌティの開発者からのコヌドを受け入れたす既に良い。 ただし、プルリク゚ストずパッチストリヌムはオヌプン゜ヌスプロゞェクトを生成したせん。 さお、プロセスの明確さはどこにありたすか 芖点の明確さはどこにありたすか 参加の開攟性はどこにありたすか リヌダヌシップはどこにありたすか




同時に、私は自分の意芋が私だけではないこずを知っおいたす。 HHVMは将来、匷力な競争盞手になりたすが、䞊蚘の問題が解決されるたで、商業生産におけるHHVMの時代は到来しおいないず思いたす。



PHPずHHVMは共存できたすか


圓然。 䞀郚のテストは説埗力がありたすが、JITコンパむラは魔法ではありたせん。 圌らは私たちのこの珟実の䞖界ず劥協したす倚くのテストがこれを明らかにしたす。 実際、テストの倧郚分をよく芋るず、「実際の」コヌドを実行しおいないこずに気付くでしょう。 ストップストップ、぀たり、HelloWorldたたはフィボナッチ数ゞェネレヌタヌのパフォヌマンスを比范したすか さお、幞運を祈りたす。今は萜ち着いおください。そしお、これらすべおの無駄な結果を捚おおください。



実システムを䜿甚しないテストは圹に立たないこずを繰り返したしょう。これはナンセンスであり、さらに悪いこずです-それらは単に危険です。



実際には、HHVMがPHPよりもはるかに高速に凊理できるタスクがありたす。 しかし同時に、PHPがその速床を瀺すタスクがありたす。 確認する唯䞀の方法は、アプリケヌションをテストするこずです。



しかし、HHVMは私のコヌドをネむティブずしお実行したす PHPはどのように高速化できたすか

JITは魔法ではないず蚀ったのを芚えおいたすか それで、これは実際にそうです。 PHPはむンタヌプリタヌ型プログラミング蚀語であるため、PHPを盎接コンパむルするこずはできたせん。 ぀たり、このコヌドを実行するたで、コンパむルキュヌにあるコヌドを正確に知るこずはできたせん。 したがっお、JITはたさにそれを行いたす。 実行可胜コヌドを分析し、それに関する十分な情報を受け取っお、ネむティブコヌドを生成したす。 このプロセスはオヌバヌヘッドではありたせん。これは、コン゜ヌルでHHVMが遅いためです。



さらに重芁なこずに、JITは汎甚コヌドを生成したせん。 このコヌドが䜜成された時点で存圚しおいた条件に埓っおコヌドを生成したす。 したがっお、関数が2぀の敎数を远加する堎合、そのようなコヌドは単玔なaddステヌトメントにコンパむルできたす。 ただし、コンパむラヌは、敎数型のパラメヌタヌをチェックするための呜什も远加したす。 そしお、関数に数倀を枡すずPHPの芳点からは正垞です、チェックの1぀が誀った結果を返したす。



チェックの結果が停の堎合、「フェむルオヌバヌ」のようなものが発生したす。 簡単に蚀えば、゚ンゞンはこのメ゜ッド甚にコンパむルしたすべおを「キャンセル」し、むンタヌプリタヌモヌドに切り替えたす。 このような操䜜の実行は、むンタヌプリタヌモヌドでの䞀定の䜜業よりもはるかに高䟡です。



そしお、これはJITコンパむラヌが魔法ではない理由の1぀にすぎたせん。



私がJITコンパむラヌに反察しおいるず今考えお欲しくありたせん。 それどころか、ほずんどのタスクでは、生産性が倧幅に向䞊したす。 しかし、それでも完璧ではありたせん。



他のコミュニティを芋るず、JITコンパむラずずもに仮想マシンの実装が衚瀺されたす。 CPythonずPyPyは良い䟋です。 Pythonには蚀語仕様があるため、ある実装を別の実装に簡単に倉曎できるこずにも泚意しおください。



しかし、ハックはクヌルです

HackはFacebookによっお開発され、HHVMに含たれる新しいプログラミング蚀語です。 倧たかに蚀っお、これはいく぀かの远加機胜を備えた静的に型付けされたバヌゞョンのPHPです...



そしお、ハックは玠晎らしいです 私が瀺したHHVMの問題をどうにかしお解決したいので、本圓に貢献したいです



結局のずころ、これは興味深いアむデアです。 珟圚、PHPに基づいお構築されたいく぀かのメタ蚀語がありたす。 リヌダヌはHackずZephirです。 しかし、問題がありたす。 䞡方ずも特定のランタむム甚です。HackはHHVM䞊で実行され、ZephirはPHP䞊で実行されたす。 これを解決するには



正盎なずころ、Zephirをドロップしお、HackからPECLぞのコンパむラヌを䜜成するだけです。 Hackは静的に型付けされた蚀語であるため、HackずPECLの間にクロスコンパむル機胜が必芁です。 たた、理論的には、Hackが既にC ++バむンディングシステムラむブラリの接続甚をサポヌトしおいるこずを考慮するず、コンパむラヌもこれを凊理する必芁がありたす。 この堎合、PECL拡匵機胜を蚘述するこずは意味がありたせん。 拡匵機胜をHack静的コヌドアナラむザヌ、デバッガヌを搭茉で蚘述し、完党に互換性のあるPECL拡匵機胜を生成したす。 もちろん、このこずは実装においお非垞に重芁なこずですが、詊しおみるのは玠晎らしいこずです ずころで、ここで、蚀語仕様を支持する別の議論がありたす。



蚀語仕様に぀いお


おそらく、蚀語仕様の必芁性に぀いおテキストで䜕床か蚀及しおいるこずに気づいたでしょう...

これが、蚀語、プラットフォヌム、゚コシステム、およびコミュニティずしおのPHPの将来を改善するのに圹立぀最も重芁なものであるこずを瀺唆しおいたす。



たずめるず


PHPは、開発の非垞に興味深い段階に入っおいたす。 人々はクヌルなものを曞き、進歩を促したす。 したがっお、PHPのさらなる成長が必芁な堎合は、これたたはその遞択を行う際に䜕をしおいるかを非垞によく理解する必芁があるず思いたす。




All Articles