# HG changeset patch # User Kaito Tokumori # Date 1383643471 -32400 # Node ID da013b704b5a5ed0ebf34648aa8e6e3bd6cf4bcc # Parent cc02718aa4be90eba59c3db12dd381773ad400f3 fix misspell diff -r cc02718aa4be -r da013b704b5a 2013_mid.tex --- a/2013_mid.tex Sun Nov 03 22:31:18 2013 +0900 +++ b/2013_mid.tex Tue Nov 05 18:24:31 2013 +0900 @@ -28,7 +28,7 @@ \thispagestyle{fancy} \section{背景及び研究目的} -現代社会においてプログラムは様々な場所で用いられ,その用途に応じて求められる要素も様々である.例えば Real-time な制御が重要視される場合には速度が,組込みシステムなどのメモリが制限される環境では軽量なプログラムが求められる.軽量で高速であるという条件に最も適しているのはアセンブリ言語であるが,低レベル過ぎてわかりづらい上に,アーキテクチャへの依存性が高いため汎用的でない.当研究室ではそういった要求に応える言語として Continuation based C (以下 CbC) を提案している. +現代社会においてプログラムは様々な場所で用いられ,その用途に応じて求められる要素も様々である.例えば Real-time な制御が重要視される場合には速度,組込みシステムなどのメモリが制限される環境では軽量なプログラムが求められる.軽量で高速であるという条件に最も適しているのはアセンブリ言語であるが,低レベル過ぎてわかりづらい上に,アーキテクチャへの依存性が高いため汎用的でない.当研究室ではそういった要求に応える言語として Continuation based C (以下 CbC) を提案している. CbC のコンパイラは2001年に micro-c をベースとしたものが開発され,続いて2008年の研究により GCC ベースのものが開発された.これにより GCC の持つ最適化の恩恵を受けることに成功している.しかし、 Mac OS X の最新版である Mavericks が C コンパイラとして GCC ではなく clang を用いるようになったことや, LLVM にも GCC 同様に強力な最適化機能が存在し,さらにエラーメッセージが GCC に比べ丁寧であるという特徴を持つことから, GCC から clang に移り変わる人々も少なくない.そこで本研究では, micro-c , GCC に続く LLVM/clang ベースのコンパイラの開発を行う. \section{Continuation based C (CbC)} CbC のでは処理をコードセグメントという単位で記述し,コード間の移動に goto (軽量継続)を用いる. @@ -51,8 +51,8 @@ \subsection{コードセグメント (code segment)} コードセグメントは C の関数と異なり戻り値を持たず, 処理が終われば次のコードセグメントへと処理を移る. C において関数呼び出しを繰り返し行う場合, 呼び出された関数の引数の数だけスタックに値が積まれていく. -しかし, 戻り値を持たないコードセグメントではスタックに値を積んでいく必要な無く, スタックは変更されない. -このようなスタックに値を積まない継続,つまり呼び出し元の環境を持たない継続を軽量継続と言い,軽量継続により並列化, ループ制御, 関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる. +しかし, 戻り値を持たないコードセグメントではスタックに値を積んでいく必要が無く, スタックは変更されない. +このようなスタックに値を積まない継続,つまり呼び出し元の環境を持たない継続を軽量継続と呼び,軽量継続により並列化, ループ制御, 関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようになる. \section{LLVM/clang 3.4 上での実装} ここではLLVM/clang 3.4 上でどのように CbC コンパイラを実装するかについて述べる. @@ -136,4 +136,4 @@ \bibitem{6}Clang API Documentation.\\ ``http://clang.llvm.org/doxygen/" \vspace{-3mm} \end{thebibliography} -\end{document} \ No newline at end of file +\end{document}