P++とは何だったのか

公開日:

東京都渋谷区GMO Yoursで開催された『第141回 PHP勉強会@東京』でメイン発表枠(20分)として発表しました。

札幌市中央区札幌市民交流プラザで開催された『PHPカンファレンス北海道2019』でアンカンファレンス(20分)として発表しました。

Download PDF

スライドテキスト

Page 1

P++とは何だったのか

Bring peace to the galaxy with P++

[2019-08-28]

第141回 PHP勉強会@東京

#phpstudy

Page 2

お前誰よ
うさみけんた (@tadsan)

/ Zonu.EXE

  • GitHub/Packagistでは id: zonuexe
    • ピクシブ株式会社 pixiv事業本部
  • Emacs Lisper, PHPer
  • Emacs PHP Modeのメンテナ引き継ぎました
    • 好きなリスプはEmacs Lispです
    • Qiitaに記事を書いたり変なコメントしてるよ

Page 3

Page 4

Page 5

P++とは何か

Page 6

Page 7

言ってること
は正しい

Page 8

情報は

間違ってる

Page 9

どういう

ことか

Page 10

さて

Page 11

アンケート

Page 12

君の想像するPHP
はどんなやつ?

Page 13

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>

Page 14

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>';

}

Page 15

C

<?php
namespace Hoge\Http\Controller;

class BooksController extends BaseController {
public function index() {
$books = Books::getAll();

$this->render(compact("books"));
}
}

Page 16

A?

B?

C?

Page 17

PHPはどんな

速度で変化してるか

Page 18

速い?

遅い?

Page 19

PHPは

変わったと思う?

Page 20

速くなったと

したらいつから?

Page 21

これ何の数か
わかる?

Page 22

PHP7.0… 46

PHP7.1… 28

PHP7.2… 22

PHP7.3… 13

PHP7.4… 26

Page 23

お前はPHP7以降 追加された機能の 数を覚えているか

Page 24

せいかい

バージョンごとに

受理されたRFC数

Page 25

RFC?

Page 26

Page 27

PHP7の機能追 加や改廃の提案

Page 28

Pythonでの PEPに相当

Page 29

RFCの提案をもとに、

PHP開発者

(php.netのVCSアカウント所有者)
一人一票を投じる仕組み

Page 30

単純に

「追加された数」

ではないが

Page 31

PHPの行く末を

知りたければRFCを ウォッチすればよい

Page 32

https://wiki.php.net/rfc

Page 33

https://php-rfc-watch.beberlei.de/

Page 34

Page 35

https://wiki.php.net/rfc

Page 36

改めて数を

見てみよう

Page 37

PHP7.0… 46

PHP7.1… 28

PHP7.2… 22

PHP7.3… 13

PHP7.4… 26

Page 38

意外に変わってる なって感じはする

Page 39

とてもざっくり言うとレガ シー仕様は消え、不条理な 挙動は是正され、他言語に あるようなカッコイイ機能
が追加提案されてる

Page 40

😇

Page 41

ところで

Rasmusは

こう言った

Page 42

“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

Page 43

には プロパティも抽象メ

“PHP protected
ソッドもありますよ。計算機科学の教授が
「使え」と言ってるものは全部。

そんなことはクソ興味ないですけど

–Rasmus Lerdorf

Page 44

改めてPHPの言語 仕様が追加された時
系列を見てみよう

Page 45

PHP 7.4

Arrow functions 2.0
JavaScriptなど

Typed Property
Javaなどの静的型付き言語

Numeric Literal Separator
Ada, Ruby, JavaScriptなど

Page 46

PHP 7.3

Flexible Heredoc and Nowdoc
Rubyにも似た記法はある

list() Reference Assignment
これはPHP独自に近い

Page 47

PHP 7.2

Trailing Commas In List Syntax
カンマ(,)を並べて書く記法のほぼ全
てで余分につけてもよくなった

Parameter Type Widening
継承したクラスで引数の型省略

Page 48

PHP 7.1

Nullable Types
Void Return Type
Multi catch
Allow specifying keys in list()

Page 49

PHP 7.0

Anonymous Class
Generator Delegation

(yield from)

Return Type Declaration Null Coalesce Operator
Scalar type hints

Page 50

PHP 5.6

Exponential Operator(pow**)
Importing named function
Variadic function argument (...)
配列を引数として展開

Argument unpacking(...)
可変長引数を配列として取得

Page 51

PHP 5.5

Generator
finally keyword (try-catch-...) Const array/string dereference Allow non-scalar keys in foreach

