title: CbCによるMoarVMの改良 author: Takahiro Shimizu profile: lang: Japanese # 研究目的 - Perl5の後継言語として開発されているPerl6はMoarVMと呼ばれるVMを搭載している. - Perl6はMoarVM,JVM,JavaScript上で動くRakudoと呼ばれる実装と,コンパイラ開発者用のサブセットであるNQPが主な実装となっている. - 現在Perl6及びMoarVMは全体的な速度がPerl5と比較し低下しており,実務として利用できるレベルに達していない. - さらにPerl6の実装自体巨大なcase-switch文など見通しが悪くなっている. - この問題を解決するために現在当研究室で開発している継続を中心にしたContinuation based Cを用いて改良を行う - CbCの設計理念からVMの実装と親和性が高い事も推測できる為,実際にCbCを用いてどのようにVMが実装できるかを検証する # 今週の進捗 * 先週は帰省していました * 院試合格しました * ミニマムなCコンパイラの実装していました * 構文解析は終わりました # 懐かしのコーナー * Perl1.0 * Perl2.0 * Perl3.0は動かしました * Perl4はあと一歩です ``` perl.c:53:21: error: expected declaration specifiers or '...' before ',' token char *index(), *strcpy(), *getenv(); ^~~~~~ perl.c:53:21: error: expected declaration specifiers or '...' before ',' token char *index(), *strcpy(), *getenv(); ^~~~~~ In file included from /usr/include/secure/_stdio.h:31:0, from /Users/anatofuz/workspace/cr/build_gcc/lib/gcc/x86_64-apple-darwin17.5.0/8.0.0/include-fixed/stdio.h:425, from perl.h:77, from perl.c:15: perl.c:53:21: error: expected declaration specifiers or '...' before '__builtin_object_size' char *index(), *strcpy(), *getenv(); ^~~~~~ perl.c:69:19: error: 'environ' undeclared (first use in this function); did you mean 'envix'? origenviron = environ; ^~~~~~~ ``` # Perl4 * エンディアンとbit数を設定する変数が設定されてなかったので設定 * Makefileに ``などの余計な行があったので削除 * Perl内部で設定されていた関数名とCの関数が被っていたのでPerlの関数名を修正