トップ «前の日記(2001-08-07) 最新 次の日記(2001-08-09)» 月表示 編集

日々の流転


2001-08-08 [長年日記]

λ. Gimp-Ruby

Gimp-PerlでもPDLを使ってるし、Gimp-Rubyでもメモリを効率的に操作するライブラリを使いたくなって来た。探してみると幾つかあるみたい。

Tags: gimp ruby

λ. これから色々試してみようと思うけど、扱うのは主に画像データなので、線形代数的な機能の充実度はあんまし必要無くて、むしろ以下のような、あまり本質的でない部分が気になってる。

  • C言語レベルでのインターフェースが洗練されていて、ドキュメントもちゃんとあるか?
  • ポインタと開放用の関数を渡すことで、既にあるメモリブロックをラッピング出来るか?
  • 既にあるメモリブロックを一時的にラッピングしてアクセス出来、そして、メモリが無効になった事を通知して、以降はアクセス出来ないようにする…といったことが出来るか?
  • 非UNIX環境でもきちんと動作する。Windowsだとシンボルをちゃんとエクスポートして、他の拡張ライブラリから呼び出すことが出来るようになってるか?

λ. 誰か、お勧めのライブラリを教えて下さい。

λ. NArray

お。コメントされてしまった。ふむふむ、MDArray は Array と同じ VALUE の配列なので、メモリーブロックとしては使えないのか。

Tags: ruby
> 既にあるメモリブロックを一時的にラッピングしてアクセス出来、そして、メモリが無効になった事を通知して、以降はアクセス出来ないようにする…といったことが出来るか?
—— アクセス出来ないようにはできないでしょう。どうしたいのか具体的にはわからないけど、タイミング的に難しいのでは。

アクセス出来ないようにってのは、既にcloseしたファイルとか、既に無効になってしまったWeakRef等と同様に、操作しようとすると例外が発生するってのを考えてました。

それと、念頭にあったのは、メモリブロックを受け取るようなコールバック関数です。C言語で定義されたコールバック関数内で、Ruby側で定義された実際の関数を呼び出して、引数としてメモリブロックを渡したいんです。そのコールバック関数を抜けたあと、そのメモリブロックがどうなるかは保証の限りではないので、普通はデータをまるごとコピーする必要があります。でも、使われるかどうかも分からない引数にそこまでするのも無駄な気がしますし、こういう機能があれば、一時的にラッピングしておいて、コールバック関数を抜ける際に通知して、以降はアクセス出来ないようにするという事が出来ると思ったんです。…やり過ぎかな。

> 非UNIX環境でもきちんと動作する。Windowsだとシンボルをちゃんとエクスポートして、他の拡張ライブラリから呼び出すことが出来るようになってるか?
—— どうすればできるんでしょうか?

Windowsだと.defファイルに記述されたシンボル以外はエクスポートされなくて外部からアクセスできないので、外部から呼び出すためには適切な.defファイルを作成する必要があります。ちなみに、mkmf.rbのcreate_makefile関数は.defファイルが存在しない場合に「Init_拡張ライブラリ名」だけを記述した.defファイルを自動生成します。