てきとうなさいと べぇたばん

言語実装パターンを読み始めるメモ たぶん1

買った本。

行き詰った…

コンピュータシステムの理論と実装を読んでみたものの、バーチャルマシンで躓いた。

言語実装パターン

言語実装パターンという本は、言語の実装によるいろいろな解析方法がのっていて、すごく面白そうだった。というか発情してた。

アプリケーションを解体する

Cコンパイラの解体が面白かった。復習してみよう。

最初に前処理を施す。

$ cpp tmp.c tmptmp.c

なんか変なの出てくる

$ cat tmptmp.c
# 1 "tmp.c"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 324 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 "tmp.c" 2
void f() {;}

アセンブリコードを出してみる

$ gcc -S tmptmp.c

アセンブリコードを見てみる

$ cat tmptmp.s
    .section    __TEXT,__text,regular,pure_instructions
    .macosx_version_min 10, 11
    .globl    _f
    .align    4, 0x90
_f:                                     ## @f
    .cfi_startproc
## BB#0:
    pushq    %rbp
Ltmp0:
    .cfi_def_cfa_offset 16
Ltmp1:
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
Ltmp2:
    .cfi_def_cfa_register %rbp
    popq    %rbp
    retq
    .cfi_endproc


.subsections_via_symbols

よくわかんないけど、へええ〜

アセンブルする

$ as -o tmptmp.o tmptmp.s

いつもの.oファイルが出来上がった。なるほど。

なるほど、性能の良いアセンブリコードを吐き出そうとすると、ありとあらゆるアルゴリズムやら理論やらが出てきておぞましいレベルに複雑怪奇になるようだ。ここからはドラゴンブックを読めーとのこと。

うーん、やっぱり

バーチャルマシンを構築することに全力を注いだほうが良いのかもしれないなあ。コンパイラというレベルのものを作ろうとすると多分これ行き詰まるかもしれないぞ。

言語実装パターンを読み進めていって、実装のパターンを見て回ってから考えよう。