@require: class-slydifi/theme/akasaka @require: code-printer/code-design @require: code-printer/code-printer @require: code-printer/code-syntax @require: code-printer/code-theme @require: figbox/figbox let-block +code-block-php source = '< +code-printer?:( CodePrinter.make-config CodeSyntax.php CodeTheme.iceberg-light |> CodePrinter.set-number-fun CodeDesign.number-fun-null )(source); > open FigBox in document '< +set-config(| SlydifiThemeAkasaka.default-config with color-emph = Color.black; |); +make-title(| title = { |PHP 3.0 の処理系のソースを読んでみる |}; author = {|nsfisis (いまむら)|}; date = {|第155回PHP勉強会@東京|}; |); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +frame{自己紹介}< +fig-center(vconcat [ gap 75pt; hconcat [ textbox{nsfisis (いまむら)}; gap 20pt; include-image 50pt `assets/me.jpeg`; ]; gap 20pt; textbox{\@ デジタルサーカス株式会社}; ]); > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +frame{なぜ PHP 3.0 か?}< +p{ソースコード入手できる最も古いバージョン} +p{} +p{"PHP" が PHP: Hypertext Preprocessor の略になった最初のバージョン} > +frame{ビルドする}< +p{ソースコードをダウンロードして、./configure して make} > +frame{ビルドする}< +p{ソースコードをダウンロードして、configure して make} +p{} +p{動いた。} > +frame{いろいろ数えてみる}< +p{3.0.18 と 8.2.9 で比較してみる} +p{} > +frame{いろいろ数えてみる}< +p{3.0.18 と 8.2.9 で比較してみる} +p{} +listing{ * ファイル数 (マニュアル除く) ** 412 から 2249 (約5.5倍) } > +frame{いろいろ数えてみる}< +p{3.0.18 と 8.2.9 で比較してみる} +p{} +listing{ * ファイル数 (マニュアル除く) ** 412 から 2249 (約5.5倍) * 行数 (マニュアル除く) ** 174,325 から 1,950,657 (10倍以上) } > +frame{いろいろ数えてみる}< +p{3.0.18 と 8.2.9 で比較してみる} +p{} +listing{ * ファイル数 (マニュアル除く) ** 412 から 2249 (約5.5倍) * 行数 (マニュアル除く) ** 174,325 から 1,950,657 (10倍以上) * 関数 (全拡張を有効にしてビルドした場合) ** 1313 から 2153 (約1.6倍) } > +frame{コードリーディング}< +p{全体的な実行フローが大きく異なる} > +frame{コードリーディング}< +p{全体的な実行フローが大きく異なる} +p{} +p{8.2: パースして AST を構築、VM 命令を生成して実行} +p{3.0: パースして実行} > +frame{if の実行}< +code-block-php(` +frame{トリビア}< +p{INI の設定の y2k_compliance} +p{} +p{2000年問題に対応するための設定} +p{Off にすると日付の年の出力が下2桁に変わる} > +frame{まとめ}< +listing{ * PHP 3.0 は案外ビルドできる * 素朴な実行アーキテクチャ * 25年の進化 } > >