Hatena::ブログ(Diary)

podhmoの日記

 | 

2010-10-10

拡張モジュールの作り方を説明しようと思います。

| 14:12

gaucheの拡張モジュールの作り方を調べていてわかったことなどをまとめようと思います。

まとめようと思った理由は、ネット上で見つかる拡張モジュールの作成のためのドキュメントが難しいという印象を受けたからでした。

正直なところ、リンク先の記事の内容は、難しくて理解し辛いです。

多くの概念や情報が一気にやってくるので、相当気力が充分にあるときでなければ、自分の脳の帯域的な意味で読み切るのが辛いです。

また、その他の拡張モジュールについて記事などは、利用法のみを説明する入門的な内容か、専門的な内容を含んだ断片的な情報が多いです。

ちょうど"中級者"に位置するような人を想定した情報が存在しないのです。

この層についての情報を補間するということも拡張モジュールの作り方を説明しようと思った目的のひとつです。

層の分類について

ちなみに、ここで言う"中級者"は以下のような分類の中での位置づけです。

初級者scheme入門中。プログラミングGaucheあるいはScheme関係の入門記事を見ている
中級者schemeの文法は分かる。提供されているライブラリを使うことはできる。…でもそこから先は…
上級者処理系のソースコードを読んで理解できる。必要なら深くまで潜ってバグを修正することができる

ちなみに、この分類と評価のベクトルが違いますが「SICP,RnRs..を完璧に理解する!!継続って…」というような「求道者」的な立ち位置の人もいたりしますね。



つまるところ、すでに存在する資産を利用することはできるが、自身の手で資産を新たに作り出すことができない人*1のための情報を提供していきたいということです。

*1:自分自身も含めて

shiroshiro 2010/10/10 16:18 わかりやすい記事ありがとうございます。
ciseの仕様はまだ固まってないので第三者に書けと言う方が無理です…

perlinnoise-2dですが、戻り値を::<float>と宣言してあれば、C関数の戻り値からSchemeオブジェクトへの変換も自動生成できます。ただしreturnではなくresultを使ってください。

(define-cproc perlinnoise-2d(x::<float> y::<float> persistence::<float> octaves::<float>) ::<float>
(result (perlinnoise_2d x y persistence octaves)))

returnはCのreturnに直で対応するため、自前で変換してやらないとおかしなことになるのに対し、resultは変換の手間も見てくれますし、多値を返すこともできます (ほんとはreturnにそういう機能を持たせた方がわかりやすかったんですが、互換性のためこうなっています)。resultは「戻り値用領域」に結果を格納するだけなので、resultの後に後始末処理を書くこともできます。現在はresult推奨で、returnはより低レベルな何かをしたい場合用、と考えて頂ければ良いかと。

podhmopodhmo 2010/10/10 16:35 なるほど、returnを使わずに基本的にresultを使えば良いのですね。resultの後に後処理を書けるというのはおもしろいです。begin0みたいな感覚で使うと良い感じですね。

トラックバック - http://d.hatena.ne.jp/podhmo/20101010/1286687567
 |