view paper/chapter/news-items.tex @ 114:c5b8cf006038

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sat, 06 Feb 2021 17:33:57 +0900
parents 8f0ff6d552ed
children
line wrap: on
line source

\chapter{新しくGearsOSに導入された機能の概要}

本章では以降の章で解説するGearsOSに本研究を通して導入した機能について解説する。
機能の詳細は以降の章の確認されたい。

\section{ARMクロスコンパイル用のCMakeの定義}
ARM用のアーキテクチャに向けてクロスコンパイルするCMakeを定義した。
これによってGearsOSのビルドシステムに手を加えずにクロスコンパイルが可能となった。

\section{Interface構文の簡素化}
従来APIの定義とCodeGearの定義を別で記述する必要があった箇所を、より簡潔に記述できるように定義した。
詳細は\ref{sec:newInterface}章で述べる。

\section{Interfaceの実装の型の導入}
従来はInterfaceの実装の型は、プログラマが自分でメタ情報に変換し、Contextに書き込む必要があった。
また、Interfaceの定義ファイルはあるものの、 Interfaceの実装は型定義ファイルが無かった。
本研究では型定義ファイルを導入し、メタ情報の自動書き込み機能を実装した。
詳細は\ref{sec:implType}章などで述べる。

\section{Interfaceで未定義のAPIの検知}
従来のInterfaceは、実装していないAPI(CodeGear)があってもPerlスクリプトはCbCコードの変換をしてしまった。
CbCコードの変換をする前に、 Perlスクリプトレベルで未定義のAPIを検知するようになった。
詳細は\ref{sec:interfaceNotImpl}章で述べる。

\section{Interfaceの引数の確認}
InterfaceのAPI呼び出しは、\texttt{goto meta}に変換されてしまうので、引数の数が揃っていない場合の確認がCbCレベルでは出来なかった。
Perlスクリプトレベルで引数の数を確認するように実装し、GearsOSのプログラミングの安全性が向上した。
詳細は\ref{sec:argNumber}章で述べる。

\section{InterfaceにないAPIの呼び出しの検知}
InterfaceにないAPIの呼び出しも、従来はCbCに変換されコンパイルが走らないと解らなかった。
PerlスクリプトレベルでAPI呼び出しの度にInterfaceに定義があるかの確認を行うように改善した。
詳細は\ref{sec:apinot}章で述べる。

\section{別のInterfaceからの出力の取得}
従来のGearsOSのInterfaceでは、入出力は自分のInterface内で完結している必要があった。
このため、Stack Interfaceの出力をOther Interfaceで受け取る際に、自分でStubを実装する必要があった。
この別のInterfaceの入力を受け取るStubの作製を自動化した。
詳細は\ref{sec:interfaceInput}章で述べる。

\section{Interfaceの雛形ファイルの作製スクリプトの導入}
満たすべきInterfaceと、満たしたい型が決定しても、従来はCodeGearの定義やコンストラクタをすべて手書きする必要があった。
これらはバグの元であった為に、自動的に雛形ファイルを作製するスクリプトを導入した。
詳細は\ref{sec:impl2cbc}章で述べる。

\section{実装のCodeGear名からメタ情報の切り離し}
Interfaceの各APIであるCodeGearは、従来は実装する際にプログラマが実装の型の名前をCodeGearの名前の末尾につける必要があった。
この型名の情報はメタ情報であるため、 本研究ではCodeGearの宣言時に型名を末尾につけず、コンパイル時にトランスパイラ側で変換するように実装した。
詳細は\ref{sec:autoCodeGearName}章で述べる。


\section{自由なMetaCodeGearの作製、継続の入れ替え機能}
従来はCodeGearの実行の後に継続するMetaCodeGearは\_\_code metaで決め打ちだった。
ユーザーが定義したMetaCodeGearに継続できる機能を追加した。
詳細は\ref{sec:metapm}章で述べる。

\section{Perlトランスパイラの変換ルーチンのデバッグ機能の追加}
Perlトランスパイラでメタ計算を作製しているが、このPerlスクリプトは巨大な正規表現マッチのループで構成されている。
変換したいCbCファイルがどの行の正規表現パターンにマッチしたかを可視化できる機能を追加した。
詳細は\ref{sec:generateStubDebug}章で述べる。

\section{DataGearの型集合ファイルであるcontext.hの自動生成}
従来はInterface、Implの型を定義し、使いたいDataGearを決めると、手動でcontext.hにDataGearの型を記述する必要があった。
この型情報はコンパイル時に決定するので、自動化が可能である。
その為Perlトランスパイラを使い、自動的に生成する機能を実装した。
詳細は\ref{sec:context.hGen}章で述べる。

\section{GearsOSの初期化ルーチンの自動生成}
GearsOSの例題を作製する際に必要な初期化ルーチンを自動生成するシンタックスを導入した。
これによってGearsOSの例題を作製する際に、コピーアンドペーストで行っていた関数定義を省略することができた。
詳細は\ref{sec:gmain}章で述べる。

\section{ジェネリクスのサポート}
GearsOSで型変数を使い、様々な型に対応するコードを生成できるジェネリクス機能を追加した。
これによって型ごとにCodeGearの定義をする必要がなくなり、処理の共通化が図れる。
詳細は\ref{sec:generics}章で述べる。