(jp) =
こんにちは内部
今日は、物議をかもしそうなトピックについてあなたの考えを聞きたいと思いますが、この議論をする価値はあると思います. 実行時に追加の型チェックを実際に強制することなく、ジェネリック構文を追加することを主張したいと思います。 聞いてください。
私たちは何年も前からジェネリックについて議論してきました [1][2]、すべて結果なし。 ニキータの最新の試み [3] 私が収集したものなどから、実行時にジェネリック型チェックを行うとパフォーマンスに大きな影響があるため、失速しました。
一方、静的アナライザーは数年前から台頭しています。 確かに、コミュニティ全体がこの種の型の厳密さを好むわけではありません。PHP はそれらを強制しません。 それでも、PhpStorm のようなプロジェクトはその重要性を認識しており、今年後半に psalm と PHPStan の両方の組み込みサポートを追加する予定です。 [4]. Rasmus Lerdorf も、2 年前に PHP の静的解析機能を改善するというアイデアに関心を示しました。 [5].
つまり、静的解析の利点を受け入れることに関心を持っている PHP コミュニティのかなりの部分が存在するということです。
PHP バブルの外を見ると、JavaScript でも同じことが起こっていることがわかります。TypeScript が追加する主な利点は、堅牢な静的分析です。 確かに、これらの開発者はコードをプレーンな古い JavaScript にトランスパイルするための追加のコンパイル手順が必要ですが、それで問題ないように見えますか?
PHP についても同様のアイデアについて説明したいと思います。 パフォーマンスの問題のためにランタイム ジェネリックを使用できない場合は、別のオプションを検討してみませんか。インタープリターによって無視されるが、静的解析ツール (組み込み PHP のサード パーティ) によって使用できるジェネリック構文を追加することです。これについては別の議論です。 この考えは、私たちが 20 年以上プログラミングしてきた “PHP の考え方” に反していることは理解していますが、PHP およびより広いプログラミング コミュニティで起こっていることを無視してはなりません。そうであろうとなかろうと、より厳密な型システムが多くの人に好まれています。
今、私たちが今日使用できる代替手段があることを知っています. 静的アナライザーは、doc ブロックを使用してジェネリックを既にサポートしています。 私たちが持っているツールセットで同じ結果を達成することは不可能だと主張しようとしているのではなく、開発者の観点から改善の余地があるということです。 歴史が示すように、PHP へのこのような便利な機能の追加は、飲み込むのが難しい薬でした。 持ってる いずれにせよますます頻繁に発生しています: プロパティの昇格、短いクロージャ、名前付き引数、属性、さらには型そのものです: これらの機能がなくても、同じように動作する PHP プログラムを作成できます。ここ数年。
補足として、トランスパイルのアイデアはすでに PHP に存在しています。 コンストラクタ プロパティの昇格を見ると、実行時に単純な PHP コードに変換される、純粋に構文上の機能です。 Nikita は、コンストラクタ プロパティ プロモーション RFC でこの原則を「脱糖」と呼んでいます。 [6].
したがって、トランスパイルされたジェネリックの要約は次のとおりです。
- 実行時のパフォーマンスに大きな影響はありません
- PHP コミュニティはすでに静的解析を取り入れています
- TypeScript のおかげで、トランスパイルは実行可能なワークフローであることが証明されています
- PHP のすべてと同様に、オプトインです。 使用したくない場合は構文を使用する必要はなく、欠点もありません。
以上のことを踏まえて、皆様のご意見をお待ちしております。
敬具
ブレント