Page 52

PHP 5.4

Traits
Short array syntax
callable type hint

Page 53

PHP 5.3

Closures (function expression)
関数式、クロージャ、またはラムダ式
JavaScriptのfunctionに似てる が、レキシカルスコープ(変数の捕 捉)のためにuseキーワードが必要

Page 54

抽象クラス, トレイト, インター
フェイス, ジェネレータ, イテレー タ, クロージャ, 函数の動的呼び出 し, 無名クラス, eval, 型宣言, 連 想配列, リフレクションAPI, 自己
文書化, 標準入出力の読み書き,
REPL, クラスの遅延ロード

Page 55

これらの新機能をフルに 活用してコードを書いて る人はどれだけ居るの?

Page 56

(そういう人は居るけど、

そうじゃない人たちと二
極化してるのは確実)

Page 57

PHPの古参開発 者たちは冷ややか

Page 58

PHP以外の言語に 触れてた経験のない
みんなもポカーソ

Page 59

そういうとこやぞ

Page 60

クールな新機能や

静的解析しやすい

仕様に興味あるひと

Page 61

従来のコードが動け ば十分で破壊的進化
は望まないひと

Page 62

そのほかにもPHP ユーザには様々な立 場のひとたちが居る

Page 63

その見えない溝が 可視化されたのが
今回の一件

Page 64

さらにひきがねを 引く事件があった

Page 65

Page 66

Deprecate PHP's short open tags, again

一般的なPHPタグは<?php ... ?>

または<?= ... ?> だが、<? ... ?>と
いう形式もある
php.iniで有効無効を切替られる 環境によってOnだったりOffだっ
たり

Page 67

Deprecate PHP's short open tags, again

XML宣言との相性がとても悪い
そんな半端モンは引導を渡してやろう
ぜ! ということで提案された
構文がシンプルになるし、機械的に変 換もできるから良いだろ、という主旨

Page 68

Zeevによる

反論

Page 69

Page 70

Zeev Suraski

PHP3・4の開発者
相方のAndi Gutmansとともに

VM型処理系のZend Engine開発
PHPでよくあるZend…は

ZeevとAndiに由来
PHPコードに未だに影響を残す

Page 71

Rasmus Lardorf

オリジナルのPHP(PHP/FI)作者
言語の原作者は最終的な決定権を担っ ていることがある(BDFL:優しい終身 の独裁者)が、Rasmusはそうではない
必要な場面では発言するが権限は
RFCの一票しか持ってない
今回の一件にはあまり関与してない

Page 72

Nikita Popov

近年のPHPの中核的な開発者
PHP5.5以降、非常に多数の言語機能 を実装してPHPに取り入れてきた
PHP-Parserなどの作者
去年の大学院を卒業し今年JetBrains に入社してPhpStormチームに参加

Page 73

📛

Page 74

🔥

Page 75

燃えた

Page 76

めちゃくちゃ

燃えた

Page 77

Deprecate PHP's short open tags, again

<? ... ?> 使ってないひとは使ってな いし、廃止したからと言って文法が簡
単になるか…?
この仕様を削除してもパフォーマンス は特に向上しないし、コードもちょっ
としか消えない

Page 78

Deprecate PHP's short open tags, again

大山鳴動して鼠一匹
大騒ぎして文法変更する割に得られる
メリットが少なすぎないか…?
だからと言って負債になった文法は ずっと変えられないままなのか?!
喧喧諤諤非難轟々

Page 79

再び立ち上がった

Page 80

Page 81

PHPコミュニティ 内の革新vs保守の 対立を解決したい

Page 82

ここで提案

されたのがP++

Page 83

概要は最初の

本の虫の記事で

紹介された通り

Page 84

Page 85

誰も何も決定して ないことを除けば

Page 86

PHPの意思決定機関が 開発者によるRFCの多 数決であることを知って いれば誤解はしないはず

Page 87

本の虫で紹介された 「ソース」はメーリン グリストでの議論の
ためのメモ書き

Page 88

燃え拡がる

$

誤解…!
🔥
🔥
🔥

Page 89

Page 90

その後の経緯 はこの記事に
書いた通り

Page 91

Page 92

理想はわかるが…

現実的ではない…

Page 93

Zeevの予言…

Page 94

Page 95

PHPの明日 はどっちだ

Page 96

救いとしてはそれ以降も 別のRFCで建設的な議 論は続いてるし、Zeev もNikitaも参加している

Page 97

PHP先生の

次回作(PHP8)に

ご期待ください!