changeset 8:4eb9702d1ed7

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 26 Jan 2021 16:44:45 +0900
parents ff17a9f0ea9a
children 6e33e74d378f
files paper/chapter/02-perl.tex paper/master_paper.pdf paper/reference.bib
diffstat 3 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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}が使われている。
Binary file paper/master_paper.pdf has changed
--- 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},