Mana (プログラミング言語)
Mana | |
---|---|
パラダイム | 手続き型言語 |
登場時期 | 2002年 |
開発者 | 守屋俊 |
最新リリース | 0.9.5/ 2017年3月17日 |
型付け | 静的型付け |
主な処理系 | C言語 |
Manaは、ビデオゲーム開発向けスクリプト言語である。ゲームの登場人物の移動やアニメーション、およびメッセージの制御などを簡単な構造で記述できることが特徴である。アクターモデルを扱って並列処理を再現したものである。
Contents
構成概念
Mana言語ではプログラミングするという行為を、ドラマの製作過程になぞらえて考える。プログラマーは映画でいう監督・脚本家・演出家である。そして、プログラムに登場する要素は役者になぞらえられ「アクター」と呼ばれる。Mana言語のプログラムは、複数のアクターという単位によって構成される。それぞれの場面に必要なアクターが、その場面のソースファイルの中に存在する。そして、各アクターがお互いの動きに応じて反応しあい、一つの場面を作り上げていく。Mana言語を象徴する概念がリクエストとプライオリティである。これはアクター同士でお互いの動きを命令しあうもので、これによって並列的な動きとアクター同士の連携を実現している。
「台本」のようなコードを記述するコンピューター言語には他に、プログラミング言語の「Shakespeare」や データ記述言語の「TVML」があるが、Mana言語ではreqやjoinなど並列制御に関する命令のみ言語使用に定義されているだけで、ゲームに関する命令は全て拡張関数として定義しなければならない。
アクターとリクエスト、プライオリティ
Mana言語を象徴する概念が「リクエスト」である。これはアクター同士でお互いの動きを命令しあうもので、これにより並列的な動きとアクター同士の連携を実現している。
アクターは全16段階のプライオリティ(優先度)毎にプログラムカウンタを持っており、現在のプライオリティの処理のみが実行される。優先すべきリクエストが来た場合、即座に処理を切り替える。逆に、下位のリクエストが来た場合は、現在の処理終了後に処理を切り替える。 このようにして、高いプライオリティのタスクは即座に切り替わり、低いプライオリティのタスクは予約される。
コード例
基本的な「Hello world」プログラムはこのように書く。
action HelloWorldActor::init
{
print ("Hello, world!\n") ;
}
オブジェクトAがオブジェクトBに話しかけるプログラムの例。(大文字の命令は拡張関数である)
action ObjectA::walk
{
ShowMessage ("Hello!\n") ;
req (1, ObjectB::talk);
join (1) ;
}
action ObjectB::talk
{
ShowMessage ("Hello! Nice to meet you.\n") ;
}