2007/05/16

コンパイラとバーチャルマシン

 
最近、
 
ひぐらし や 獅子戦争 逆転裁判、さらに マンガ ときて、果ては 意味不明な検証
 
などばっかで過ごしすぎました。
 
 
こうしてみてると
 
「これでもか!」
 
というぐらい、のんびりしすぎてると思う( ´д`)
 
たぶん自分は幸せな人間なのかもしれないな。。ただのバカかもしれないけど。
 
 
 
ってことでそろそろ バーチャルマシン の開発を再開しないと、いつまでたっても次のステップにいけないので、
ボチボチと開始してます。
 
 
もうね、
実はうれしいぐらい順調だったりで for/whileループ  if/else  関数呼び出し / 変数の制御 までほとんど
問題なく動くようになりました。
 
バーチャルマシン上で動く【サンプルソース】はこんな感じ。
//////////////////////////////////////////////////
 
class Main{
      m_api;    // APIアクセス用
      m_var;    // テスト用
 
      run(){
           m_api = new SystemAPI();
 
           m_var = "ほげ " + 100 + " テスト";
 
           // メソッド呼び出し
           call( m_var );
 
 
           //  forループテスト
           for( var i=0 ; i<10 ; i++ )(
                m_api.Trace( "i: "+ i );    // Trace は System.out.println() で出力するメソッド
           }
 
           m_var = 0xFF;
 
           if( m_var==0 ){
                call( "0でーす" );
           }else{
                call( "ゼロ", "じゃないよ" );
           }
      }
 
      call( str ){
           m_api.Trace( str );
      }
 
      call( str, str2 ){
           m_api.Trace( str + str2 );
      }
}
 
//////////////////////////////////////////////////
 
いまは m_api と直接記述してるけど、基本的にマクロプログミングにする予定なので、
プログラマじゃない人でも、もっと直感的に書けるようになります
 
 
コンパイラに内蔵しているマクロはかなり強力なので、我ながらわくわくしちゃいます。
たぶん gcc にも引けを取らないかも??
 
専門用途で言うならば gcc のプリプロセッサを使うよりも便利なハズですからね。
 ( かと言って、まったく違うインターフェイスでは無いのが GOOD )
 
 
 
さて、ここで話は変わりますがエミュレーターって言葉はみなさご存知ですか?
 
たぶん、ここまで読んでくださったあなたはきっと知ってますね。
聞いたこと無い方は Google で検索してから下記の記事をご覧になったほうが良いかもしれません。
 
 
エミュレーターとコンパイラってどっちが難しい?
 
 
という意見をたまに見かけます。
これに関しては自分は、比較するものでは無いとも思ってしまうのですが。
 
 
双方とも、作る仕様によって難易度が大幅に違いますよね。
 
例えばエミュレーターならば ゲームボーイをエミュレートするのか、PS2 をエミュレートするのかでは
まったく違います。
 
コンパイラも同じで、ふぬけ仕様のコンパイラか、C++/Java 等を自分で実装するかは
まったく違います。
 
エミュレーターはグラフィックス、サウンド、はたまた通信など、幅も広かったりします。
 
 
思うにエミュとコンパイラの決定的な違いは、エミュはすでに存在する何かを再現するものだし、
コンパイラは基本的には新しいものを作り出すものなのです。
 
 
これってかなり違うと思うのですが、どうでしょう?
 
 
ただ、難しいという意味合いだけならば、きっと同じなのは間違いありませんね。
 
 
さて、自分もゲーム○ーイのエミュレーターぐらいから、時間を見つけて開発してみようかな。。
 
3年程前、某ソースを見た時は、理解不能かつ意味不明な16進テーブル定義 を見たら、
とても理解する気が無くなったのを、よーく覚えてます
 
仕様は知らなくても、こういうものだと思って定義すればきっと当時でも作れたかも。。
 
それは性格的にゆるさなかっのですな( ´д`)

0 件のコメント:

コメントを投稿