ARGENTO CUORE

 May the code be with you.

--.--.--[--] スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.07.18[日] モジュールのロード

reallocって、古いメモリにあったデータを可能な限りコピーすると書いてあるけど、可能じゃないときって捨てるのかな、可能じゃないときってメモリ不足とかなのかな、他にも色々原因となる要素はあるのかな……と一抹の不安を覚えつつ、これは便利だ。
今まで、バラバラにmallocしてたからそれの管理をするためにメモリ参照のデータ構造を作ってメモリリークを監視するようなものを用意してたんだけど、reallocで再確保すれば、そのポインタだけ保持してれば良い。良かった。

そもそもC言語、大学時代に勉強したけど、そのあとJavaやったし、そのあとPHPやったりScalaやったりRubyやったりで、真髄的な部分まできちんと理解してない。けど、他の言語をやってたおかげで、めちゃくちゃC言語触るの楽しい。なんかこう、ハードウェアを身近に感じられるのが新鮮。
勝手にメモリ確保するな、勝手にGC走らせるな、遅いよ遅いよどうしよう的な状態から一気解放された。

インタープリタ自作にあたって、構文はBASICを参考にする予定だけど、全ての処理はライブラリをロードして、それを使って行うようにしたかった。算術演算には算術演算のモジュールをロードする感じにしておけば、算術演算の処理だけを精度が高いものにゴッソリ変更したりしつつ、プログラムは一切手を加えなくて済むみたいな……いや、既にいっぱいそういうのはあるだろうけど……。車輪の再発明、結構じゃないか。とか、そんなノリで。

で、俺言語モジュールをロードする際、インタープリタ側では以下のような情報を得られないといけない。
・読み込んだモジュールの名称
・モジュールに実装されているインターフェース(関数)名と、その処理へのポインタ
このためには、モジュールを定義&処理定義のためのモジュールを作るためのライブラリを作る必要がある。のだろうか、他に良い方法あるだろうか。そんなことはとりあえず置いておいて、書く。

typedef struct{
処理名
関数へのポインタ
 引数の数
}tModuleFunction;
typedef struct{
 モジュール名
関数の数
 tModuleFunctionへのポインタ
}tModule;

みたいなのを用意して、それぞれに値をセットしていくようにする。モジュールのコードには、ロード時に必ず読み込まれる関数を定義しておき、そこで各データ構造体に値をセットする関数を呼び出すようにする。

インタープリタ側では、
void* module_objects;
みたいな感じで、モジュールのポインタを保持しておくための変数1つを持っておき、モジュールの初期化関数の戻り値=モジュールのポインタにしておいてインタープリタ側で受け取るようにする。

あとは、インタープリタ側で読み込んだモジュール名とその数をテーブルにして管理しておき、必要に応じて処理を呼び出す。
ように作った。けど、こんな作りで良いのかわからない……&C言語使ってる知り合いがいないので助言も聞けない。
良いのか、良いのかな。まぁ、問題が起きたら変えよう。たぶんこれで上手くいくはずだ。

変数の命名で悩む。授業で習ったときには、グローバル変数にg_とか、そういうのを付けると習ったんだけど、いまいち、自分はそんなコードをみたことがない。typedefしたものにtは付けるようにしているけど、それ以外はものすごく適当。ただ、Javaとかやってたせいで、省略記法を使う頻度は減ったと思う。getFrmMdlCntとかよりも、getFromModuleCountのほうが健全だよね……とか思うのは、Javaに毒されたからかな……。というか、今時の言語で英単語を省略しているのはあまり見たことないような気もする。悪習?

個人的に、関数やメソッド名は、ラクダで書くけど、変数名やメンバ変数はアンダーバーでつなげて書く派(そんな派閥があるのかは不明だけど……調べてみたら、アンダーバーでつなぐのはスネークケースというらしい。強そう)。
スポンサーサイト

Comment






(編集・削除用)


管理者にだけ表示を許可

Trackback

http://ronor.blog81.fc2.com/tb.php/136-1a774fab

この記事にトラックバック(FC2Blog User)

Scala Feed

scala feed

FC2カウンター

プロフィール

RoNor

Author:RoNor
得意呪文はScalaですって言えるようになるのが夢です。
デスマーチ中、パーティメンバーの防御力を向上させたりさせなかったり。

検索フォーム

QRコード

QRコード

Copyright © 2009-2010 ARGENTO CUORE and RoNor All rights reserved.

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。