C のヘッダファイルなんてのは…
拘束具なわけですよ。でリミッタ外すと暴走しやすくなっちゃうという。例えばこの挙動説明できますかーという話。
#include <stdio.h> int main() { printf("%f\n", sinf(10)); }
こんな普通のコード。
i@um ~/test> gcc fsin.c fsin.c: In function 'main': fsin.c:3: warning: incompatible implicit declaration of built-in function 'sinf' i@um ~/test> ./a.out -0.544021 i@um ~/test> gcc fsin.c -fno-builtin i@um ~/test> ./a.out 0.000000
Linux でもやってみる。
i@u ~/test> gcc fsin.c -lm fsin.c: In function 'main': fsin.c:3: warning: incompatible implicit declaration of built-in function 'sinf' i@u ~/test> ./a.out -0.544021 i@u ~/test> gcc fsin.c -lm -fno-builtin i@u ~/test> ./a.out -0.226913 i@u ~/test> ./a.out -1.687096 i@u ~/test> ./a.out -0.012923 i@u ~/test> ./a.out -0.699833 i@u ~/test> ./a.out -0.014358
Linux では毎度動作が変わるぞ! これはステキだ! fsin ってのは疑似乱数作る関数だったんだね。
追記: ざんねん! この疑似乱数は CPU に依存しちゃうんだ!
i@uk:~$ uname -a Linux uk 2.4.17_kuro-box #2 2004年 3月 18日 木曜日 11:39:47 JST ppc GNU/Linux i@uk:~$ gcc fsin.c -lm i@uk:~$ ./a.out -0.544021 i@uk:~$ gcc fsin.c -lm -fno-builtin i@uk:~$ ./a.out 0.000000
http://alohakun.blog7.fc2.com/blog-entry-685.html#comment
というわけで別に実装だの仕様だの見るまでもなく動作サンプル見たら別に本来のシグネチャなんて調べてないのは明白な気がするのですがーという。
coke
で、実際遊んでみる。
i@um idst-5.7/examples/jolt> ./main boot.k - Welcome to Jolt 0.1 [VPU 4.0.3 i386 darwin 2006-07-10 10:55:35] ; loading: 'boot.k ; loading: 'quasiquote.k ; loading: 'syntax.k ; loading: 'object.k .(define puts (_dlsym _RTLD_DEFAULT "puts")) => 268551648 ."hoge" => 6306608 .(puts "hoge") hoge => 10 .(puts 2) zsh: bus error ./main boot.k -
うーん面白いなーもうちょっと遊んでみた。
i@um idst-5.7/examples/jolt> ./main boot.k - Welcome to Jolt 0.1 [VPU 4.0.3 i386 darwin 2006-07-10 10:55:35] ; loading: 'boot.k ; loading: 'quasiquote.k ; loading: 'syntax.k ; loading: 'object.k .(define hoge "hoge") => 6306864 .(define puts (_dlsym _RTLD_DEFAULT "puts")) => 268551648 .(define qsort (_dlsym _RTLD_DEFAULT "qsort")) => 268453280 .(define strcmp (_dlsym _RTLD_DEFAULT "strcmp")) => 268444496 .(qsort hoge 0 0) => 6306864 .(qsort hoge 4 1 strcmp) => 103 .(puts hoge) egho => 10
qsort に callback をあえて渡さないギリギリ感がたまらない。あと qsort が返り値持ってるとか素敵よね。
ああくそうくやしいなぁ私もこいうの作りたかったわけで。まぁ今年中くらいにはなんか作りかけのインタプリタなんかしようか。したいな。できるといいな。