Submit Search
Upload
PHP7で変わること ——言語仕様とエンジンの改善ポイント
•
175 likes
•
170,979 views
Yoshio Hanawa
Follow
PHPカンファレンス関西2015にて発表
Read less
Read more
Technology
Report
Share
Report
Share
1 of 51
Download now
Download to read offline
Recommended
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
こわくない Git
こわくない Git
Kota Saito
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
Recommended
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
Yoshio Hanawa
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
こわくない Git
こわくない Git
Kota Saito
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Hiro H.
C#とILとネイティブと
C#とILとネイティブと
信之 岩永
プログラムを高速化する話
プログラムを高速化する話
京大 マイコンクラブ
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
PHP の GC の話
PHP の GC の話
y-uti
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
ota42y
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
Minoru Nakamura
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
PHP7はなぜ速いのか
PHP7はなぜ速いのか
Yoshio Hanawa
PHPNGの動向
PHPNGの動向
Yoshio Hanawa
More Related Content
What's hot
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
Takafumi Yoshida
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
shinjiigarashi
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
alwei
PHP の GC の話
PHP の GC の話
y-uti
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
Reimi Kuramochi Chiba
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
infinite_loop
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Yahoo!デベロッパーネットワーク
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
ichikaway
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
ota42y
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
Minoru Nakamura
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Kohsuke Yuasa
What's hot
(20)
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
PHP 8 で Web 以外の世界の扉を叩く
PHP 8 で Web 以外の世界の扉を叩く
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
PHP の GC の話
PHP の GC の話
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
関数プログラミング入門
関数プログラミング入門
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Goでヤフーの分散オブジェクトストレージを作った話 Go Conference 2017 Spring
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
Redisの特徴と活用方法について
Redisの特徴と活用方法について
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
Nginxを使ったオレオレCDNの構築
Nginxを使ったオレオレCDNの構築
Rails上でのpub/sub イベントハンドラの扱い
Rails上でのpub/sub イベントハンドラの扱い
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
0円でできる自宅InfiniBandプログラム
0円でできる自宅InfiniBandプログラム
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
Similar to PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7はなぜ速いのか
PHP7はなぜ速いのか
Yoshio Hanawa
PHPNGの動向
PHPNGの動向
Yoshio Hanawa
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
Yoshio Hanawa
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Shohei Tai
Phpのはなし
Phpのはなし
Serverworks Co.,Ltd.
Phpでアプリケーションサーバー
Phpでアプリケーションサーバー
k-motoyan
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
Masashi Shinbara
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
Fumito Mizuno
PHPの今とこれから2007
PHPの今とこれから2007
Rui Hirokawa
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
Yoshio Hanawa
PHPの今とこれから2006
PHPの今とこれから2006
Rui Hirokawa
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Yuta Ohashi
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
Yoshio Hanawa
[TechLION] PHP Conference Japan 2014
[TechLION] PHP Conference Japan 2014
Yuki MAEJIMA
RFC: "var" Deprecation
RFC: "var" Deprecation
y-uti
PHPの今と未来を語る
PHPの今と未来を語る
Rui Hirokawa
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
Takako Miyagawa
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
y-uti
PHP選んで良かったこと
PHP選んで良かったこと
Wataru Terada
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
Hisao Soyama
Similar to PHP7で変わること ——言語仕様とエンジンの改善ポイント
(20)
PHP7はなぜ速いのか
PHP7はなぜ速いのか
PHPNGの動向
PHPNGの動向
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
爆速フレームワークでREST APIを作った話
爆速フレームワークでREST APIを作った話
Phpのはなし
Phpのはなし
Phpでアプリケーションサーバー
Phpでアプリケーションサーバー
先取り!PHP 7 と WordPress
先取り!PHP 7 と WordPress
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPカンファレンス北海道 php技術者認定上級試験を受けてみた
PHPの今とこれから2007
PHPの今とこれから2007
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
PHPの今とこれから2006
PHPの今とこれから2006
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
[TechLION] PHP Conference Japan 2014
[TechLION] PHP Conference Japan 2014
RFC: "var" Deprecation
RFC: "var" Deprecation
PHPの今と未来を語る
PHPの今と未来を語る
CodeIgniter Con Tokyo 2011 資料
CodeIgniter Con Tokyo 2011 資料
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
PHP選んで良かったこと
PHP選んで良かったこと
10分でわかるPythonの開発環境
10分でわかるPythonの開発環境
More from Yoshio Hanawa
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Yoshio Hanawa
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
Yoshio Hanawa
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
Yoshio Hanawa
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
Yoshio Hanawa
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
Yoshio Hanawa
GitHubからお金をもらった話
GitHubからお金をもらった話
Yoshio Hanawa
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
Yoshio Hanawa
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
Yoshio Hanawa
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Yoshio Hanawa
Laungage Update PHP編
Laungage Update PHP編
Yoshio Hanawa
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
Yoshio Hanawa
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
PHPの正規表現と最長一致
PHPの正規表現と最長一致
Yoshio Hanawa
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
Yoshio Hanawa
zval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
Yoshio Hanawa
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Yoshio Hanawa
More from Yoshio Hanawa
(20)
自宅の消費電力をリアルタイムに グラフ化してみた
自宅の消費電力をリアルタイムに グラフ化してみた
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
Zend VMにおける例外の実装
ぼくのかんがえる さいきょうの銀行振込
ぼくのかんがえる さいきょうの銀行振込
「OKグーグル! 銀行振込1000円」
「OKグーグル! 銀行振込1000円」
浮動小数点数とOSSのバグの話
浮動小数点数とOSSのバグの話
PHP拡張をPECLに登録してわかったこと
PHP拡張をPECLに登録してわかったこと
GitHubからお金をもらった話
GitHubからお金をもらった話
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
Laungage Update PHP編
Laungage Update PHP編
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
PHPの正規表現と最長一致
PHPの正規表現と最長一致
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
zval をダイエットしてみた
zval をダイエットしてみた
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Recently uploaded
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
Recently uploaded
(10)
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
PHP7で変わること ——言語仕様とエンジンの改善ポイント
1.
What’s new in
PHP7 PHP7で変わること ̶̶言語仕様とエンジンの改善ポイント hnw PHPカンファレンス関西2015 (2015/5/30)発表資料
2.
自己紹介 ❖ @hnw ❖ 勤務先:KLab株式会社 ❖
カレーとバグが大好物 ❖ PHP歴15年 ❖ PHPや周辺エクステンションにバグレポ・PR多数
3.
アジェンダ ❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
4.
まずはアンケート
5.
PHP7って 聞いたことがある人?
6.
実際にPHP7を 動かしたことがある人?
7.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
8.
PHP7? ❖ PHP 5.6.xの次のバージョンがPHP
7.0.0 ❖ PHP6はスキップ ❖ 約10年ぶりのメジャーバージョンアップ
9.
さいきんのPHP7 ❖ 予定通り3月に新機能の導入を凍結 ❖ RFCが大量に出ていたので個人的に心配していた ❖
そろそろalpha1を出す予定だったが、遅延ぎみ ❖ まだ議論が残っているため ❖ 11月にPHP7リリース予定
10.
PHPのRFCシステム ❖ 新機能の導入にはRFCと呼ばれる説明ページが必要 ❖ 提案内容や変更による影響などを書く ❖
MLで議論後、投票によって採用・不採用が決まる ❖ 過半数または2/3以上の同意が必要(内容による) ❖ スピード感は無いが、十分機能している印象
11.
PHP7に対するRFC ❖ PHP7で採択されたRFCは48個 ❖ 参考:PHP
5.6は17個、PHP 5.5は20個 →普段のマイナーバージョンアップよりは変化が大きい
12.
PHP7で変わらないこと ❖ PHPは言語仕様の変更に対して非常に保守的 ❖ PHP7でも後方互換性は重視されている ❖
移行コストは十分低いはず
13.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
14.
致命的エラーが例外になった ❖ PHP5までの致命的エラー ❖ エラーハンドリングできず、即座に終了していた ❖
PHP7の致命的エラー ❖ EngineExceptionという新しい例外になった ❖ トップレベルに到達すると今まで通りのエラーになる →ユニットテストで致命的エラーから復帰できる
15.
??演算子の新設 ❖ nullでなければその値を、nullなら右オペランドを返す ❖ isset()と同様に未定義値に対しても使える ❖
ようやくisset()地獄から解放されるぞ!
16.
無名クラスの導入 ❖ クラス定義と同時にインスタンス化できる構文を導入 ❖ その場限りのインスタンスを作りたいときに便利
17.
AST(抽象構文木)の導入 ❖ 解釈フェーズが 1段増えた ❖ 文法解釈の柔軟性が 上がった ❖
opcode最適化 Zend VM opcode Parser Lexer token PHP Zend VM opcode Parser Lexer token PHP Opcode Compiler AST PHP 5 PHP 7
18.
返り値のタイプヒントをサポート ❖ 関数の返り値に型が指定できるようになった ❖ 抽象クラスやインターフェースで指定すると便利
19.
スカラ型のタイプヒントをサポート ❖ 以下の型が引数・返り値で指定できるようになった ❖ int型 ❖
float型 ❖ string型 ❖ bool型 ❖ ようやく落としどころが見つかった
20.
非推奨だった機能を廃止 ❖ PHP5.6までに非推奨になった機能をPHP7で廃止 ❖ ereg関数(preg関数使ってね) ❖
mysql関数(mysqli関数かPDO使ってね) ❖ その他
21.
非推奨だった機能を廃止 ❖ 今までもdeprecated(非推奨)エラーが出ていたはず ❖ いま開発環境が
E_DEPRECATEDの人は注意 ❖ php.iniが空だとdeprecatedエラーは出ません
22.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
23.
PHP7は速いらしい ❖ 「PHP5より倍速い」 ❖ 「HHVMとほぼ互角」 ❖
ホントに?
24.
PHP7の性能(1) Zeevのブログ記事(2014/7)より
25.
PHP7の性能(2) DmitryのZendCon 2014での発表(2014/10)より
26.
PHP7の性能(3) RasmusのFluent 2015での発表(2015/4)より
27.
PHP7の性能(4) ❖ ごく最近まで性能改善が続いている
28.
速くなりすぎ? ❖ PHP7は確かに速い ❖ この1年で倍の高速化(WordPressで比較) ❖
今までも性能改善をサボっていたわけじゃない ❖ 10年間(PHP5.0→5.6)で倍の高速化 ❖ 5.4以降は頭打ちの感さえあった
29.
何があったのか? ❖ 現代のCPUに合わせて大幅なデータ構造変更を行った ❖ データ量の削減・データ局所性の改善 ❖
高速化チームの裁量が大きかった ❖ RFC「Move the phpng branch into master」 ❖ 様々なアイデアを約1年間に渡って実現
30.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
31.
データ構造の変更 ❖ PHP7で見直したデータ構造 ❖ PHPの変数(zval) ❖
文字列(zend_string) ❖ 配列(HashTable / Bucket) ❖ 特にzvalの見直しは非常に大胆だが有効だった
32.
データ構造変更の必要性(1) ❖ これまでのデータ構造は32bit CPUの頃の設計 ❖
16bytes中14bytesを使う構造だった ❖ 64bit CPUでは24bytes中6bytesが未使用 ❖ 64bit時代に対応したデータ構造が必要
33.
データ構造変更の必要性(2) ❖ キャッシュを効率的に使う発想が無い頃の設計 ❖ メモリやキャッシュが相対的に速かった ❖
現代のCPUではキャッシュを有効活用する必要性 ❖ CPU速度に比べるとメモリ速度の改善は鈍い ❖ キャッシュサイズもあまり増えていない
34.
PHP5のzval(int型) ❖ 計24bytes ❖ 常にポインタ参照される ❖
参照カウント&コピーオンライト
35.
PHP7のzval(int型) ❖ 計16bytes ❖ 参照カウントしない、代入では常にコピー
36.
新zvalへの評価 ❖ どの環境でも16bytes →64bit時代に対応 ❖ ポインタ参照が1段減った ❖
int型・float型・bool型でコピーオンライト廃止 →メモリ消費量減少 →キャッシュに優しくなった
37.
❖ PHP7で我々は本物の配列を手に入れた! 配列にも大改革
38.
❖ PHP7で我々は本物の配列を手に入れた! 配列にも大改革
39.
配列とは ❖ (典型的には)連続するメモリ領域を確保する ❖ インデックスは0から連続する数字 ❖
読み書きが高速 リンゴ バナナ トマト ニンジン 0 1 2 3
40.
連想配列とは ❖ 文字列をキーにできる ❖ そこそこ読み書きも速い(配列よりは遅い) "apple" 0 "banana"
"carrot" 1 2 3 4 5 6 7 キーのハッシュ値を計算 "apple"=>リンゴ"banana"=>バナナ "tomato"=>トマト "tomato" "carrot"=>ニンジン
41.
PHP5の配列 ❖ PHP5までは連想配列しか無かった ❖ $array[1]でも連想配列アクセスしていた ❖
他の言語の配列に比べると遅かった
42.
PHP7の配列 ❖ PHP7から配列と連想配列が作れるようになった ❖ 内部で自動的に選択される ❖
キーが0から連続する数字なら配列になる →for文での配列のループ処理が高速になった
43.
PHP7の配列 arData flagsrefcount type gc_info zend_array u
nTableMask nNumUsed nNumOfElements nTableSize nInternalPointer nNextFreeElement pDestructor zval Bucket[] h (hash value) key (キーへのポインタ) h key 0 1 h key 2 zval zval ❖ 他言語の配列と同じ構造 (数字キーのみの場合)
44.
Bucket構造体の改善 ❖ Bucket構造体:配列の要素1個に対応するデータ構造 ❖ PHP5(72bytes)→PHP7(32bytes) ❖
メモリ使用量が劇的に減った →配列のメモリ効率が良くなった
45.
Bucket構造体の改善 ❖ PHP7ではBucketの配列を連続領域に確保 ❖ PHP5では1個ずつメモリ確保していた →foreach文でのアクセス速度が有利に
46.
❖ PHP7、さいきんどう? ❖ PHP7の新機能 ❖
性能改善と背景 ❖ データ構造の変更 ❖ HHVMとPHP
47.
HHVMとは ❖ Facebookが自社向けに開発したPHPの実装 ❖ PHP5より断然高速 ❖
PHPコアコミッターがフルタイムでHHVMにコミット ❖ OSS開発もうまく回っている →PHPでは初の「もう一つの選択肢」
48.
HHVMの評価 ❖ PHP7の登場で速度面のアドバンテージは失った ❖ JITコンパイルが効く状況では速い ❖
実アプリケーションでの差は縮まった ❖ 魅力は多い ❖ 開発の活発さ、フットワークの軽さ ❖ Hack言語の仕様面での挑戦(例:async)
49.
選択肢があることの価値 ❖ HHVMはPHPに新しい価値を与えてくれた ❖ 必要に応じて別の実装を選べる状況 ❖
PHP7での速度改善のモチベーション ❖ PythonやRubyでは当たり前の状況 ❖ お互いに良い影響を与え続ける関係が望ましい
50.
まとめ ❖ PHP7への移行のハードルは低い ❖ 便利そうな新機能が実装された ❖
高速化のため大胆なリファクタリングが行われた ❖ 現代のアーキテクチャに合わせた最適化をした ❖ 他の選択肢があることに価値がある ❖ PHPもHHVMも盛り上がっていってほしい
51.
ご静聴 ありがとう ございました
Download now