機能の動的ロードに関して

現在葵のシステム関数呼び出しは、CALL_SYS(funcno)という1コードで行っています。
今後の拡張を考えて、システム関数以外の、外部ライブラリ(Flash SWFファイル)の関数を呼び出すとき、どのように実現するのが良いか考えています。

最も手抜きの実装は、CALL_LIB_FUNC("ライブラリ名:関数名")のように呼ぶ方法です。
これを実行すると以下の手順で関数が実行されます。
例えば、CALL_LIB_FUNC("CHARLIB:MOVE")を呼ぶ場合:

  • 1)ライブラリ「CHARLIB」が既にロードされているか?されていなければ「CHARLIB.SWF」をダウンロード
  • 2)ライブラリ内に、関数MOVEがあるか?あれば実行する、なければエラー。

実際のプログラムでは以下のようになるでしょう。

「CHARLIB」の「MOVE」を「おっさん,30,50」でライブラリ実行。

しかし、これでは、ぜんぜん不便です。とにかく、日本語プログラミング言語の枠組みに入れられません。
そこで、もっと使いやすいライブラリにするためには、日本語プログラミング言語のために、Flash関数を覆い隠すような定義が必要です。

# -- ラッパ関数の定義 --
●キャラ移動(誰を,X,Yへ)
  「CHARLIB」の「MOVE」を「{誰},{X},{Y}」でライブラリ実行。
# -- 関数の利用 --
「おっさん」を30,50へキャラ移動。

この実装の欠点は、実行速度が遅くなってしまうことです。ライブラリ関数を呼ぶために、葵側のユーザー定義関数を呼び、システム関数のライブラリ命令を呼び、ライブラリ内の関数を特定して、ようやく実行されることになります。
ただ良いこともあります。ラッパ関数を作れば、他の日本語命令と同じように呼ぶことができ、1度呼ぶだけならば、直接「ライブラリ実行」命令を書けばよいだけです。
そこで、外部ライブラリ呼び出しにおけるコスト軽減するために、一度呼んだ関数をキャッシュしたり、コンパイル時にただのラッパ関数なら、直接ライブラリを呼ぶような最適化を行うようにします。