[目次へ] [次へ]

FGES1.00 の機能概要

FGES Core版はFGESの基本的な機能のみが実装されたエディションです。
FGES Full版はサウンド、グラフィック機能などを持つエディションです。

FGES1.00 Core版はFGES自体のテストを目的としたバージョンとなります。

●基本機構

FGESはFGES VMと呼ばれる仮想マシンを構築し、その中でスクリプトを実行します。
FGES VMはC++で記述されており、独自の命令セット(FGES ML)を実行する仮想CPUを
エミュレートする他、C++レベルでFGES用のクラスを定義できます。

FGES VMはプロセス起動時に作成され、プロセス終了時に破棄されます。
FGESで記述されたスクリプトはFGES VMに組み込まれたFGESコンパイラを通じて
FGES MLに変換されてから実行されます。

FGESコンパイラはFGES VM内のデータを直接参照、変更を行うため、
FGESコンパイラが動作している間、FGESコードの実行は停止されます。
また、FGESコンパイラからFGESコードを実行する場合、制限が掛かります。


●特徴

C++をベースとした明示的な宣言

   FGESの各種宣言は誤解しづらいよう明示的な宣言を要求します。
   このことはコンパイラの検証能力を高め、
   実行する前に多くのミスを検出することを可能とします。

静的解決と動的解決の両サポート

   FGESの名前解決はコンパイル時に解決する静的解決と
   実行時に解決する動的解決を両方サポートしています。
   C++で行うような厳格な型評価を利用しつつ、
   利用したいところでのみダックタイピングのような手法を利用することができます。

引数は参照渡し

   ベースであるC++とは異なり、FGESではメソッドの引数は必ず参照渡しされます。
   これに伴い不用意な変更を避けるため、引数のデフォルト属性は読み取り専用です。

ほぼ全てがオブジェクト

   FGES VMは原則として「FGESオブジェクト」のみを扱うようになっています。
   したがって、クラスやメソッドを含めVM上で扱うことができるものは
   ほぼ「FGESオブジェクト」となります。
   唯一の例外はフラグレジスタであり、組み込みの演算子のみが扱うことができます。
   ただしフラグレジスタをオブジェクトとして扱った場合、
   多くの場合 Bool 型へ暗黙変換されるため通常気になることはないはずです。

メモリ管理オブジェクト

   FGESはC++のようなグローバルメモリ割り当てでも、
   ガベージコレクションのような自動メモリ回収の仕組みでもなく、
   メモリ管理オブジェクトによるチェインによってオブジェクトの寿命を制御します。
   
   これはC++におけるローカル変数の寿命スコープがオブジェクト化できると考えることができ、
   メモリ管理オブジェクトが解放される時、管理下にあるオブジェクトが連鎖的に解放されます。
   FGESではローカルオブジェクトはローカルスコープが保有するメモリ管理オブジェクトにつながれていて、
   ローカルスコープの破棄にローカルオブジェクトの解放が連動するようになっています。

柔軟なスレッドコントロール

   FGESのスレッドはソフトウェアスレッドとして実装されています。
   ネイティブスレッドとしての性能を放棄する代わりに
   一般的なスレッド制御よりも柔軟な扱いが可能となっています。

保護されたファイルアクセス

   FGES VMはProtected Modeと呼ばれる保護モードがあり、
   このモードではFGESスクリプトからのファイルアクセスが
   指定されたフォルダに限定され、他のデータにアクセスできなくなります。
   (この制限はC++レベルで記述されたコードには適用されません)

[目次へ] [次へ]

最終更新 2017/04/16