最新

val it : α → α = fun

<<  2005/08  >>

2005/08/19 ねこのつづき

標準ライブラリを使ってみよう!と思って、

$print(math_pi());

というプログラムを書いてコンパイルして実行すると実行結果は、

null

となる。なんでじゃー。

ドキュメントを読む限り、 ndll は特に指定しなくてもカレントディレクトリと NEKOPATH なパスをサーチしてくれるみたいなんだけど、何か必要なんだろうか?

そもそもこれは、

  1. nekovm が名前解決ができてない場合に null になる
    1. ライブラリがロードできないので null になる
      1. そもそもライブラリが適切に生成されていないのでヘンなコードを実行して null になる

        のどれなのかがわからんねぇ……。そもそもどのライブラリを読むとどの名前が埋まっている、みたいな情報はどうやって得るのかな。どうも指示をしていないので std.ndll を読んでないだけのような悪寒。

        まあヒマがあったらライブラリロードまわりのコードを読んでみよう。

        それから、 FreeBSD でビルドしてみたぜ!という報告をMLにしてみたら、 OpenBSD でビルドしたよ!という強者がいた。負けた。

        (追記)まったく勘違いしていた。

        var math_pi = $loader.loadprim("std@math_pi");
        

        などとしないといけないようだ。解決されない名前はぜんぶ null になるんだろう。

        で、実行すると、 Primitive not found のエラー。うーむ、 dlsym でシンボルが取れてないのかなあ。

        あ、 FreeBSD だと Library not found だから dlopen でコケてるし。とほー。