# HG changeset patch # User Takahiro SHIMIZU # Date 1541511479 -32400 # Node ID 56f4ac0231eea224123c884a70db9500e972ac45 # Parent 80944267f9c7addcd200e2f50e4725053898c3de tweak tex and add bibfile diff -r 80944267f9c7 -r 56f4ac0231ee Paper/anatofuz.tex --- 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されている言語である. diff -r 80944267f9c7 -r 56f4ac0231ee Paper/reference.bib --- 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 +}