「PHPはどのように動くのか」を読んだ。その後、Zend EngineとGCのこともちょこっと勉強。

娘の絵本を書いに行った本屋で、面白そうだなーと思って買ってみた。

books.rakuten.co.jp

感想

面白かった!流し読みしただけだけど。「俺、今、難しい本を読んでるぞ!」って雰囲気で「なるほど?」とか言うのを楽しんだ(分かってない

第2章 オペコードのパフォーマンスを考える

オペコードを見ながら「こうなるからパフォーマンスに違いがでるんだよ」って教えてくれてるの「へー!」ってなって面白かった。

第3章 PHPコアの仕組みと開発の定石を知る

zval構造体とかコピーオンライトとかHashTableの仕組みとかの説明が書いてあって面白かった。「zvalは、どの型にも対応している、美しく万能な構造体です」ってところが好き。

第4章 オブジェクト指向だとなぜ遅いのか

第5章 PHP7はなぜ速くなったか

ここまでの説明が全部つながってる感じがしたなー。PHP5とPHP7のコピーオンライトの対応の違いがzvalの作りからも分かるの嬉しい。「PHP7ではその(zvalの)美しさを捨てて、型を差別化することにしました」ってところが好き。

その後の章は

ExtensionとZend Engineのハックなので、本当にさらっと読んだ。

全体的に

自分の理解力のせいでふわっとしか分かってないけど、でも裏側でどういうことが起こってるのかを雰囲気知ることができたので、楽しかった!

読んだ後

Zend Engineの名前のルーツはなんだろう?って気になって見つけた記事。Zendって名前はそういうことなのかー。

[ThinkIT] 第1回:意外と知らないZend Engine (1/3)

Zend Engineについてのスライド。めっちゃ分かりやすい。

www.slideshare.net

そのスライドの中で紹介されてたGCのお話のスライド。これもめっちゃ分かりやすい。

www.slideshare.net

なるほど?

❯ cat hello.php
<?php

$name = "World";
echo "Hello, {$name}";

❯ phpdbg -p\* hello.php
function name: (null)
L1-5 {main}() /path/to/hello.php - 0x7fde320700a0 + 5 ops
 L3    #0     ASSIGN                  $name                "World"                                  
 L4    #1     NOP                                                                                   
 L4    #2     FAST_CONCAT             "Hello, "            $name                ~1                  
 L4    #3     ECHO                    ~1                                                            
 L5    #4     RETURN<-1>              1                                                             
[Script ended normally]

さて

普通のPHP入門の勉強に戻ろっと。