Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 35:2c8513196d56
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 31 Jan 2021 18:05:20 +0900 |
parents | fad87973f26a |
children | 2db854686b4a |
files | paper/chapter/02-perl.tex paper/chapter/gears.tex paper/drawio/generate_context.drawio paper/master_paper.pdf |
diffstat | 4 files changed, 24 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/02-perl.tex Sun Jan 31 17:37:28 2021 +0900 +++ b/paper/chapter/02-perl.tex Sun Jan 31 18:05:20 2021 +0900 @@ -128,6 +128,17 @@ \texttt{impl2cbc.pl}の処理の概要を図\ref{fig:impl2cbc}に示す。 +\begin{figure}[hp] + \begin{center} + \includegraphics[width=130mm]{drawio/impl2cbc.pdf} + \end{center} + \caption{impl2cbcの処理の流れ} + \label{fig:impl2cbc} + \end{figure} + +\subsection{雛形生成の手法} + + Interfaceでは入力の引数がImplと揃っている必要があるが、 第一引数は実装自身のインスタンスがくる制約となっている。 実装自身の型は、Interface定義時には不定である。 その為、 GearsOSではInterfaceのAPIの宣言時にデフォルト型変数\texttt{Impl}を実装の型として利用する。 @@ -147,6 +158,8 @@ 雛形を生成する場合は、入力として与えられたCodeGearを除外して出力を行う。 順序はInterfaceをまず出力した後に、 Impl側を出力する。 + +\subsection{コンストラクタの自動生成} 雛形生成では他にコンストラクタの生成も行う。 GearsOSのInterfaceのコンストラクタは、 メモリの確保及び各変数の初期化を行う。 メモリ上に確保するのは主にInterfaceとImplのそれぞれが基本となっている。 @@ -159,14 +172,6 @@ 自動生成機能を作成すると1CbCファイルあたりの記述量が減る利点がある。 -\begin{figure}[htp] - \begin{center} - \includegraphics[width=130mm]{drawio/impl2cbc.pdf} - \end{center} - \caption{impl2cbcの処理の流れ} - \label{fig:impl2cbc} - \end{figure} - 明示的にコンストラクタが書かれていた場合は、 Perlスクリプト内での自動生成は実行しないように実装した。 これはオブジェクト指向言語のオーバーライドに相当する機能と言える。
--- a/paper/chapter/gears.tex Sun Jan 31 17:37:28 2021 +0900 +++ b/paper/chapter/gears.tex Sun Jan 31 18:05:20 2021 +0900 @@ -6,14 +6,20 @@ \section{GearsOSのビルドシステム} GearsOSではビルドツールにCMakeを利用している。 +ビルドフローを図\ref{fig:gearsbuild1}に示す。 CMakeはautomakeなどのMakeファイルを作成するツールに相当するものである。 GearsOSでプログラミングする際は、ビルドしたいプロジェクトをCMakeLists.txtに記述する。 CMakeは自身がコンパイルをすることはなく、ビルドツールであるmakeやninja-buildに処理を移譲している。 CMakeはmakeやninja-buildが実行可能なMakefile、 build.ninjaの生成までを担当する。 -ビルドフローを図\ref{fig:gearsbuild1}に示す。 -\begin{figure}[htp] +GearsOSのビルドでは直接CbCコンパイラがソースコードをコンパイルすることはなく、 間にPerlスクリプトが2種類実行される。 +Perlスクリプトはビルド対象のGearsOSで拡張されたCbCファイルを、純粋なCbCファイルに変換する。 +ほかにGearsOSで動作する例題ごとに必要な初期化関数なども生成する。 +Perlスクリプトで変換されたCbCファイルなどをもとにCbCコンパイラがコンパイルを行う。 +ビルドの処理は自動化されており、 CMake経由でmakeやninjaコマンドを用いてビルドする。 + +\begin{figure}[hp] \begin{center} \includegraphics[width=120mm]{drawio/geasflow1.pdf} \end{center} @@ -39,7 +45,7 @@ GearsOSはビルドツールにCMakeを利用しているので、 CMakeでクロスコンパイル出来るように工夫をする必要がある。 -ビルドに使用するコンパイラやリンカはCMakeが自動探索し、 決定した上でMakefileやNinjaファイルを生成する。 +ビルドに使用するコンパイラやリンカはCMakeが自動探索し、 決定した上でMakefileやbuild.ninjaファイルを生成する。 しかしCMakeは今ビルドしようとしている対象が、自分が動作しているアーキテクチャかそうでないか、クロスコンパイラとして使えるかなどはチェックしない。 つまりCMakeが自動でクロスコンパイル対応のGCCコンパイラを探すことはない。 その為そのままビルドするとx86用のバイナリが生成されてしまう。 @@ -55,7 +61,7 @@ \texttt{pmake.pl}を経由してCMakeを実行すると、 makeコマンドに対応するMakefile、 ninja-buildに対応するbuild.ninjaが生成される。 以降はcmakeではなくmakeなどのビルドツールがビルドを行う。 -\begin{figure}[htp] +\begin{figure}[h] \begin{center} \includegraphics[width=160mm]{drawio/pmake.pdf} \end{center}
--- a/paper/drawio/generate_context.drawio Sun Jan 31 17:37:28 2021 +0900 +++ b/paper/drawio/generate_context.drawio Sun Jan 31 18:05:20 2021 +0900 @@ -1,1 +1,1 @@ -<mxfile host="Electron" modified="2021-01-31T06:36:48.983Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="7gol1OF82dDAk7nHGcjO" version="14.1.8" type="device"><diagram id="R4LYdndaMt07X_-nVjS0" name="ページ1">5Vrfb5swEP5rIm2TGmEIhDx2afdLm1apD12fJhdc8GowM6Yh++tngx0wIR3d6Fi6p+C7M9jf3X13mMycdVK+ZTCLP9EQkZltheXMOZvZNlhYnviRkm0t8X2rFkQMh8qoEVziH0gJtVmBQ5QbhpxSwnFmCgOapijghgwyRjem2S0l5lMzGKE9wWUAyb70Coc8Vruwl438HcJRrJ8MvFWtSaA2VjvJYxjSTUvknM+cNaOU11dJuUZEgqdxqee9OaDdLYyhlA+ZcHXyZQvcK+dTci/8RG3r7OuHE6Dck/Ot3jEKBQBqSBmPaURTSM4b6WtGizRE8raWGDU2HynNhBAI4TfE+VZ5ExacClHME6K0qMT8i5w+d9XouqU5K9Wdq8G2NbhADCeII6Zkt5iQNSWUVSt3HMeywKmQ55zRu52/HCGpdym3dhA9JcppwQL0AGSOikLIIsQfgtbeOVlkB6Ji4WwrJjJEIMf35kKgCtNoZ6emnjIGty2DjOKU5607X0iBMFAZZ3sq3FS+Od2oeJy9uKhXoEetrTSiKtIeEXUKwntICgXDXhSKbMnkZUq5DLlNjDm6zGDlmY2gGjOgbmBwF1Vh+bngBKdIyUPI7j6LWZhXYTS33F0s3CPGUflwNOw7T0+wTdSARnHTcATQFBa3+UEb9jm8BfrjMbWPHdNVB9LV5JCCHkg9wiXx0CqHGmy97wXVipO84r1TYQD8rGyU4iqSvxcFQ0K5vlnLioTFLdRtb5g2efFqHmipWHv9vFr18sj8ujT9ajuT+3Vx7KniuB1MJ4fUPXpIO4zuTg4pWEzamrUas10vJrGSKLRas5Xu4Lq9mcCdbVtNnhxet3VNm1eNdJ83rKdbjNvTeX+rp/ujiPAO1qM8g+nv16P3qXDbrczEB8pR/HJf3KpQ9Qq0+LhS3zJTf/rGY3n8bOoakDrT06l/7Jjaqw6m/uSYAvdZligwSoka+dhhdRQlavVUJSrJyP9ZneylmfaL6Zt9/bTRvRwII1Tyefw8XOf/e6++YDklY+vr61n77PfAee+OnI23h7nrOb+g52rU5fp9bj7E4iHM42qzYFwCB/ZQBrf6o+rvMDhY/SsR8ovvATo+TkTCeotOkPxOiBiOHx4vk4SIP2mI9J01j3EwGqEUMcjRV10IZNHvPQTdj1FCcJYPKAIwz+rvhLe4lN4eg+jdxQCi9/uI3n8you973xmjRqO0SA53YlK7piFqSnijlLozyOEzbtb8zte0hTV5xbcPN2tDk1Ug0BMIOM0KPjQ9ZTabrqkJVhNqSqVvDI5VIkhwlIphgNKKql9LB+EAklOlSHAYkkOxYBamETzsdFO97y3c6/Gw/WQO/nM27ncwLfj/6OElGEDmI3lYDJs/gNRf15u/0TjnPwE=</diagram></mxfile> \ No newline at end of file +<mxfile host="Electron" modified="2021-01-31T08:53:02.673Z" agent="5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/14.1.8 Chrome/87.0.4280.88 Electron/11.1.1 Safari/537.36" etag="LESJmukIUig-juxDMBkA" version="14.1.8" type="device"><diagram id="R4LYdndaMt07X_-nVjS0" name="ページ1">5Vrfb5swEP5rIm2TGmEIhDx2afdLm1apD12fJhdc8GowM6Yh++tngx0wIR3d6Fi6p+C7M9jf3X13mMycdVK+ZTCLP9EQkZltheXMOZvZNlhYnviRkm0t8X2rFkQMh8qoEVziH0gJtVmBQ5QbhpxSwnFmCgOapijghgwyRjem2S0l5lMzGKE9wWUAyb70Coc8Vruwl438HcJRrJ8MvFWtSaA2VjvJYxjSTUvknM+cNaOU11dJuUZEgqdxqee9OaDdLYyhlA+ZcHXyZQvcK+dTci/8RG3r7OuHE6Dck/Ot3jEKBQBqSBmPaURTSM4b6WtGizRE8raWGDU2HynNhBAI4TfE+VZ5ExacClHME6K0qMT8i5w+d9XouqU5K9Wdq8G2NbhADCeII6Zkt5iQNSWUVSt3HMeywKmQ55zRu52/HCGpdym3dhA9JcppwQL0AGSOikLIIsQfgtbeOVlkB6Ji4WwrJjJEIMf35kKgCtNoZ6emnjIGty2DjOKU5607X0iBMFAZZ3sq3FS+Od2oeJy9uKhXoEetrTSiKtIeEXUKwntICgXDXhSKbMnkZUq5DLlNjDm6zGDlmY2gGjOgbmBwF1Vh+bngBKdIyUPI7j6LWZhXYTS33F0s3CPGUflwNOw7T0+wTdSARnHTcATQFBa3+UEb9jm8BfrjMbWPHdNVB9LV5JCCHkg9wiXx0CqHGmy97wXVipO84r1TYQD8rGyU4iqSvxcFQ0K5vlnLioTFLdRtb5g2efFqHmipWHv9vFr18sj8ujT9ajuT+3Vx7KniuB1MJ4fUPXpIO4zuTg4pWEzamrUas10vJrGSKLRas5Xu4Lq9mcCdbVtNnhxet3VNm1eNdJ83rKdbjNvTeX+rp/ujiPAO1qM8g+nv16P3qXDbrczEB8pR/HJf3KpQ9Qq0+LhS3zJTf/rGY3n8bOoakDrT06l/7Jjaqw6m/uSYAvdZligwSoka+dhhdRQlavVUJSrJyP9ZneylmfaL6Zt9/bTRvRwII1Tyefw8XOf/e6++YDklY+vr61n77PfAee+OnI23h7nrOb+g52rU5fp9bj7E4iHM42qzYFwCB/ZQBrf6o+rvMDhY/SsR8ovvATo+TkTCeotOkPxOiBiOHx4vk4SIP2mI9J01j3EwGqEUMcjRV10IZNHvPQTdj1FCcJYPKAIwz+rvhLe4lN4eg+jdxQCi9/uI3n8you973xmjRqO0SA53YlK7piFqSnijlLozyOEzbtb8zte0hTV5xbcPN2tDk1Ug0BMIOM0KPjQ9ZTabrqkJVhNqSqVvDI5VIkhwlIphgNKKql9LB+EAklOlSHAYkkOxYBamETzsdFO97y3c6/Gw/WQO/nM27ncwLfj/6OElGEDmI3lYDJs/gNRf15u/0TjnPwE=</diagram></mxfile> \ No newline at end of file