# HG changeset patch # User Takahiro SHIMIZU # Date 1542604474 -32400 # Node ID 31637b77c7221cd7085ab4f45158487f205f5499 # Parent db9c52b9c219fa62119ee8f909350d63a7d76a71 update diff -r db9c52b9c219 -r 31637b77c722 Paper/anatofuz.pdf Binary file Paper/anatofuz.pdf has changed diff -r db9c52b9c219 -r 31637b77c722 Paper/anatofuz.tex --- a/Paper/anatofuz.tex Mon Nov 19 14:00:01 2018 +0900 +++ b/Paper/anatofuz.tex Mon Nov 19 14:14:34 2018 +0900 @@ -144,10 +144,23 @@ \section{Perl6の概要} この章では現在までのPerl6の遍歴及びPerl6の言語的な特徴について記載する. -\subsection{Perl6の構想と初期の処理系} + + +\subsection{Perl6の構想} Perl6は2002年にLarryWallがPerlを置き換える言語として設計を開始した. Perl5の言語的な問題点であるオブジェクト指向機能の強力なサポートなどを取り入れた言語として設計された. -Perl5は設計と実装が同一であり, Larryらによって書かれたC実装のみだった.Perl6は設計と実装が分離しており様々な処理系が開発されてきた. +Perl5は設計と実装が同一であり, Larryらによって書かれたC実装のみだった. +Perl6は設計と実装が分離している. +言語的な特徴としては, 独自にPerl6の文法を拡張可能なGrammar, Perl5と比較した場合のオブジェクト指向言語としての進化も見られる. +またPerl6は漸進的型付け言語である. +従来のPerlの様に変数に代入する対象の型や, 文脈に応じて型を変更する動的型言語としての側面を持ちつつ, 独自に定義した型を始めとする様々な型に, 静的に変数の型を設定する事が可能である. + +Perl6は言語仕様及び処理実装がPerl5と大幅に異なっており, 言語的な互換性が存在しない. +従って現在ではPerl6とPerl5は別言語としての開発方針になっている. +Perl6は現在有力な処理系であるRakudoから名前を取りRakuという別名がつけられている. + +\subsection{Pugs} +Perl6の実装は様々なものが実装された. まず2005年に唐鳳によってHaskellで実装されたPugs\cite{pugs}が登場した. Pugsは最初に登場したPerl6実装であり, この実装を基にしてPerl6の仕様も修正された. 現在Pugsは歴史的な実装となっており, 更新はされていない. @@ -158,11 +171,7 @@ ParrotでのPerl6の実装はNQP(NotQuitPerl)と呼ばれるPerl6のサブセットでPerl6を記述するというアイディアの基実装された. ParrotVMは2006年のversion8.1.0が最後のリリースである. こちらもPugsと同様に現在のPerl6プロジェクトでは歴史的な実装とされている. -現在主に使用されている実装であるRakudoは2010年にRakudo-Starという一連のツール群としてリリースされた. -Perl6は言語仕様及び処理実装がPerl5と大幅に異なっており, 言語的な互換性が存在しない. -従って現在ではPerl6とPerl5は別言語としての開発方針になっている. -Perl6は現在有力な処理系であるRakudoから名前を取りRakuという別名がつけられている. \subsection{Rakudo} @@ -189,7 +198,7 @@ RakudoにおけるNQP\cite{nqp}は現在MoarVM, JVM上で動作し, MoarVMを一部利用することでNodeJSからも動作させる事が可能である. NQPはPerl6のサブセットであるため, 主な文法などはPerl6に準拠しているが幾つか異なる点が存在する. -NQPは最終的にはNQP自身でブートストラップする言語であるが, ビルドの最初にはすでに書かれたMoarvMByteCodeを必要とする. +NQPは最終的にはNQP自身でブートストラップする言語であるが, ビルドの最初にはすでに書かれたMoarVMのバイトコードを必要とする. このMoarVMByteCodeの状態をStage0と言い, ディレクトリ名として設定されている. Perl6の一部はNQPを拡張したもので書かれている為, Rakudoを動作させる為にはMoarVMなどのVM, VMに対応させる様にビルドしたNQPがそれぞれ必要となる. 現在のNQPではMoarVM, JVMに対応するStage0はそれぞれMoarVMBytecode, jarファイルが用意されており, JavaScriptではバイトコードの代わりにランタイム独自のModuleLoaderなどが設計されている. @@ -226,9 +235,6 @@ 従ってyaccやlexと言ったPerl5の文字解析, 構文解析に利用していたプログラムは利用せず, NQP側で構文定義などを行っている. NQPはNQP自身でBootstrappingされている為, Rakudo Perl6のbuild時にはNQPの実行環境として要したVM, それに基づいてbuildしたNQPがそれぞれ必要となる. -言語的な特徴としては独自にPerl6の文法を拡張可能なGrammar, Perl5と比較した場合のオブジェクト指向言語としての進化も見られる. -またPerl6は漸進的型付け言語である. -従来のPerlの様に変数に代入する対象の型や文脈に応じて型を変更する動的型言語としての側面を持ちつつ独自に定義した型を始めとする様々な型に静的に変数の型を設定する事が可能である. \subsection{現在のPerl6}