トップ | 前 | 次
IRIS/IRIS++ (IRIS Real-time Interpreting Script) は、ゲームのようなインタラクティブなアプリケーションを開発するためのスクリプト言語です。シンプル、無駄が無く強健なアプリケーションをデザインするには、デザインの変更要求に迅速に対応できる優れたシステム アーキテクチャが必要です。優れたアーキテクチャは開発コストの削減、デザイン プロセスの簡略化および予定された期間内に製品をリリースすることができます。これらのゴールを充たすために、IRIS は以下の機能を提供します。
IRIS はアセンブリ言語 (古い PDP-8 に影響された) のような簡略化された指示セットで構成されています。プログラマが利用できる 256 個のレジスタ (今は変数のようなものと考えてください) およびレジスタのデータを操作する指示セットが用意されています。簡略化された指示セットはプログラマの言語学習にかかる時間を短縮することができます。以下のスクリプト例をご覧ください。
// レジスタ 0 を使用 REG $0 // レジスタ 0 に 5 を代入 ATR 5 // レジスタ 1 に 7 を代入 REG $1 ATR 7 // レジスタ 2 にレジスタ 0 と 1 の値の和を代入 REG $2 ATR $0 SUM $1 // 出力バッファに結果を転送 ATB $2 // 出力バッファの値を画面に表示 (12) PTB
このように、指示セットおよびパラメータはスペースによって区切られています。レジスタは $ 記号に続くレジスタ番号で表されます。指示セットのリストについては、言語仕様の指示セットを参照してください。
また、IRIS コンパイラはコンパイル時に既存の指示セットを独自の指示セットに置き換えることができます。これにより、独自のプログラミング言語を定義することができます。詳細については IRIS++ を参照してください。
IRIS はメモリ消費を極力抑えるように設計されています。スクリプトは IRIS コンパイラにより、バイト コード (単一バイトで構成されたバイナリ コード) にコンパイルされます。そして、バイナリ コードは仮想マシンによって解析、実行されます。これはプレーン テキストを実行するよりもおよそ 100 倍の実行速度を実現できます。CPU パワーが低く、メモリ容量が限られているモバイル デバイスなどに特に最適です。
一度スクリプトを書いたら、スクリプトの変更をしなくても PC、モバイル デバイスなど様々なプラットフォーム上で実行できるようになります。変更が必要なのはスクリプトを実行する下層アプリケーション エンジンだけです。これは JAVA など仮想マシンを使用する他のプログラミング言語に共通しています。つまり、アプリケーションのフローおよび UI はターゲット プラットフォーム毎に書き換える必要がありません。移植性の例については PHP 上の仮想マシンを参照してください。
IRIS はデータ操作のための指示セットを提供しますが、それだけでの利用には限界があります。例えば、PTX 指示はテキストをコンソールに表示しますが、表示位置やフォントの指定などはできません。これらの限界を補うためには IRIS 指示セットを拡張する必要があります。IRIS はオブジェクト指向で設計されているため、IRIS の子クラスを作ることで簡単に実装することができます。以下の例をご覧ください。
// レジスタ 0 に文字列 "Hello, World!" を代入 REG $0 ATR "Hello, World!\n" // 位置座標 x=100、y=200 にレジスタ 0 のテキストを画面に表示 _gameEngine._screen._blit._x.set 100 _gameEngine._screen._blit._y.set 200 _gameEngine._screen.print $0
_gameEngine はゲーム エンジン クラスのインスタンスを表すオブジェクトです。通常、オブジェクトはユーザーが定義した IRIS を継承する指示セットを表します。print は画面内の指定した座標にテキストを表示するゲーム エンジンの screen オブジェクトのコマンドです。このように、IRIS はプログラムまたはイベントのフローを制御する基本的な指示セットを提供します。それを利用できるものにするために、プログラマはアプリケーションの機能を補うために必要に応じて言語を拡張することができます。詳細については IRIS/IRIS++ 拡張のための拡張機能を参照してください。
スクリプトを実行する仮想マシンのコーディングも簡単です。IRIS 指示セットの数は少ないため、膨大なコーディングを必要としません。オリジナル プログラムは C++ でコーディングされているため、他のオブジェクト指向言語に簡単に移植できます。これは、他のオペレーティング システムへの簡単な移植を意味します。移植性の例については PHP 上の仮想マシンを参照してください。
アプリケーション エンジンとデータの間に層を提供します。リテラル データをプログラム内に定義するのはプログラミングにおいてあまり推奨されません。以下の例を考えてください。
// 例 1 void main() { // アプリケーションのタイトルを指定 setAppTitle("MyApplication"); } // 例 2 void main() { // アプリケーションのタイトルを外部ファイルから読み込む String appTitle = readData(); // アプリケーションのタイトルを指定 setAppTitle(appTitle); }
後者は少し複雑ですが、変更に柔軟です。例えば、アプリケーションのタイトルを "MyApp2" に変更したい場合。例 1 では、実際のメソッドに変更を加えて全てのアプリケーションをコンパイルする必要があります。例 2 の場合、外部ファイルの文字列を変更するだけでプログラムのコンパイルは必要ありません。これはコンパイルにかかる時間を削減するだけでなく、アプリケーション内にバグを増やすという問題からも解消されます。
IRIS の場合、ロジックや表示を変更したい場合、スクリプトの変更だけで対処できます。