Rubyを組み込む側から見たAPI/ABIの互換性
@kaoriya それは普通にあります。たとえば NetBSD の statfs(2)→statvfs(2)の変更では、ユーザーランドのビルド環境からは、旧来のstruct statfsの定義が削除されて見えなくなったりしてます。(エントリポイントは残ってるのでABIは互換)
2013-02-26 15:10:23@kosaki55tea @nalsh rb_num2ulong,rb_float_newがinlineになったのでdllに含まれなくなり代わりにrb_float_new_in_heapの参照が追加です。 https://t.co/SPeaqLjz7P
2013-02-26 15:12:57@mattn_jp @kosaki55tea それについてはvim勢が「せっかく関数使ってるのにinlineにしたら意味ねーだろ!」とdisってよいですが、たぶんinlineである保証はないって返します
2013-02-26 15:15:13@kosaki55tea @mattn_jp 例えば http://t.co/yxB8CqNRLM 見るとわかるんですが、vim側はlibruby.soをリンクしないんですよ https://t.co/Dx4QBWuriB みたいに後でdlでとってきてる
2013-02-26 15:16:04@nalsh @kosaki55tea @mattn_jp だから、inlineにするとどこにもなくて死ぬ。なので、一定の関数はinlineにしないって合意を作らないといけないんだけど、今はどこにもない
2013-02-26 15:16:46@mattn_jp @nalsh inlineだとif_ruby.oに実体が展開されるんではないの?まだオレだけ話についていけてないようだ。すまぬー
2013-02-26 15:21:11@kosaki55tea @mattn_jp if_ruby.c内の関数は展開されるから大丈夫だけど、dl_symできないから実行時に死ぬんじゃない
2013-02-26 15:22:28@nalsh @kosaki55tea @mattn_jp if_ruby.c内で使ってる子がいないいなーい問題と、dl_sym出来ない問題が混ざってだいぶ理解に時間がかかった
2013-02-26 15:23:23@nalsh @mattn_jp やっとおいついたわ。dl_symする前提になってないのが諸悪の根源なんだな
2013-02-26 15:23:36@nalsh @mattn_jp ということを考えると ruby.h にインラインは1つも許されないのでは。ほんらい
2013-02-26 15:24:28@kosaki55tea @mattn_jp inlineのをdl_symしなければどうということはない。実態が保証することはまったく保証していないし。リコンパイル前提だから問題ないんですよ
2013-02-26 15:25:32@kosaki55tea @nalsh dl_sym したくてもシンボルが無いから取れないのです。なので同名の関数を作りました。 https://t.co/sydbLXRauR
2013-02-26 15:25:32@nalsh @mattn_jp アプリケーション組み込みだとlibruby とリンクしたくない気持ちは分かる
2013-02-26 15:25:46@nalsh @mattn_jp なにをdlsymしたくなるかはアプリ依存なので、ruby.hにインライン置くなという結論にしかならんと思うけどなあ。公開API置く場所なんだし、あそこ。intern.h ぐらいまでいくとまだ議論の余地があるような気がする
2013-02-26 15:27:17@nalsh @kosaki55tea ちなみに VC で作った dll と mingw32 で作った dll でエクスポートされてるシンボルが違ってた、という過去もありましたw
2013-02-26 15:27:58@mattn_jp @nalsh それは何が原因で? 逆に言うとなにをやめたら、その現象はなくなるの
2013-02-26 15:28:42