# HG changeset patch # User anatofuz # Date 1611647085 -32400 # Node ID 4eb9702d1ed7e025688bb6e793db30f60cf55b1a # Parent ff17a9f0ea9a0234935655c0d590f93b65919c5b ... diff -r ff17a9f0ea9a -r 4eb9702d1ed7 paper/chapter/02-perl.tex --- a/paper/chapter/02-perl.tex Tue Jan 26 12:41:30 2021 +0900 +++ b/paper/chapter/02-perl.tex Tue Jan 26 16:44:45 2021 +0900 @@ -11,6 +11,22 @@ GearsOSではメタレベルの処理の作成にPerlスクリプトを用いており、 ノーマルレベルで記述されたCbCから、 メタ部分を含むCbCへと変換する。 変換前のCbCをGearsCbCと呼ぶ。 +\section{トランスコンパイラ} +プログラミング言語から実行可能ファイルやアセンブラを生成する処理系のことを、一般的にコンパイラと呼ぶ。 +特定のプログラミング言語から別のプログラミング言語に変換するコンパイラのことを、 トランスコンパイラと呼ぶ。 +トランスコンパイラとしてはJavaScriptを古い規格のJavaScriptに変換するBabel\cite{babel}がある。 + +またトランスコンパイラは、変換先の言語を拡張した言語の実装としても使われる。 +JavaScriptに強い型制約をつけた拡張言語であるTypeScriptは、 TypeScriptから純粋なJavaScriptに変換を行うトランスコンパイラである。 +すべてのTypeScriptのコードはJavaScriptにコンパイル可能である。 +JavaScriptに静的型の機能を取り込みたい場合に使われる言語であり、 JavaScriptの上位の言語と言える。 + +GearsOSはCbCを拡張した言語となっている。 +ただしこの拡張自体はCbCコンパイラであるgcc、 llvm/clangには搭載されていない。 +その為GearsOSの拡張部分を、等価な純粋なCbCの記述に変換する必要がある。 +現在のGearsOSでは、 CMakeによるコンパイル時にPerlで記述された\texttt{generate\_stub.pl}と\texttt{generate\_context.pl}の2種類のスクリプトで変換される。 + + \section{GearsCbCの雛形生成} Interfaceとそれを実装するImplの型が決定すると、最低限満たすべきCodeGearのAPIは一意に決定する。 @@ -44,6 +60,8 @@ Microsoftが提唱しているIDEとプログラミング言語のコンパイラをつなぐプロトコルにLanguage Serverがある。 Language Serverはコーディング中のソースコードをコンパイラ自身でパースし、 型推論やエラーの内容などをIDE側に通知するプロトコルである。 主要なJavaのLanguage Serverの実装であるeclipse.jdt.ls\cite{eclipse.jdt.ls}では、 LanguageServerの機能として未実装のメソッドを検知する機能が実装されている。\cite{eclipse.jdt.pull322} +この機能を応用してvscode上から未実装のメソッドを特定し、 雛形を生成する機能がある。 +他にもIntelliJ IDEなどの商用IDEでは、 IDEが独自に未実装のメソッドを検知、雛形を生成する機能を実装している。 golangの場合は主に\texttt{josharian/impl}\cite{golang_impl}が使われている。 diff -r ff17a9f0ea9a -r 4eb9702d1ed7 paper/master_paper.pdf Binary file paper/master_paper.pdf has changed diff -r ff17a9f0ea9a -r 4eb9702d1ed7 paper/reference.bib --- a/paper/reference.bib Tue Jan 26 12:41:30 2021 +0900 +++ b/paper/reference.bib Tue Jan 26 16:44:45 2021 +0900 @@ -8,6 +8,10 @@ howpublished = {\url{https://github.com/eclipse/eclipse.jdt.ls}}, } +@misc{babel, + title = {Babel}, + howpublished = {\url{https://babeljs.io/}}, +} @webpage{eclipse.jdt.pull322, title = {Add unimplemented methods code action}, author = {yaohaizh},