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分)として発表しました。
P++とは何だったのか
Bring peace to the galaxy with P++
[2019-08-28]
第141回 PHP勉強会@東京
#phpstudy
お前誰よ
うさみけんた (@tadsan)
/ Zonu.EXE
P++とは何か
言ってること
は正しい
情報は
間違ってる
どういう
ことか
さて
アンケート
君の想像するPHP
はどんなやつ?
A
<!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>
B
<?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>';
}
C
<?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… 46
PHP7.1… 28
PHP7.2… 22
PHP7.3… 13
PHP7.4… 26
お前は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… 46
PHP7.1… 28
PHP7.2… 22
PHP7.3… 13
PHP7.4… 26
意外に変わってる なって感じはする
とてもざっくり言うとレガ シー仕様は消え、不条理な 挙動は是正され、他言語に あるようなカッコイイ機能
が追加提案されてる
😇
ところで
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の言語 仕様が追加された時
系列を見てみよう
PHP 7.4
Arrow functions 2.0
JavaScriptなど
Typed Property
Javaなどの静的型付き言語
Numeric Literal Separator
Ada, Ruby, JavaScriptなど
PHP 7.3
Flexible Heredoc and Nowdoc
Rubyにも似た記法はある
list() Reference Assignment
これはPHP独自に近い
PHP 7.2
Trailing Commas In List Syntax
カンマ(,)を並べて書く記法のほぼ全
てで余分につけてもよくなった
Parameter Type Widening
継承したクラスで引数の型省略
PHP 7.1
Nullable Types
Void Return Type
Multi catch
Allow specifying keys in list()
PHP 7.0
Anonymous Class
Generator Delegation
(yield from)
Return Type Declaration Null Coalesce Operator
Scalar type hints
PHP 5.6
Exponential Operator(pow**)
Importing named function
Variadic function argument (...)
配列を引数として展開
Argument unpacking(...)
可変長引数を配列として取得
PHP 5.5
Generator
finally keyword (try-catch-...) Const array/string dereference Allow non-scalar keys in foreach
PHP 5.4
Traits
Short array syntax
callable type hint
PHP 5.3
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による
反論
Zeev Suraski
PHP3・4の開発者
相方のAndi Gutmansとともに
VM型処理系のZend Engine開発
PHPでよくあるZend…は
ZeevとAndiに由来
PHPコードに未だに影響を残す
Rasmus Lardorf
オリジナルのPHP(PHP/FI)作者
言語の原作者は最終的な決定権を担っ ていることがある(BDFL:優しい終身 の独裁者)が、Rasmusはそうではない
必要な場面では発言するが権限は
RFCの一票しか持ってない
今回の一件にはあまり関与してない
Nikita Popov
近年の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)に
ご期待ください!