rfc: "var" deprecation

18
RFC: "var" Deprecation 内山 雄司 (@y-uti) 2016-05-25 102 PHP 勉強会

Upload: y-uti

Post on 16-Apr-2017

1.277 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: RFC: "var" Deprecation

RFC: "var" Deprecation内山 雄司 (@y-uti)

2016-05-25 第102回 PHP 勉強会

Page 2: RFC: "var" Deprecation

自己紹介内山雄司 (@y__uti)

◦ http://y-uti.hatenablog.jp/ (phpusers-ja)

仕事◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています

興味◦ プログラミング言語処理系

◦ 機械学習

2016-05-25 第102回 PHP 勉強会 2

Page 3: RFC: "var" Deprecation

PHP RFChttps://wiki.php.net/rfc

将来の PHP に向けた提案◦ 提案して

◦ 議論して

◦ 投票して

◦ 実装して

◦ リリース!

2016-05-25 第102回 PHP 勉強会 3

Page 4: RFC: "var" Deprecation

PHP 7.1 では・・・導入が決定している機能の一部を紹介

2016-05-25 第102回 PHP 勉強会 4

Page 5: RFC: "var" Deprecation

Generalize supportof negative string offsets文字列のオフセットに負の値を指定できたり

2016-05-25 第102回 PHP 勉強会 5

<?php

$str = 'abcde';echo $str[-2] . "¥n";

// 実行結果

// d

◦ 賛成 28 票 vs 反対 0 票

Page 6: RFC: "var" Deprecation

Support Class Constant Visibilityクラスに private な定数を定義できたり

2016-05-25 第102回 PHP 勉強会 6

<?php

class Hoge {private const fuga = 10;

}

echo Hoge::fuga . "¥n";

// 実行結果

// PHP Fatal error: Uncaught Error: Cannot access private const// Hoge::fuga in /home/y-uti/test.php:7

◦ 賛成 28 票 vs 反対 2票

Page 7: RFC: "var" Deprecation

Square bracket syntaxfor array destructuring assignmentlist を角括弧で書けたり

2016-05-25 第102回 PHP 勉強会 7

<?php

[$a, $b] = [3, 4];

echo "$a, $b" . "¥n";

// 実行結果

// 3, 4

◦ 賛成 41 票 vs 反対 0 票

待ち遠しいですね!PHP 7.1 は 12 月頃にリリース予定

Page 8: RFC: "var" Deprecation

RFC: "var" Deprecation賛否が分かれる RFC の議論は面白い

2016-05-25 第102回 PHP 勉強会 8

Page 9: RFC: "var" Deprecation

"var"クラスのプロパティを定義するキーワード

2016-05-25 第102回 PHP 勉強会 9

class Hoge {

var $fuga;

}

http://php.net/manual/ja/language.oop5.properties.php

Page 10: RFC: "var" Deprecation

RFC: "var" Deprecation提案内容◦ PHP 7.1 で varを廃止予定 (deprecated) にしよう

◦ PHP 8.0 で varを廃止 (its functionality removed) しよう

提案者◦ Colin O'Dell 氏

経緯◦ [2016-02-18] php-internals ML に投稿

◦ http://marc.info/?l=php-internals&m=145582267616585&w=2

◦ [2016-03-10] RFC 作成

◦ https://wiki.php.net/rfc/var_deprecation

2016-05-25 第102回 PHP 勉強会 10

Page 11: RFC: "var" Deprecation

Pros (賛成する立場の主張)

重複する機能を除去できる◦ varと public は同じ。片方でよい

public の方が広く使える◦ public static と書けるが varはダメ

◦ ちなみに 7.1 以降は public constとも書ける

今なら長い移行期間を取れる◦ PHP 8 のリリースは恐らく数年先

◦ 移行するのに十分な余裕がある

簡単に移行できる◦ varを public に変換すれば動く

◦ 変換スクリプトが提供された

レガシーな機能を除去できる◦ varは PHP 4 のレガシーな機能

◦ メジャーリリースでレガシーな機能を除去することは前例もある

既にあまり使われていない◦ varが使われているのは 4 ~ 8%

◦ Packagistの上位 10,000 パッケージ中

2016-05-25 第102回 PHP 勉強会 11

(RFC を意訳)

Page 12: RFC: "var" Deprecation

Cons (反対する立場の主張)

壊れていない◦ varに問題はない。緊急性がない

後方互換性を失う (BC break)◦ varを使うコードが動かなくなる

◦ BC breaks を軽んじてはいけない

機能的な恩恵がない◦ 開発者に何の新機能ももたらさない

◦ varを使っていない人は関係ない

◦ varを使っていた人は対応が必要

varと public は同じではない◦ 開発者の意図が違う可能性

2016-05-25 第102回 PHP 勉強会 12

(RFC を意訳)

Page 13: RFC: "var" Deprecation

"public" is Not The Same開発者が "public" と書いたら

2016-05-25 第102回 PHP 勉強会 13

class Hoge {public $fuga;

}

◦ この開発者は $fugaが public プロパティだと意図したに違いない

開発者が "var" と書いた場合

class Hoge {var $fuga;

}

◦ この開発者は $fugaが public プロパティだと意図しただろうか?

◦ たぶん No.

(php-internals での議論を私なりに解釈)

Page 14: RFC: "var" Deprecation

"public" is Not The Samevarから public への一括変換はコードの品質を落とす

品質不明なコードにこう書いてあったら

2016-05-25 第102回 PHP 勉強会 14

(php-internals での議論を私なりに解釈)

class Hoge {var $fuga;

}

◦ "var" という記述を見て「コードの臭い」に気がつく◦ この $fugaは public なのか private なのか・・・

◦ もしかすると static 変数かも?

◦ 適切なアクセス修飾子に置き換える

Page 15: RFC: "var" Deprecation

"public" is Not The Same機械的に一括変換してしまったら

2016-05-25 第102回 PHP 勉強会 15

(php-internals での議論を私なりに解釈)

class Hoge {public $fuga;

}

◦ もう「コードの臭い」に気づくのは難しい◦ この $fugaが実は private とか考えるだけでツライ

だから今現在 varが使われているコードは◦ 自動変換してはいけない

◦ 一つ一つ丁寧に修正すべき

といった様々な議論を経て・・・

Page 16: RFC: "var" Deprecation

投票結果

3123 賛成

反対

2016-05-25 第102回 PHP 勉強会 16

2/3 の賛成が必要

Page 17: RFC: "var" Deprecation

RFC: "var" Deprecation

2016-05-25 第102回 PHP 勉強会 17

Declined

varは今後も残されることになりました

Page 18: RFC: "var" Deprecation

まとめRFC を読んでみよう◦ 今後の PHP の新機能を先取りできる

RFC の議論も読んでみよう◦ プログラミング言語の開発者がどんなことを考えているのか分かる

2016-05-25 第102回 PHP 勉強会 18