Page 1
Language Update PHP 2018
<?php
2018-08-26 Learn Languages 2018
#ll2018
公開日:
by USAMI Kenta@tadsan
に東京都大田区の日本工学院専門学校 蒲田キャンパスで開催された『Learn Languages 2018』でLanguage Update(15分)として発表しました。
<?php
2018-08-26 Learn Languages 2018
#ll2018
基本はWebから始まって動的言語やってきた
<?php
みんな大好きPHP
(暗黒微笑)
リアルワールドでのシェアの割にプログラミング言語として興味関心の対象としてる人は多くない印象
😇
“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
原作者のRasmusはプログラミング言語の設計にはあまり関心がない
おしながき
1. PHPの開発体制2. 言語としての特徴3. 最近の動向と「次」
PHPの開発体制
Rasmusは「最初の開発者」であってGuidoやMatzのようなBDFLではない(Wikipediaの一覧には載ってるけど…)
機能追加や改廃はRFCにまとめられMLで議論された後にコミッターによる投票で決まるプロセス
https://wiki.php.net/rfc/voting
PHPの行く末を知りたければRFCをウォッチすればよい
https://wiki.php.net/rfc
https://php-rfc-watch.beberlei.de/
https://wiki.php.net/rfc
言語としての特徴
Webアプリを最もゆるふわ簡単に構築できる言語
昔ながらのCGIと同じくレンタルサーバー借りてファイルを置けば設置完了
現在ではレン鯖にFTPで転送とかよりHerokuにgit pushした方がずっと簡単じゃね?と僕も思ってるけど、PHPが利用される界隈的にそこまで主流の選択肢とはされない感じがある
PHPは様々な要素を併せ持つ
1. HTMLテンプレート2. PerlっぽいCGI 3. Javaっぽいクラス
“PHPにはprotectedプロパティも抽象メソッドもありますよ。計算機科学の教授が「使え」と言ってるものは全部。そんなことはクソ興味ないですけど”
–Rasmus Lerdorf
計算機科学の教授が使えと言ってるものは全部
全部とは言ってない↑↑↑
抽象クラス, トレイト, インターフェイス, ジェネレータ, イテレータ, クロージャ, 函数の動的呼び出し, 無名クラス, eval, 型宣言, 連想配列, リフレクションAPI, 自己文書化, 標準入出力の読み書き, REPL, クラスの遅延ロード
foreachでイテレーションできるモノをユーザー定義で作れる
ストリーム(遅延リスト・無限リスト)も当然扱える
創意工夫でかなりの使いでがある
継承なしでクラスに実装追加できる
複数トレイトの衝突を解決できる
優先順位の定義・メソッド名変更
つまり「本物の」トレイトの実装
Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, Andrew P. Black(2002)Traits: Composable Units of Behaviour
実行時に未定義クラスが登場したときにファイルを読み込むロジックをユーザー定義できる
いちいちrequire_onceを書かない
不必要なファイルが読み込まれない
AOP メタプログラミングの温床
Composerを利用するのが鉄板構成
最近の動向
PHP7.0は12月1日前後にリリースされるスケジュールで概ね固定されてる
http://php.net/supported-versions.php
2年間のメンテと1年間のセキュリティ修正
大事なお知らせです
2004年から長らくご愛顧いただいだきましたPHP5.xの公式サポートは2018年をもって完全に終了いたします。(5.6のSecurity fixes終了)
ついでにPHP7.0のSecurity fixesも12月3日に終了するので7.1または7.2系にアップデートしましょう。
あくまでThe PHP Groupからのリリースの話なので、脆弱性が出たら各ディストリ独自のアップデートがあると思いますが。
ご安全に。
(言語コア)
PHP 5.6→ 7.0
これは内部構造の最適化と型宣言の追加が目玉
http://d.hatena.ne.jp/hnw/20160828
PHP 7.1以降
微妙に書きにくかった文法の修正と危険な機能の非推奨化(削除)が中心
nullableの追加
函数戻り値にvoidが書けるように
配列分解の短縮構文
クラス定数に可視性を定義可能に
private const
型宣言にobjectが書けるように
継承時にメソッドの型宣言を省略可
クラスのグループ表記ケツカンマ可
7月にfeature freezeされ現在beta2
函数呼び出し引数のケツカンマ可
ヒアドキュメント/nowdocの改善終端行判定がシビアだったのが緩和行頭空白をトリムできるように
PHP 7.4?
typed propertyが入る…かも(議論中)これは比較的確度高そう
Fiberが入る… かも(議論中)PHPで非同期処理は伝統的に鬼門取り込まれるまでハードル高そう
PHP5時代の負債っぽい仕様は一掃?臆測です
JITが入る…?ほんとにうまくいくの?
ローカル変数の型付け?typed propertyの流れで視野内
(関連コミュニティ)
2018年はPHPコミュニティ・カンファレンスが活発化した一年だった
iOSDC主宰の長谷川さん(@tomzoh)がPHPカンファレンスと別にPHPer Kaigiを開催してコミュニティに火をつけた
各地域のCFP応募数が倍増した
2019年は既に例年以上の開催告知
PHPerKaigi 2019
地域: 福岡/仙台(New!)/札幌
フレームワーク: CakePHP, Laravel
JetBrains社のPHP(+WEB)専用IDE
静的解析機能がめっちゃ※強い(PHP比)
入力補完やエラー表示が強い
簡単な型推論はしてくれる
PHPDocの型記述を読んでくれる
リファクタリング機能がある
PhpStorm登場以前は単純なコードのスタイルや複雑度を検査するものが多かった
PhpStorm以後は変数のスコープや静的な型検査をベースにチェックできるツールが増えた
Phan, PHPStan, Psalm
ポピュラーなライブラリやフレームワークはPHPDocが整備されてるので、PhpStormを入れるだけで十分補完が機能する状態
一方で仕様の標準化と実装は難航
PhpStormがPSR-5入れてくれない
IntersectionType(非標準)入りそう
PHPでは実行モデル的に鬼門↑情報科学の教授に怒られそう
それを解決しようとする動きがある
Swoole https://www.swoole.com/
Fiber(RFC) https://wiki.php.net/rfc/fiber
PHP-Promise(ext)https://github.com/php-promise/promise
あんまり景気よくなさそう
初心者向けの入門書は結構出てる
最新のモダンな開発事情を伝えるものはずっと出てない
パーフェクトPHPは2014年
いまがんばって企画書を書いてます
まとめ
PHPの活用領域は多様
言語としては従来の「負債」を解消する方向の変更が多い
PHPを継続的に静的解析できる環境が既に揃ってるので既存プロジェクトの改善や新規開発の効率化の大きな武器になる
