aboutsummaryrefslogtreecommitdiffhomepage
path: root/slide.saty
blob: c28612a3bdbf51b20761c566c8b7b171f620091c (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
@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{まとめ}<
    +listing{
      * PHP 3.0 は案外ビルドできる
      * 素朴な実行アーキテクチャ
      * 25年の進化
    }
  >

>