aboutsummaryrefslogtreecommitdiffhomepage
path: root/slide.saty
blob: af92bd0cce40d6de3cf6aa77d0e6e3b446271041 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
@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(`<?php

if ($x) {
  foo();
} else {
  bar();
}

`#);
  >

  +frame{トリビア}<
    +p{INI の設定の y2k_compliance}
    +p{}
    +p{2000年問題に対応するための設定}
    +p{Off にすると日付の年の出力が下2桁に変わる}
  >

  +frame{まとめ}<
    +listing{
      * PHP 3.0 は案外ビルドできる
      * 素朴な実行アーキテクチャ
      * 25年の進化
    }
  >

>