changeset 43:6c24dd1308cd

backup 2021-02-15
author autobackup
date Mon, 15 Feb 2021 00:10:03 +0900
parents 2f33bc3a5b9b
children de92cac72df8
files user/tobiuo/メモ/2021/02/14.md
diffstat 1 files changed, 53 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/user/tobiuo/メモ/2021/02/14.md	Mon Feb 15 00:10:03 2021 +0900
@@ -0,0 +1,53 @@
+# 研究目的
+最近のスクリプト言語ではコンパイラが自身で書かれているケースが多い. 例えば, PyPyやGo言語, Haskellなどである.
+現在開発の進んでいる言語にRaku がある. RakuはコンパイラがRaku自身で書かれてるため, 起動時に毎回コンパイラのロードとコンパイル, JITコンパイルを繰り返すことになる. そのため, 起動時間及び処理速度がPerl5やPython, Rubyなど比較し非常に低速である.
+そこで, この問題を解決するために, 既にコンパイラをロードしてあるサーバーを同一ホスト内に用意し, このサーバーに実行するファイル名を転送し, サーバー上でコンパイルを行う手法を提案している. Rakuに対しては, 当研究室にてAbyssサーバーを開発している.
+
+# やったこと
+- `Test::Util`を使っているテストファイルをAbyssサーバーで動かした. 
+    - 使用するmoduleのpathをコンパイラに伝えるプラグマ`use lib`はmodule内で使用できない. 
+    - abyssサーバーはファイルをmoduleとして実行するので, 実行ファイル内にある`use lib`に引っかかっていたのが今まで実行できていなかった原因. 
+    - なので, `sed -i -e '/^use lib/d' ./**/*.t`のようにして`use lib`の文を全て削除した. 
+    - このままでは, テストファイルは使用するmoduleのpathがわからないので, 代わりに`other/startup.p6`に`use lib`を書くことでpathを教えてあげる. 
+
+- client側のソースコードを3種類にした. 
+    - `other/client.p6`
+        - 実行ファイルをAbyssサーバーに投げるたびにsocketを繋ぎ直す. 
+    - `other/client2.p6`
+        - 一度のsocket通信で全ての実行ファイルをまとめてAbyssサーバーに投げる. 
+        - 若干だが標準出力のバグがある. 
+    - `other/client3.p6`
+        - command lineから実行したいファイルを引数にしてAbyssサーバーに投げる. 
+        - `*.t`みたいな引数には対応できていないので, 実行ファイルを単体ずつしか投げれない. 
+        - パイプ処理にも対応できていない. 
+
+- `*.rakudo`をAbyssサーバーで動かした. 
+    - `*.t`は通らないtestやcompile errorを吐くファイルがたくさんなので, 綺麗に動く`*.rakudo`を動かしたかった. 
+    - まず, Abyssサーバーで動かすために, `sed`コマンドで`use v6;`と`use lib`は全部抜いた. 
+    - `*.rakudo`内には`exit`関数があり, Abyssサーバーで1つの`rakudo`ファイルを動かしただけで強制終了してしまう. 
+    - なので, `exit`も`sed`コマンドで全部抜いた. 
+- `roast/rakudolist`の作成. 
+    - それでも謎に動かない`rakudo`ファイルがいくつかあったので, 動く`rakudo`ファイルのみの絶対pathを`roast/rakudolist`にまとめた. 
+    - clientには`roast/rakudolist`に記載されてあるファイルpathをAbyssサーバーに投げてもらう. 
+
+# 速度検証
+- Abyssを使わないlocalでの実行. `other/time.sh`で実行する. 
+    - `413.50s user 28.40s system 141% cpu 5:11.51 total`
+```zsh:time.sh
+#!/bin/zsh
+
+shpath=`pwd`/$0
+shdir=${shpath%/*/*}
+lib=$shdir'/roast/packages/Test-Helpers/'
+
+time (
+for f (`cat $shdir'/roast/rakudolist'`)                                 
+do
+    raku -I $lib $f
+done
+)
+```
+- `client.p6`での実行. 
+    - `2.17s user 1.68s system 1% cpu 4:07.95 total`
+- `client2.p6`での実行. 
+    - `1.93s user 1.63s system 1% cpu 3:57.06 total`
\ No newline at end of file