Page 1
P++とは何だったのか
Bring peace to the galaxy with P++
[2019-08-28]第141回 PHP勉強会@東京
#phpstudy
公開日:
by USAMI Kenta@tadsan
に東京都渋谷区のGMO Yoursで開催された『第141回 PHP勉強会@東京』でメイン発表枠(20分)として発表しました。
に札幌市中央区の札幌市民交流プラザで開催された『PHPカンファレンス北海道2019』でアンカンファレンス(20分)として発表しました。
[2019-08-28]第141回 PHP勉強会@東京
#phpstudy
P++とは何か
言ってることは正しい
情報は間違ってる
どういうことか
さて
アンケート
君の想像するPHPはどんなやつ?
<!DOCTYPE html><html><head><title>Hello, PHP!</title></head><p><?php if (date('H') < 19): ?>こんにちは<?php else: ?>こんばんは<?php endif; ?></p><p>今は<?= htmlspecialchars(date('H')) ?>時です</p>
<?php require 'bootstrap.php';
$db = mysqli_connect();
$stmt = mysqli_prepare($db, 'SELECT * FROM books');
mysqli_stmt_execute($stmt);
print '<h1>本の一覧</h1><ul>';
foreach ($stmt as $s) {
print '<li>'; print $s->name; print '</li>';
}
<?php namespace Hoge\Http\Controller;
class BooksController extends BaseController {public function index() {$books = Books::getAll();
$this->render(compact("books"));}}
A?
B?
C?
PHPはどんな速度で変化してるか
速い?
遅い?
PHPは変わったと思う?
速くなったとしたらいつから?
これ何の数かわかる?
PHP7.0…
PHP7.1…
PHP7.2…
PHP7.3…
PHP7.4…
お前はPHP7以降追加された機能の数を覚えているか
せいかいバージョンごとに受理されたRFC数
RFC?
PHP7の機能追加や改廃の提案
PythonでのPEPに相当
RFCの提案をもとに、PHP開発者(php.netのVCSアカウント所有者)が一人一票を投じる仕組み
単純に「追加された数」ではないが
PHPの行く末を知りたければRFCをウォッチすればよい
https://wiki.php.net/rfc
https://php-rfc-watch.beberlei.de/
https://wiki.php.net/rfc
改めて数を見てみよう
PHP7.0…
PHP7.1…
PHP7.2…
PHP7.3…
PHP7.4…
意外に変わってるなって感じはする
とてもざっくり言うとレガシー仕様は消え、不条理な挙動は是正され、他言語にあるようなカッコイイ機能が追加提案されてる
😇
ところでRasmusはこう言った
“We have things like protected properties.We have abstract methods. We have all this stuff that your computer science teacher told you you should be using.I don't care about this crap at all.”
–Rasmus Lerdorf https://en.wikiquote.org/wiki/Rasmus_Lerdorf
“PHPにはprotectedプロパティも抽象メソッドもありますよ。計算機科学の教授が「使え」と言ってるものは全部。そんなことはクソ興味ないですけど”–Rasmus Lerdorf
改めてPHPの言語仕様が追加された時系列を見てみよう
Arrow functions 2.0
JavaScriptなど
Typed Property
Javaなどの静的型付き言語
Numeric Literal Separator
Ada, Ruby, JavaScriptなど
Flexible Heredoc and Nowdoc
Rubyにも似た記法はある
list() Reference Assignment
これはPHP独自に近い
Trailing Commas In List Syntax
カンマ(,)を並べて書く記法のほぼ全てで余分につけてもよくなった
Parameter Type Widening
継承したクラスで引数の型省略
Nullable Types
Void Return Type
Multi catch
Allow specifying keys in list()
Anonymous Class
Generator Delegation(yield from)
Return Type Declaration
Null Coalesce Operator
Scalar type hints
Exponential Operator(pow**)
Importing named function
Variadic function argument (...)
配列を引数として展開
Argument unpacking(...)
可変長引数を配列として取得
Generator
finally keyword (try-catch-...)
Const array/string dereference
Allow non-scalar keys in foreach
Traits
Short array syntax
callable type hint
Closures (function expression)関数式、クロージャ、またはラムダ式JavaScriptのfunctionに似てるが、レキシカルスコープ(変数の捕捉)のためにuseキーワードが必要
抽象クラス, トレイト, インターフェイス, ジェネレータ, イテレータ, クロージャ, 函数の動的呼び出し, 無名クラス, eval, 型宣言, 連想配列, リフレクションAPI, 自己文書化, 標準入出力の読み書き,REPL, クラスの遅延ロード
これらの新機能をフルに活用してコードを書いてる人はどれだけ居るの?
(そういう人は居るけど、そうじゃない人たちと二極化してるのは確実)
PHPの古参開発者たちは冷ややか
PHP以外の言語に触れてた経験のないみんなもポカーソ
そういうとこやぞ
クールな新機能や静的解析しやすい仕様に興味あるひと
従来のコードが動けば十分で破壊的進化は望まないひと
そのほかにもPHPユーザには様々な立場のひとたちが居る
その見えない溝が可視化されたのが今回の一件
さらにひきがねを引く事件があった
Deprecate PHP's short open tags, again一般的なPHPタグは<?php ... ?>または<?= ... ?> だが、<? ... ?>という形式もあるphp.iniで有効無効を切替られる環境によってOnだったりOffだったり
Deprecate PHP's short open tags, again
XML宣言との相性がとても悪いそんな半端モンは引導を渡してやろうぜ! ということで提案された構文がシンプルになるし、機械的に変換もできるから良いだろ、という主旨
Zeevによる反論
PHP3・4の開発者
相方のAndi Gutmansとともに
VM型処理系のZend Engine開発
PHPでよくあるZend…はZeevとAndiに由来
PHPコードに未だに影響を残す
オリジナルのPHP(PHP/FI)作者
言語の原作者は最終的な決定権を担っていることがある(BDFL:優しい終身の独裁者)が、Rasmusはそうではない
必要な場面では発言するが権限はRFCの一票しか持ってない
今回の一件にはあまり関与してない
近年のPHPの中核的な開発者
PHP5.5以降、非常に多数の言語機能を実装してPHPに取り入れてきた
PHP-Parserなどの作者
去年の大学院を卒業し今年JetBrainsに入社してPhpStormチームに参加
📛
🔥
燃えた
めちゃくちゃ燃えた
Deprecate PHP's short open tags, again<? ... ?> 使ってないひとは使ってないし、廃止したからと言って文法が簡単になるか…?この仕様を削除してもパフォーマンスは特に向上しないし、コードもちょっとしか消えない
Deprecate PHP's short open tags, again大山鳴動して鼠一匹大騒ぎして文法変更する割に得られるメリットが少なすぎないか…?だからと言って負債になった文法はずっと変えられないままなのか?!
喧喧諤諤非難轟々
再び立ち上がった
PHPコミュニティ内の革新vs保守の対立を解決したい
ここで提案されたのがP++
概要は最初の本の虫の記事で紹介された通り
誰も何も決定してないことを除けば
PHPの意思決定機関が開発者によるRFCの多数決であることを知っていれば誤解はしないはず
本の虫で紹介された「ソース」はメーリングリストでの議論のためのメモ書き
燃え拡がる
誤解…!
🔥
🔥
🔥
その後の経緯はこの記事に書いた通り
理想はわかるが…現実的ではない…
Zeevの予言…
PHPの明日はどっちだ
救いとしてはそれ以降も別のRFCで建設的な議論は続いてるし、ZeevもNikitaも参加している
PHP先生の次回作(PHP8)にご期待ください!
