Mercurial > hg > Papers > 2019 > koo-prosym
changeset 13:4e34198dcd05
Rakuが遅い理由追加
author | e165727 <e165727@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 09 Jan 2020 18:49:36 +0900 |
parents | 172524516d06 |
children | 3f4ba3dacff5 |
files | Slide/Slide.html Slide/Slide.md Slide/Slide.pdf.html |
diffstat | 3 files changed, 64 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/Slide/Slide.html Thu Jan 09 18:22:55 2020 +0900 +++ b/Slide/Slide.html Thu Jan 09 18:49:36 2020 +0900 @@ -96,7 +96,7 @@ <li>現在開発の進んでいる言語に Raku がある. スクリプト言語 Raku は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する.</li> <li>MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である. -その為, 現在日本国内では Perl6 は実務としてあまり使われていない.</li> +その為, 現在日本国内では Raku は実務としてあまり使われていない.</li> <li>Raku の持つ言語機能や型システムは非常に柔軟かつ強力であるため, 実用的な処理速度に達すれば, 言語の利用件数が向上することが期待される.</li> </ul> @@ -143,7 +143,7 @@ <!-- _S9SLIDE_ --> <h2 id="raku-と他言語の起動時間の比較-1">Raku と他言語の起動時間の比較</h2> <ul> - <li>perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> + <li>perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> </ul> <pre><code>perl5 @@ -211,7 +211,7 @@ <!-- _S9SLIDE_ --> <h2 id="moarvm">MoarVM</h2> <ul> - <li>MoarVM は Perl6 に特化した VM</li> + <li>MoarVM は Raku に特化したVM</li> <li>C 言語で実装されている</li> <li>JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある</li> </ul> @@ -222,7 +222,7 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="perl6の名称変更">Perl6の名称変更</h2> +<h2 id="perl6-の名称変更">Perl6 の名称変更</h2> <ul> <li>Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない.</li> <li>そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.</li> @@ -236,7 +236,11 @@ <!-- _S9SLIDE_ --> <h2 id="rakuが遅い理由">Rakuが遅い理由</h2> <ul> - <li>後で書く</li> + <li>通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む.</li> + <li>Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である.</li> + <li>これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである.</li> + <li>また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である.</li> + <li>(incokeとは何か書く)</li> </ul> @@ -272,9 +276,10 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="予測">予測</h2> +<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> <ul> - <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する.</li> + <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> + <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> </ul> @@ -283,10 +288,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> +<h2 id="予測">予測</h2> <ul> - <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> - <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> + <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため, 提案手法を用いることで起動時間分早く実行することができると予測する.</li> </ul> @@ -322,8 +326,8 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-server側の実装">Abyss Server側の実装</h2> <ul> - <li>Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> - <li>ファイルパスを受け取ると,ファイルを開き実行する.</li> + <li>Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> + <li>ファイルパスを受け取ると, ファイルを開き実行する.</li> </ul> <pre><code>unit class Abyss::Server:ver<0.0.1>; @@ -354,7 +358,7 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-client側の実装">Abyss Client側の実装</h2> <ul> - <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> + <li>ユーザーは Abyss Server を起動後,ファイルパスをサーバーに送信する.</li> </ul> <pre><code>use IO::Socket::Unix; @@ -390,7 +394,7 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-serverの利点">Abyss Serverの利点</h2> <ul> - <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.</li> + <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.</li> </ul> @@ -401,7 +405,8 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> <ul> - <li>現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,</li> + <li>現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある</li> + <li>Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう</li> </ul> @@ -426,7 +431,7 @@ <!-- _S9SLIDE_ --> <h2 id="raku-の実装に関わる様々な言語">Raku の実装に関わる様々な言語</h2> <ul> - <li>Raku は,Larry wallにより設計されたオブジェクト指向スクリプト言語である.</li> + <li>Raku は, Larry wall により設計されたオブジェクト指向スクリプト言語である.</li> <li>また Raku は漸進的型付け言語である.</li> </ul>
--- a/Slide/Slide.md Thu Jan 09 18:22:55 2020 +0900 +++ b/Slide/Slide.md Thu Jan 09 18:49:36 2020 +0900 @@ -6,7 +6,7 @@ - 現在開発の進んでいる言語に Raku がある. スクリプト言語 Raku は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する. - MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である. -その為, 現在日本国内では Perl6 は実務としてあまり使われていない. +その為, 現在日本国内では Raku は実務としてあまり使われていない. - Raku の持つ言語機能や型システムは非常に柔軟かつ強力であるため, 実用的な処理速度に達すれば, 言語の利用件数が向上することが期待される. ## 研究概要 @@ -30,7 +30,7 @@ ``` ## Raku と他言語の起動時間の比較 -- perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である. +- perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である. ``` perl5 @@ -73,16 +73,20 @@ - NQPコンパイラ自身もNQPで記述されている ## MoarVM -- MoarVM は Perl6 に特化した VM +- MoarVM は Raku に特化したVM - C 言語で実装されている - JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある -## Perl6の名称変更 +## Perl6 の名称変更 - Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない. - そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた. ## Rakuが遅い理由 -- 後で書く +- 通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む. +- Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である. +- これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである. +- また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である. +- (incokeとは何か書く) ## Raku による Abyssサーバーの実装 - 提案手法に沿い『Abyssサーバー』を実装した. @@ -95,13 +99,15 @@ - Rakuには現在Unix domain socketの実装がないため,Unix domain socket の実装を行なった. - -## 予測 -- 前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する. - ## 通常実行と提案手法の速度比較 - 今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う - 題材として行うのはhelloworldを出力するだけのプログラムです. +%時間があればフィボナッチの例題も + +## 予測 +- 前述した通り, Raku はコンパイラの起動に時間がかかっているため, 提案手法を用いることで起動時間分早く実行することができると予測する. + ## 実行結果 - 通常実行 @@ -115,8 +121,8 @@ - 0.0275 sec ## Abyss Server側の実装 -- Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. -- ファイルパスを受け取ると,ファイルを開き実行する. +- Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る. +- ファイルパスを受け取ると, ファイルを開き実行する. ``` unit class Abyss::Server:ver<0.0.1>; @@ -140,7 +146,7 @@ ``` ## Abyss Client側の実装 -- ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する. +- ユーザーは Abyss Server を起動後,ファイルパスをサーバーに送信する. ``` use IO::Socket::Unix; @@ -162,10 +168,12 @@ ``` ## Abyss Serverの利点 -- Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の起動時間を短縮できる. +- Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる. ## Abyss Serverの欠点 -- 現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため, +- 現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある +- Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう + ## まとめと今後の課題 - Raku の新たな実行方法の提案,及び実装を行なった. @@ -174,7 +182,7 @@ - 今後は ## Raku の実装に関わる様々な言語 -- Raku は,Larry wallにより設計されたオブジェクト指向スクリプト言語である. +- Raku は, Larry wall により設計されたオブジェクト指向スクリプト言語である. - また Raku は漸進的型付け言語である. ![](fig/Raku.svg)
--- a/Slide/Slide.pdf.html Thu Jan 09 18:22:55 2020 +0900 +++ b/Slide/Slide.pdf.html Thu Jan 09 18:49:36 2020 +0900 @@ -80,7 +80,7 @@ <li>現在開発の進んでいる言語に Raku がある. スクリプト言語 Raku は任意の VM が選択できるようになっており, 主に利用されている VM に C で書かれた MoarVM が存在する.</li> <li>MoarVM は JIT コンパイルなどをサポートしているが, 全体的な起動時間及び処理速度が Perl5 や Python , Ruby などの他のスクリプト言語と比較し非常に低速である. -その為, 現在日本国内では Perl6 は実務としてあまり使われていない.</li> +その為, 現在日本国内では Raku は実務としてあまり使われていない.</li> <li>Raku の持つ言語機能や型システムは非常に柔軟かつ強力であるため, 実用的な処理速度に達すれば, 言語の利用件数が向上することが期待される.</li> </ul> @@ -127,7 +127,7 @@ <!-- _S9SLIDE_ --> <h2 id="raku-と他言語の起動時間の比較-1">Raku と他言語の起動時間の比較</h2> <ul> - <li>perl5,ruby,perl6,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> + <li>perl5,ruby,raku,pythonでhelloworldを出力するだけのプログラムを用いて行なった実行結果である.</li> </ul> <pre><code>perl5 @@ -195,7 +195,7 @@ <!-- _S9SLIDE_ --> <h2 id="moarvm">MoarVM</h2> <ul> - <li>MoarVM は Perl6 に特化した VM</li> + <li>MoarVM は Raku に特化したVM</li> <li>C 言語で実装されている</li> <li>JIT コンパイルなどが現在導入されているが, 起動時間などが低速である問題がある</li> </ul> @@ -206,7 +206,7 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="perl6の名称変更">Perl6の名称変更</h2> +<h2 id="perl6-の名称変更">Perl6 の名称変更</h2> <ul> <li>Raku はPerlの次期メジャーバージョンとして設計が始められ, 元々Perl6という名称であったが, Perl6 は言語仕様及び処理実装が Perl5 と大幅に異なっており, 言語的な互換性が存在しない.</li> <li>そのため現在有力な処理系である Rakudo から名前を取り Raku という別名がつけられた.</li> @@ -220,7 +220,11 @@ <!-- _S9SLIDE_ --> <h2 id="rakuが遅い理由">Rakuが遅い理由</h2> <ul> - <li>後で書く</li> + <li>通常 Ruby のようなスクリプト言語ではまず YARV などのプロセスVM が起動し,その後スクリプトを Byte code に変換して実行という手順を踏む.</li> + <li>Rakudo はインタプリタの起動時間及び, 全体的な処理時間が他のスクリプト言語と比較して低速である.</li> + <li>これは Rakudo 自体が Raku と NQP で書かれているため, MoarVMを起動し, Rakudo と NQP のByte codeを読み取り, Rakudoを起動し, その後スクリプトを読み取り, スクリプトの Byte code 変換というような手順で進むためである.</li> + <li>また Raku は実行時の情報が必要であり, メソッドを実行する際に invoke が走ることも遅い原因である.</li> + <li>(incokeとは何か書く)</li> </ul> @@ -256,9 +260,10 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="予測">予測</h2> +<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> <ul> - <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため,提案手法を用いることで起動時間分早く実行することができると予測する.</li> + <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> + <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> </ul> @@ -267,10 +272,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="通常実行と提案手法の速度比較">通常実行と提案手法の速度比較</h2> +<h2 id="予測">予測</h2> <ul> - <li>今回は,提案手法での実行速度と通常実行での実行速度, この二つの速度の比較を行う</li> - <li>題材として行うのはhelloworldを出力するだけのプログラムです.</li> + <li>前述した通り, Raku はコンパイラの起動に時間がかかっているため, 提案手法を用いることで起動時間分早く実行することができると予測する.</li> </ul> @@ -306,8 +310,8 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-server側の実装">Abyss Server側の実装</h2> <ul> - <li>Abyss サーバーは起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> - <li>ファイルパスを受け取ると,ファイルを開き実行する.</li> + <li>Abyss Server は起動すると, まず自身にファイルパスを転送するためのソケットを生成し, その後 ファイルを受け取るための待機ループに入る.</li> + <li>ファイルパスを受け取ると, ファイルを開き実行する.</li> </ul> <pre><code>unit class Abyss::Server:ver<0.0.1>; @@ -338,7 +342,7 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-client側の実装">Abyss Client側の実装</h2> <ul> - <li>ユーザーはAbyssのサーバーを起動後,ファイルパスをサーバーに送信する.</li> + <li>ユーザーは Abyss Server を起動後,ファイルパスをサーバーに送信する.</li> </ul> <pre><code>use IO::Socket::Unix; @@ -374,7 +378,7 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-serverの利点">Abyss Serverの利点</h2> <ul> - <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Perl6 スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.</li> + <li>Abyss Serverを用いて実行することで, サーバー上で事前に起動した Rakudo を再利用し, 投げられた Raku スクリプトの実行を行うため, Rakudo の起動時間を短縮できる.</li> </ul> @@ -385,7 +389,8 @@ <!-- _S9SLIDE_ --> <h2 id="abyss-serverの欠点">Abyss Serverの欠点</h2> <ul> - <li>現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,</li> + <li>現在 Abyss Server には 一度スクリプトを実行した後にサーバー内の環境をリセットする機能が存在しないため,スクリプトがサーバー内の環境に影響を及ぼした場合,通常実行と違う挙動をする危険性がある</li> + <li>Raku に eval の出力を socket に切り替える機能が存在しないので出力がサーバー側に返ってしまう</li> </ul> @@ -410,7 +415,7 @@ <!-- _S9SLIDE_ --> <h2 id="raku-の実装に関わる様々な言語">Raku の実装に関わる様々な言語</h2> <ul> - <li>Raku は,Larry wallにより設計されたオブジェクト指向スクリプト言語である.</li> + <li>Raku は, Larry wall により設計されたオブジェクト指向スクリプト言語である.</li> <li>また Raku は漸進的型付け言語である.</li> </ul>