Rubyを組み込む側から見たAPI/ABIの互換性
vim の if_ruby.c を見ると、いかに vim が ruby の API 変更に必死のパッチで追従しているのか良くわかる。 https://t.co/nnHhdYDsfd
2013-02-26 10:07:34考えてみたら、ABI変わらない(はずな)のにソースコード修正が必要になるってなんか変だよね… ≫ if_ruby が ruby2.0 でビルド出来ない。 vim-jp/issues https://t.co/GJpFRPT7q1
2013-02-26 11:15:44@kaoriya @k_takata ABIバージョン変えてるとおり、ABIは変わってますね。で、これは Flonum 入れた @_ko1 が犯人
2013-02-26 12:03:10@kaoriya 本題とは関係ない余談ですが、わりとありますよ>ABI互換だが、API非互換。あるAPIをdeprecatedにする場合、APIとしては使えなくするけど、ABI互換のために機能としては残してあるとか、libcあたりでは割とあります。
2013-02-26 12:09:48@_ko1 @nalsh @k_takata 私の感覚で言えば、利用側のソースコードが変わってない(ABIが変わらないから当然な)のに、新たなシンボルが必要になるってのは変だなと感じます。
2013-02-26 12:13:06あ、ごめん。ちゃんとRuby 2.0のABIはバージョン変わってた。これに引きずられて確認怠ってた。 https://t.co/FrtRsUCqRJ
2013-02-26 12:14:52@kaoriya @_ko1 @k_takata なんか前提がおかしいようですが、バージョンアップごとにリコンパイルはしてもらいますし、ABIのバージョンは変えます。これは予期せぬABI非互換で知らぬうちに壊れるのを防ぐためです。この前提から外れている点があれば教えて頂きたいと
2013-02-26 12:16:18@nalsh @kaoriya @_ko1 @k_takata 言い方がわかりづらいな。ABIは壊します、ソースコード互換性は維持したいです
2013-02-26 12:17:47@nalsh @_ko1 @k_takata ABIの件は先のツイート通り私の勘違いで申し訳ない。ただVimのif_rubyではABIのバージョン変わらないのに再コンパイルだけではなく、ソースコードの修正(直接は使っていないシンボルの導入が大半)が必要になることが多いのです。
2013-02-26 12:18:40@nalsh @_ko1 @k_takata (続き)Vim側がrubyをdynamic loadingしているってのが1つの理由なんですが、ruby側でもいくつかのAPIがマクロで作られてて、その実装がコロコロ変わってるっていう理由もあると推測しています。
2013-02-26 12:20:22@nalsh してますが dll にエクスポートされてる物が変わってますし、inline になたりしてる物もあるのでいろいろと。。。
2013-02-26 12:20:34@nalsh @_ko1 @k_takata 先に書いたとおり、Vim側がDynamic Loadingしたいってのと、RubyがAPIをマクロで定義している(推測)ってあたりがぶつかっているのかと。
2013-02-26 12:22:09@kaoriya @nalsh @k_takata ソースコードレベルで API を保証しており、外からシンボルを見て~ ってのはあんまり気にしていない気がしますねえ
2013-02-26 12:22:16@_ko1 @nalsh @k_takata LuaやPerlにも似たような話は無くはないのですが、頻度的には少ない印象です。Pythonはほとんど記憶に無いです。インポートすべきシンボルが極端に少ないってのはありますが。
2013-02-26 12:24:28Vimのif_*でVim本体との相性が良い順序はpython > perl >(こえられない壁)> lua > rubyな感じ。
2013-02-26 12:26:46@mattn_jp ごめん。ぜんぜんわからん。ダメなコーディングサンプルを幾つか、またはコーディング規約の提案をruby-devに投げていただけるととても助かりますです
2013-02-26 14:18:29@kosaki55tea @mattn_jp ちなみにABI互換性についての一般論なら「どのようにしてlibcは後方互換を保つのか?」 http://t.co/Ml49LMGUvE にまとまってるんですけどね
2013-02-26 14:23:32@nalsh @mattn_jp vimのあのハックはそういう一般論の話には見えなかったんだが
2013-02-26 14:24:25