view midterm/midterm.tex @ 1:82b28040bb64

add explanation of Perl6 and MoarVM
author Fukuda Kouki <k.fukuda@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Oct 2019 16:11:42 +0900
parents 44ea97bd8e77
children 10b5e6b8583d
line wrap: on
line source

\documentclass[twocolumn,twoside,9.5pt]{jarticle}
\usepackage[dvipdfmx]{graphicx}
\usepackage{picins}
\usepackage{fancyhdr}
\usepackage{url}
\usepackage{bussproofs}
\usepackage{listings,jlisting}
\usepackage{cite}
\lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{./images/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 中間発表予稿}
\rhead{}
\cfoot{}

\setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
\setlength{\headheight}{0mm}
\setlength{\headsep}{5mm}
\setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
\setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
\setlength{\textwidth}{181mm}
\setlength{\textheight}{261mm}
\setlength{\footskip}{0mm}
\pagestyle{empty}

\lstset{
  frame=single,
  keepspaces=true,
  breaklines=true,
  xleftmargin=0zw,
  xrightmargin=0zw,
  framerule=.2pt,
  columns=[l]{fullflexible},
  language={},
  tabsize=4,
  lineskip=-0.5zw,
  escapechar={@},
}


\begin{document}
\title{Raku(Perl6) のサーバーを使った実行 \\
Running Raku(Perl6) using Raku server}
\author{165727F 氏名: 福田 光希 指導教員: 河野 真治}
\date{2019/10}
\maketitle

\thispagestyle{fancy}

\section{研究目的}

Perl5の後継言語として,Rakuが開発されている.
RakuはMoarVMというVM上で動作するが,起動時間がPerl5やPython,Rubyなどの主要なスクリプト言語に比べて非常に遅い.
その為,本研究ではRakuプログラムの新たな実行手法の提案,またOS上でスクリプト言語を実行する最適な方法の見直し,スクリプト言語をサーバーで実行する利点と欠点の考察を行う。

\section{Raku}
Perlの現在の主流な実装はRakudoである.RakudoはMoarVM,とNQPと呼ばれるPerl6のサブセット,NQPで記述されたPerl6という構成である.
MoarVMはNQPを解釈する.
このNQPで記述されたPerl6の事をRakudoと呼ぶ.
RakudoはMoarVMの他にJVM,Javascriptを動作環境として選択可能である.
言語的な特徴ではPerl5とは違いオブジェクト指向のサポートが強力になり,漸進的型付け言語としての特徴を持つ.

現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。

\section{MoarVM}
MoarVM は Perl6 に特化した VM である.C言語で実装されている. JITコンパイルなどが現在導入されているが,起動時間などが低速である問題がある. MoarVM 独自の ByteCode があり, NQP からこれを出力する機能などが存在している.

\section{Perl6サーバーの実行}
%通常、自分でプロセス立ち上げてPerl6実行する際は,

%\section{問題点}

\section{まとめ}
中間予稿までにPerl6スクリプトを投げて実行するサーバーの実装、および「自分でプロセス立ち上げてPerl6実行する手法」と「既にあるサーバーに投げてPerl6スクリプトを実行する手法」の差を測るために時間の計測を行った。

今回実装したサーバーでは,別のスクリプトを実行する前にサーバーの状態を初期状態にリフレッシュできてないので、信頼性が保てていない,この問題を解決するためにサーバーに投げられたPerl6をコンパイラで実行する際のセパレーションを保証する機構を作ることが課題としてあげられる.
また今回実装したサーバーとの通信はTCPソケット通信であり, 現状のPerl6にはUnix domain ソケット通信がないのでUnix domain ソケットを実装する予定である.
加えてUnix domain socket の permission を自分だけが実行できるように書き換える,外部から不正なアクセスを行わせないことも必要である.

\begin{thebibliography}{9}
  \bibitem{キー1} Andrew Shitov. Perl6 Deep Dive
  \bibitem{キー2} 清水隆博, 河野真治. CbC を用いた Perl6 処理系. 琉球大学工学部情報工学科平成 30 年度学位論文 (学士), 2018.
\end{thebibliography}

\nocite{*}
\bibliographystyle{junsrt}
\bibliography{reference}
\end{document}