[1250] 関数実装について
投稿者:山
2009/05/02 18:30:12
>これは、CからDiksamの関数を関数名を指定して呼び出すということですよね。
内部的に見るとそうです。
言語仕様から見ると、Aプログラムの内部からBファイル内にある関数B1を普通に
コールすることです。当初は、ファイル名.関数名();で起動しようか、関数プロ
タイプ宣言で"ファイル名":関数名();で内部的には普通の関数記述と思いましたが。
いつ重いコンパイラが走るかコントロール出来ないので、プログラムファイル読込
み関数と破棄関数(中間コードリソースの破棄)を作ることにしました。
この仕様でVMの変更が発生します。それは、1ファイル内の関数コールはコンパ
イラで関数アドレスを生成しますが。ファイル外の場合、関数アドレスではなく関
数名を持って、実行時リンクして関数コールする仕様が追加になります。
(最外枠ブロックの実行構文はなくなり、ファイル名起動ではmain()が実行)
中間コードの構造は。
親 ファイル1 ファイル親ー>子 ファイルn
↓ |----------¬ |----------¬
子 関数1 ・・・・・・ 関数n 関数1 ・・・・・・ 関数n
の様に、階層構造の親子関係で関数置きに分離した中間コードになる予定です。
この、ファイルnの部分が必要時にコンパイルされ中間コードに追加される感じです。
この構造はちょうど関数単位のマルチスレッドに適応できます。
スレッド起動の仕様
普通に関数名(P1,,,Pn);を書くと戻ってくるまでコール元は待ちます。
start(関数名,起動P,,,Pn);と書くとスレッド起動となります。
例
thread_ID1 = start(fnc1,,,);
thread_ID2 = start(fnc1,,,);
thread_ID3 = start(fnc1,,,);
と書くとメインスレッドと3つのfnc1スレッドが同時に動きます。
関数については、この様な仕様を組込みたいと考えています。
また、グローバルシステム変数とスレッド起動された関数は一般的なCのグローバ
ル変数やスレッドとは、かなり性格が違ったものになります。でも、この点は実物
のめどが出来そうなときにでも、評価していただければ嬉しいと思っています。