Rubyを組み込む側から見たAPI/ABIの互換性

Rubyを動的にロードしているVimから見るとAPI/ABIが頻繁に変更されているという話。
6
成瀬 @nalsh

@kosaki55tea @mattn_jp 「一般論なら」の趣旨は、vimの話はそれとは違うから差分pleaseと

2013-02-26 14:25:08
mattn @mattn_jp

@kosaki55tea @nalsh 戻ってきたら用済みでしたでok?

2013-02-26 14:35:56
MURAOKA Taro @kaoriya

@n_soda 過去にコンパイル通っていたのに通らなくなるレベルでありますか?

2013-02-26 14:58:18
SODA Noriyuki @n_soda

@kaoriya それは普通にあります。たとえば NetBSD の statfs(2)→statvfs(2)の変更では、ユーザーランドのビルド環境からは、旧来のstruct statfsの定義が削除されて見えなくなったりしてます。(エントリポイントは残ってるのでABIは互換)

2013-02-26 15:10:23
mattn @mattn_jp

@kosaki55tea @nalsh rb_num2ulong,rb_float_newがinlineになったのでdllに含まれなくなり代わりにrb_float_new_in_heapの参照が追加です。 https://t.co/SPeaqLjz7P

2013-02-26 15:12:57
成瀬 @nalsh

@mattn_jp @kosaki55tea それについてはvim勢が「せっかく関数使ってるのにinlineにしたら意味ねーだろ!」とdisってよいですが、たぶんinlineである保証はないって返します

2013-02-26 15:15:13
成瀬 @nalsh

@kosaki55tea @mattn_jp 例えば http://t.co/yxB8CqNRLM 見るとわかるんですが、vim側はlibruby.soをリンクしないんですよ https://t.co/Dx4QBWuriB みたいに後でdlでとってきてる

2013-02-26 15:16:04
成瀬 @nalsh

@nalsh @kosaki55tea @mattn_jp だから、inlineにするとどこにもなくて死ぬ。なので、一定の関数はinlineにしないって合意を作らないといけないんだけど、今はどこにもない

2013-02-26 15:16:46
mattn @mattn_jp

@kosaki55tea @nalsh inline はシンボルエクスポート対象じゃないです

2013-02-26 15:19:06
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@mattn_jp @nalsh inlineだとif_ruby.oに実体が展開されるんではないの?まだオレだけ話についていけてないようだ。すまぬー

2013-02-26 15:21:11
成瀬 @nalsh

@kosaki55tea @mattn_jp if_ruby.c内の関数は展開されるから大丈夫だけど、dl_symできないから実行時に死ぬんじゃない

2013-02-26 15:22:28
成瀬 @nalsh

@nalsh @kosaki55tea @mattn_jp if_ruby.c内で使ってる子がいないいなーい問題と、dl_sym出来ない問題が混ざってだいぶ理解に時間がかかった

2013-02-26 15:23:23
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@nalsh @mattn_jp やっとおいついたわ。dl_symする前提になってないのが諸悪の根源なんだな

2013-02-26 15:23:36
成瀬 @nalsh

@kosaki55tea @mattn_jp で、もともとそんな前提しらんがな⇒これから作るしかないなー ← いまここ

2013-02-26 15:24:26
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@nalsh @mattn_jp ということを考えると ruby.h にインラインは1つも許されないのでは。ほんらい

2013-02-26 15:24:28
成瀬 @nalsh

@kosaki55tea @mattn_jp inlineのをdl_symしなければどうということはない。実態が保証することはまったく保証していないし。リコンパイル前提だから問題ないんですよ

2013-02-26 15:25:32
mattn @mattn_jp

@kosaki55tea @nalsh dl_sym したくてもシンボルが無いから取れないのです。なので同名の関数を作りました。 https://t.co/sydbLXRauR

2013-02-26 15:25:32
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@nalsh @mattn_jp アプリケーション組み込みだとlibruby とリンクしたくない気持ちは分かる

2013-02-26 15:25:46
成瀬 @nalsh

@kosaki55tea @mattn_jp うん、気持ちは理解できる

2013-02-26 15:26:04
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@nalsh @mattn_jp なにをdlsymしたくなるかはアプリ依存なので、ruby.hにインライン置くなという結論にしかならんと思うけどなあ。公開API置く場所なんだし、あそこ。intern.h ぐらいまでいくとまだ議論の余地があるような気がする

2013-02-26 15:27:17
mattn @mattn_jp

@nalsh @kosaki55tea ちなみに VC で作った dll と mingw32 で作った dll でエクスポートされてるシンボルが違ってた、という過去もありましたw

2013-02-26 15:27:58
小崎 資広 (KOSAKI Motohiro) @kosaki55tea

@mattn_jp @nalsh それは何が原因で? 逆に言うとなにをやめたら、その現象はなくなるの

2013-02-26 15:28:42