Mercurial > hg > Papers > 2019 > koo-prosym
diff Slide/Slide.md @ 9:480229d0ea65
fig修正
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 26 Dec 2019 16:26:58 +0900 |
parents | 3343b5914245 |
children | 4627ec7c3d1b |
line wrap: on
line diff
--- a/Slide/Slide.md Wed Dec 25 16:10:22 2019 +0900 +++ b/Slide/Slide.md Thu Dec 26 16:26:58 2019 +0900 @@ -3,38 +3,50 @@ profile: 琉球大学 ## 研究背景 -- 現在開発の進んでいる言語に Perl6 がある. -スクリプト言語 Perl6 は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する. +- 現在開発の進んでいる言語に Raku がある. +スクリプト言語 Raku は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する. - MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である. その為, 現在日本国内では Perl6 は実務としてあまり使われていない. -- Perl6 の持つ言語機能や型システムは非常に柔軟かつ強力であるため, 実用的な処理速度に達すれば, 言語の利用件数が向上することが期待される. +- Raku の持つ言語機能や型システムは非常に柔軟かつ強力であるため, 実用的な処理速度に達すれば, 言語の利用件数が向上することが期待される. ## 研究概要 -- Perl6 の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Perl6 のsubsetであるnqp (Not Quite Perl)上に構成されている。 -- 現状のPerl6の実行はPerl6で記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。 -- そこで、Perl6をサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する +- Raku の実装の一つであるRakudoは、Byte code である MoarVM と、それ上で動作する Raku のsubsetであるnqp (Not Quite Perl)上に構成されている。 +- 現状のRakuの実行はRakuで記述されたコンパイラをloadしてJITしながら実行すること自体に時間がかかっている。 +- そこで、Rakuをサーバとして動作させ、実行するファイルをサーバに投げて実行する方法を検討する - 同一ホスト内で終了せずに実行を続けるサーバープロセスを立ち上げ, このサーバープロセス上で立ち上げておいたコンパイラに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案し実装する. -## Perl6(Raku) - ## Rakudo -- Rakudoとは現在のPerl6の主力な実装である. -- Rakudo は MoarVM, と NQP と呼ばれる Perl6 のサブセット, NQP と Perl6 自身で記述された Perl6 という構成である. +- Rakudoとは現在のRakuの主力な実装である. +- Rakudo は MoarVM, と NQP と呼ばれる Raku のサブセット, NQP と Raku 自身で記述された Raku という構成である. ![](fig/Rakudo.pdf) - Rakudoの構成 ## NQP +- NQPとはNot Quite Perl の略で Raku のサブセットである +- 基本的な文法などは Perl6 に準拠しているが, 変数を束縛で宣言するなどの違いがある. -## Perl6 による Abyssサーバーの実装 +## MoarVM +- MoarVM は Perl6 に特化した VM +- C 言 語で実装されている +- JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある + +## Raku による Abyssサーバーの実装 - 提案手法に沿い『Abyssサーバー』を実装した. -- Abyssサーバーはクライアント側から投げられた Perl6 を実行するためのサーバーである. +- Abyssサーバーはクライアント側から投げられた Raku を実行するためのサーバーである. - 下記の図は,Abyss サーバーを用いたスクリプト言語の実行手順である. ![](fig/abyss.pdf) +## Abyss Serverの利点 +- Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の全体的な処理時間を短縮できる. + +## Abyss Serverの欠点 +- + ## Abyss Server側の実装 -- Abyss サーバーは起動すると, まず自身にファイル パスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. +- Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. +- ファイルパスを受け取ると,ファイルを開き実行する. ``` unit class Abyss::Server:ver<0.0.1>; @@ -66,9 +78,9 @@ $conn.print: 'FILEPASS'; ``` -## Perl6のEVAL -- Perl6 では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる -- Perl6 では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる. +## Raku のEVAL +- Raku では EVAL 関数があり文字列を Perl6 のソースコード自身として評価できる +- Raku では, EVAL は通常は使用できないようになっており, MONKEY-SEE-NO-EVAL という pragma を実行することで使うことができるようになる. ``` use MONKEY-SEE-NO-EVAL; @@ -77,4 +89,12 @@ ``` ## まとめと今後の課題 -- Perl6 の新たな実行方法の提案,及び実装を行なった. +- Raku の新たな実行方法の提案,及び実装を行なった. + +## Perl6の実装に関わる様々な言語 +- Raku は,Larry wallにより設計されたオブジェクト指向スクリプト言語である. +- また Raku は漸進的型付け言語である. + +![](fig/Raku.pdf) + +