changeset 14:56f4ac0231ee

tweak tex and add bibfile
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 06 Nov 2018 22:37:59 +0900
parents 80944267f9c7
children 8580ad6c50dd
files Paper/anatofuz.tex Paper/reference.bib
diffstat 2 files changed, 56 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/Paper/anatofuz.tex	Tue Nov 06 16:54:52 2018 +0900
+++ b/Paper/anatofuz.tex	Tue Nov 06 22:37:59 2018 +0900
@@ -6,6 +6,31 @@
 \usepackage[dvipdfmx]{graphicx}
 \usepackage{latexsym}
 \usepackage{comment}
+\usepackage{listings}
+\lstset{
+  language=C,
+  tabsize=2,
+  frame=single,
+  basicstyle={\ttfamily\footnotesize},% 
+  identifierstyle={\footnotesize},% 
+  commentstyle={\footnotesize\itshape},% 
+  keywordstyle={\footnotesize\bfseries},% 
+  ndkeywordstyle={\footnotesize},% 
+  stringstyle={\footnotesize\ttfamily},
+  breaklines=true,
+  captionpos=b,
+  columns=[l]{fullflexible},% 
+  xrightmargin=0zw,% 
+  xleftmargin=1zw,% 
+  aboveskip=1zw,
+  numberstyle={\scriptsize},% 
+  stepnumber=1,
+  numbersep=0.5zw,% 
+  lineskip=-0.5ex,
+}
+\renewcommand{\lstlistingname}{Code}
+\usepackage{caption}
+\captionsetup[lstlisting]{font={small,tt}}
 \usepackage{url}
 \begin{document}
 
@@ -56,12 +81,21 @@
 \section{CbC}
 \subsection{CbCの概要}
 CbCは当研究室で開発しているプログラミング言語である.
-CbCではCodeSegment(以下CS),DetaSegment(以下DS)を基本単位として記述するプログラミングスタイルを取る.
+Cレベルでのプログラミングを行う場合,本来プログラマが行いたい処理の他にmallocなどを利用したメモリのアロケートやエラーハンドリングなどが存在する.
+これらをmeta computationと呼ぶ.これらmeta computationと通常の処理を分離することでバグの原因がmeta computation側にあるか処理側にあるかの分離などが可能となる.
+しかしC言語などを用いたプログラミングで分離を行おうとすると,それぞれ事細かに関数やクラスを分割せねばならず容易ではない.
+CbCでは関数よりmeta computationを細かく記述する為にCodeSegmentという単位を導入した.
+CbCではCodeSegment,DetaSegmentを基本単位として記述するプログラミングスタイルを取る.
 
+\subsection{CodeSegmentとDataSegment}
+CbCではCの関数の代わりにCodeSegmentを導入する.
+CodeSegmentはCの関数宣言の型名の代わりに\_\_codeと書くことで 宣言できる.
 
 \subsection{現在の実装}
 CbCは現在主要なCコンパイラであるgcc及びllvmをバックエンドとしたclang上の2種類の実装が存在する.
 gccはバージョン9.0.0に,clangは7.0.0に対応している.
+
+\subsection{CbCコンパイラのバグ}
 CbCコンパイラ自身はそれぞれ用意したテストスイートを通化するものの,MoarVMの様な巨大なプロジェクトのCSをコンパイルを実行する場合,予期せぬバグが発生した.
 主にCS間のgotoにおけるtail callフラグの除去や,DSとして渡している構造体の変数のアドレスがスタックポインタの値より上位に来てしまい,通常のCの関数をcallした際にローカル変数の領域がDSのアドレスの周辺を利用してしまう.
 その為DSの構造体の値が書き換わり,CからDSにreturnした際にDSの構造体が破壊されるバグである.
@@ -74,6 +108,11 @@
 その為MoarVMのビルドにおいてもCbCで書き換えたソースコードがあるターゲットと,手を加えていないオリジナルのターゲットの2種類を同一のCbCコンパイラでビルドする事が可能である.
 
 
+\subsection{言語処理系におけるCbCの応用}
+CbCを言語処理系,特にスクリプト言語に応用すると幾つかの箇所に置いて利点があると推測される.
+CbCにおけるCSはコンパイラの基本ブロックに相当する.
+
+
 \section{Perl6の概要}
 この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する.
 \subsection{Perl6の構想と初期の処理系}
@@ -101,12 +140,15 @@
 
 RakudoとはParrotで構想に上がったNQP,NQPに基づくPerl6を基にしたプロジェクトである.
 RakudoがPerl6のコンパイラかつインタプリタであると考えても良い.
-Rakudoの構成はNQPで記述されたPerl6,NQP自身,そしてNQPを解釈するVMという構成である.
+Rakudoにおけるコンパイラとは厳密には2種類存在する.
+まず第1のものがPerl6,もしくはNQPをMoarVM,JVMのバイトコードに変換するNQPコンパイラである.
+次にそのNQPが出力したバイトコードをネイティブコードに変換するVMの2種類である.
 このVMは現在MoarVM,JavaVM,Javascript,GraalVMを選択可能である.
-NQPで書かれたPerl6のことをRakudoと呼ぶ.
-RakudoStarとはこのMoarVM,NQP,Perl6が一体となったパッケージの事である.
+NQPで主に書かれたPerl6のことをRakudoと呼ぶ.
+Perl6はNQP以外にもPerl6独自の一種のシンタックスシュガーの様な物を持っており,これはNQPコンパイラ側で処理を行う.
 
 \subsection{NQP}
+
 RakudoにおけるNQP\cite{nqp}は現在MoarVM,JVM上で動作し,MoarVMを一部利用することでNodeJSからも動作させる事が可能である.
 NQPはPerl6のサブセットであるため主な文法などはPerl6に準拠しているが幾つか異なる点が存在する.
 NQP自身はStage0と呼ばれる名前空間上のモジュールのみ動作環境のVMのバイトコードを必要とするが,それ以外はNQPで記述されておりBootstrappingされている言語である.
--- a/Paper/reference.bib	Tue Nov 06 16:54:52 2018 +0900
+++ b/Paper/reference.bib	Tue Nov 06 22:37:59 2018 +0900
@@ -6,12 +6,12 @@
 
 %% Saved with string encoding Unicode (UTF-8) 
 
-@misc{1pugs,
+@misc{pugs,
     title = {Pugs: A Perl 6 Implementation},
     howpublished = {\url{http://hackage.haskell.org/package/Pugs}},
 }
 
-@misc{2perl6doc,
+@misc{perl6doc,
     title = {Perl6 Documentation},
     howpublished = {\url{https://docs.perl6.org/}},
 }
@@ -21,7 +21,7 @@
     howpublished = {\url{https://design.perl6.org/}},
 }
 
-@misc{rost,
+@misc{roast,
     title = {Roast -- Perl6 test suite},
     howpublished = {\url{https://github.com/perl6/roast}},
 }
@@ -40,3 +40,10 @@
     title = {NQP - Not Quite Perl (6)},
     howpublished = {\url{https://github.com/perl6/nqp}},
 }
+
+@article{llvmcbc,
+    author = "徳森 海斗 and  河野真治",
+    title = "LLVM Clang 上の Continuation based C コンパイラの改良",
+    journal = "琉球大学工学部情報工学科平成27年度学位論文(修士)",
+    year = 2015
+}