comparison implementation.tex @ 5:dfb89e32eea1

added gcc.tex, conclusion.tex and some sources. writed abstraction.
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Mon, 08 Feb 2010 00:35:58 +0900
parents 30c102343b37
children 8ef81ff8cb52
comparison
equal deleted inserted replaced
4:30c102343b37 5:dfb89e32eea1
1
2 \chapter{GCCにおける実装・改善} 1 \chapter{GCCにおける実装・改善}
3 \label{chp:impl} 2 \label{chp:impl}
4 3
5 この章では、GCCにおけるCbCコンパイラの実装方法と、 \ref{chp:cbc}章で洗 4 この章では、GCCにおけるCbCコンパイラの実装方法と、 \ref{chp:cbc}章で洗
6 い出したGCCでの問題点の改善を行う。 5 い出したGCCでの問題点の改善を行う。
424 この処理で全てのコードセグメントがfastcall対応となり、軽量継続の際には 423 この処理で全てのコードセグメントがfastcall対応となり、軽量継続の際には
425 レジスタ\verb|ecx,edx|に引数をのせることが可能となる。 424 レジスタ\verb|ecx,edx|に引数をのせることが可能となる。
426 425
427 426
428 \subsection{プロトタイプ自動生成} \label{sec:prototype} 427 \subsection{プロトタイプ自動生成} \label{sec:prototype}
429 Cのプロトタイプ宣言はコンパイル時のエラー検出に役立っている。 428 Cのプロトタイプ宣言はコンパイル時のエラー検出に役立っている。しかしCbC
430 しかしCbCのコードセグメントには返り値は存在しない。また状態遷移記 429 のコードセグメントには返り値は存在しない。また状態遷移記述という性質上
431 述という性質上、プログラムを記述する際は上から下に実行順にコードセ 430 、プログラムを記述する際は上から下に実行順にコードセグメントを並べるこ
432 グメントを並べることが多いため、プロトタイプ宣言をするとそれが膨大 431 とが多いため、プロトタイプ宣言をするとそれが膨大な数になる。
433 な数になる。
434 432
435 また、mcベースコンパイラの方ではプロトタイプ宣言を減らすため、一種の簡 433 また、mcベースコンパイラの方ではプロトタイプ宣言を減らすため、一種の簡
436 単な型推論を実装している。そのためこれまでに作られたCbCのプログラムで 434 単な型推論を実装している。そのためこれまでに作られたCbCのプログラムで
437 は特殊な場合を除いてプロトタイプ宣言がほとんどなく、GCCでコンパイルす 435 は特殊な場合を除いてプロトタイプ宣言がほとんどなく、GCCでコンパイルす
438 る際に問題となる。 436 る際に問題となる。
439 437
440 この問題に暫定的に対処するため、Pythonを用いてプロトタイプの自動生成を 438 これらの問題に暫定的に対処するため、Pythonを用いてプロトタイプの自動生
441 行うスクリプトを作成した。このスクリプトでは関数の定義部を正規表現で検 439 成を行うスクリプトを作成した。このスクリプトでは関数の定義部を正規表現
442 索し、マッチする部分を変換して関数宣言として出力する。 440 で検索し、マッチする部分を変換して関数宣言として出力する。
443
444 全コードは付録\ref{apx:make-prototype}に掲載する。 441 全コードは付録\ref{apx:make-prototype}に掲載する。
445 442
443 このプトロタイプ自動生成により、これまでに作られたCbCのプログラムとの
444 互換性が確保できた。
445
446 % TODO: prototype declaration 446 % TODO: prototype declaration
447 447
448 448