🐘

PHPBrewでPHP8を入れる

2020/11/27に公開

PHP8が出た

2020年11月26日にPHP8が正式リリースされました🎉
https://www.php.net/archive/2020.php#2020-11-26-3

色々と変わったPHP8を触ってみたいですよね?PHPBrewならできます。

PHP8をインストールする

PHPBrewにPHP8.0.0対応版が出ておりました。
https://github.com/phpbrew/phpbrew/releases/tag/1.27.0

以前の記事では、PHPBrewでPHPの環境を作っていたので、PHPBrewを使ってみたいと思います。
PHPBrewを使用していない人で、PHPBrewを使いたいと思ったなら、以前の記事をご確認ください。
https://zenn.dev/sapi_kawahara/articles/20201029-mac-development-settings#php

すでにPHPBrewを使用した場合は、オプションのknownでリリース情報を更新します、が・・・。

phpbrew known --update

しかしPHP8はでてきません。
そのためinitを実行してから、再びknownでリリース情報を更新します。

phpbrew init
phpbrew known --update

updateするとPHP8.0.0が出てくるので(2020年11月27日現在)、PHP8.0.0をインストールします。

phpbrew install 8.0.0 +default +dbs +curl +openssl=/usr/local/Cellar/openssl@1.1/1.1.1h

インストールしたら有効にする。

phpbrew switch php-8.0.0

バージョン表示します。

php -v

PHP 8.0.0と表示されればOKです。

PHP 8.0.0 (cli) (built: Nov 27 2020 18:21:26) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

それでは楽しいPHP8 LIFEを楽しんでください。

JITの検証

デフォルトではJITは有効になっていません。
JITを有効にするには設定ファイルをいじります。

~/.phpbrew/php/php-8.0.0/etc/php.ini

コメントを外します。

zend_extension=opcache

0を1に変更します。

opcache.enable_cli=1

追記します。

opcache.jit=on
opcache.jit_buffer_size=100M

ベンチを動かしてみます。
https://github.com/php/php-src/blob/master/Zend/bench.php

検証機は「MacBook Pro 2019 13-inch 2.4GHz クアッドコアIntel Core i5」です。
以下にPHP 8の結果を表示します。

% php bench.php
simple             0.002
simplecall         0.001
simpleucall        0.001
simpleudcall       0.001
mandel             0.007
mandel2            0.008
ackermann(7)       0.008
ary(50000)         0.004
ary2(50000)        0.005
ary3(2000)         0.008
fibo(30)           0.019
hash1(50000)       0.006
hash2(500)         0.005
heapsort(20000)    0.007
matrix(20)         0.005
nestedloop(12)     0.003
sieve(30)          0.004
strcat(200000)     0.002
------------------------
Total              0.097

もたつきが感じられません!!すごい!

速度の差を感じたいので、PHP 7.4.13でも動かしてみます。

% php bench.php
simple             0.023
simplecall         0.009
simpleucall        0.024
simpleudcall       0.024
mandel             0.086
mandel2            0.099
ackermann(7)       0.025
ary(50000)         0.006
ary2(50000)        0.006
ary3(2000)         0.041
fibo(30)           0.085
hash1(50000)       0.011
hash2(500)         0.007
heapsort(20000)    0.025
matrix(20)         0.022
nestedloop(12)     0.043
sieve(30)          0.013
strcat(200000)     0.004
------------------------
Total              0.553

PHP8は5倍近い速度で動きますね。
想像以上にPHP8のJITは早いですねー。

Discussion