# HG changeset patch # User anatofuz # Date 1555656758 -32400 # Node ID d8feb607c44e534a23f96393d807a282ddb6a160 # Parent f8f9af788fa7deb867dd5586caa16ca48220ac3b update diff -r f8f9af788fa7 -r d8feb607c44e fig/bytecode_sample_generally_lang.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/bytecode_sample_generally_lang.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f8f9af788fa7 -r d8feb607c44e fig/cbc_next.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/cbc_next.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f8f9af788fa7 -r d8feb607c44e fig/cbc_sample.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/cbc_sample.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f8f9af788fa7 -r d8feb607c44e fig/code_to_bytecode.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/code_to_bytecode.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,735 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f8f9af788fa7 -r d8feb607c44e fig/origin_label_goto.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/origin_label_goto.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,210 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r f8f9af788fa7 -r d8feb607c44e fig/perl6nqp.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fig/perl6nqp.svg Fri Apr 19 15:52:38 2019 +0900 @@ -0,0 +1,137 @@ + +image/svg+xml \ No newline at end of file diff -r f8f9af788fa7 -r d8feb607c44e slide.html --- a/slide.html Fri Apr 19 12:10:48 2019 +0900 +++ b/slide.html Fri Apr 19 15:52:38 2019 +0900 @@ -162,6 +162,11 @@ $int_value = "hello"; # Compile error! +
$ perl6 type_invalid.p6
+Type check failed in assignment to $int_value; expected Int but got Str ("hello")
+  in block <unit> at type_invalid.p6 line 4
+
+ @@ -190,6 +195,24 @@ + + +
+ +

スクリプト言語処理系

+ + +

+ +
@@ -245,16 +268,22 @@
-

バイトコード

+

プログラミング言語とVM

+ +
+ +

Perl6のVMの構成

+ + + + +
+ +
+ +

バイトコード

+ diff -r f8f9af788fa7 -r d8feb607c44e slide.md --- a/slide.md Fri Apr 19 12:10:48 2019 +0900 +++ b/slide.md Fri Apr 19 15:52:38 2019 +0900 @@ -49,6 +49,12 @@ $int_value = "hello"; # Compile error! ``` +``` +$ perl6 type_invalid.p6 +Type check failed in assignment to $int_value; expected Int but got Str ("hello") + in block at type_invalid.p6 line 4 +``` + ## Perl6の言語的な特徴 - 型を独自に定義することも可能 @@ -68,6 +74,13 @@ fizzbuzz($_).say for 1..15; ``` +## スクリプト言語処理系 +- スクリプト言語は入力として与えられたソースコードを、 直接評価せずにバイトコードにコンパイルする形式が主流となっている +- その為スクリプト言語の実装は大きく2つで構成されている + - バイトコードに変換するフロントエンド部分 + - バイトコードを解釈する仮想機械 + + ## Perl6の処理系の構成 @@ -79,6 +92,9 @@ - このうちPerl6インタプリタとNQPはNQP自身で記述されている - MoarVMはC言語で記述されている + + + ## Perl6とNQP - NQP(NotQuitPerl Perlっぽい別の言語)でRakudoを記述している @@ -101,19 +117,30 @@ nqp::say("time = " ~ ($t1-$t0)); ``` -## バイトコード -- 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換する +## プログラミング言語とVM +- 最近のスクリプト言語は、 ソースコードを直接解釈せず、バイトコードに変換しVMが評価する - 全体的な処理速度の向上の為 - 実装を分離することでの見通しの良さ -- 多言語の環境 +- 言語処理系の実行にのみ動作するVM(プロセスVM) +- 他言語の環境 + - Java + - JVM - Ruby - YARV - Python - PythonVM - Elixir - BEAM + +## Perl6のVMの構成 +- MoarVMと呼ばれるVM +- C言語で記述されている +- レジスタマシン + - 型情報を持つレジスタに対しての演算として処理される +- LuaJITなどを利用したJITコンパイルなども可能 +- Perl6やNQPは、MoarVMに対してライブラリなどを設定して起動する + +## バイトコード - Perl6も、Rakudo/NQPはバイトコードに変換され、 バイトコードをVMが実行する - バイトコード実行部分は、 命令に対応するバイト列を読み込み、 解釈し、 次の命令を読み取ることを繰り返す - - diff -r f8f9af788fa7 -r d8feb607c44e slide.pdf.html --- a/slide.pdf.html Fri Apr 19 12:10:48 2019 +0900 +++ b/slide.pdf.html Fri Apr 19 15:52:38 2019 +0900 @@ -146,6 +146,11 @@ $int_value = "hello"; # Compile error! +
$ perl6 type_invalid.p6
+Type check failed in assignment to $int_value; expected Int but got Str ("hello")
+  in block <unit> at type_invalid.p6 line 4
+
+
@@ -174,6 +179,24 @@ + + +
+ +

スクリプト言語処理系

+ + +

+ +
@@ -229,16 +252,22 @@
-

バイトコード

+

プログラミング言語とVM

+ +
+ +

Perl6のVMの構成

+ + + + +
+ +
+ +

バイトコード

+