Mana (プログラミング言語)

提供: miniwiki
移動先:案内検索
Mana
パラダイム 手続き型言語
登場時期 2002年
開発者 守屋俊
最新リリース 0.9.5/ 2017年3月17日(7年前) (2017-03-17
型付け 静的型付け
主な処理系 C言語
テンプレートを表示

Manaは、ビデオゲーム開発向けスクリプト言語である。ゲームの登場人物の移動やアニメーション、およびメッセージの制御などを簡単な構造で記述できることが特徴である。アクターモデルを扱って並列処理を再現したものである。

構成概念

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") ;
}

関連項目

外部リンク