[ruby-trunk - Feature #8469][Open] ABI checker とか導入しませんか

Issue #8469 has been reported by kosaki (Motohiro KOSAKI).


Feature #8469: ABI checker とか導入しませんか

Author: kosaki (Motohiro KOSAKI)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

最近 Vit が報告してきたように、193にもたまにABI非互換が入っているようです。
見たところ実害はなさそうなのですが、非互換が報告されてから実害の有無を検討するのは不毛なのでパッチリリース前に
機械的にチェックしたいですよね。ほとんどのケースは意図的な非互換だからOKという結論になるのだろうとは思いますが、
精神衛生上、枕を高くして寝れる度がちょっとだけ上がります。

で、ちょっと時間をとってみたところ、意外と簡単そう。

http://ispras.linuxbase.org/index.php/ABI_compliance_checker にある、ABI
checkerと
abi-checker · kosaki/ruby@e27c2e5 · GitHub
のパッチをダウンロードして

./ruby …/tool/abi-checker.rb ~/local/ruby-193p0 ~/local/ruby-193

とすると、スクリーンショットのような結果が得られます。
193p0とくらべて最新の193ブランチは

rb_class_init_copy ( VALUE p1, VALUE p2 )
rb_path_end ( char const* p1 )
rb_path_last_separator ( char const* p1 )
rb_path_next ( char const* p1 )
rb_path_skip_prefix ( char const* p1 )
ruby_find_basename ( char const* name, long* baselen, long* alllen )
ruby_find_extname ( char const* name, long* len )

の7つのシンボルが消えてしまっているわけですね。
基本的に現在パッチリリースをしているのって世の中に三人しかいないので、うささん、ながちかさん、うらべさんの意見を聞きたい
ところですが、どうでしょうか。

Issue #8469 has been updated by usa (Usaku NAKAMURA).

CIに組み込んでもらえるとちょー助かる感じですぅ

Feature #8469: ABI checker とか導入しませんか

Author: kosaki (Motohiro KOSAKI)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

最近 Vit が報告してきたように、193にもたまにABI非互換が入っているようです。
見たところ実害はなさそうなのですが、非互換が報告されてから実害の有無を検討するのは不毛なのでパッチリリース前に
機械的にチェックしたいですよね。ほとんどのケースは意図的な非互換だからOKという結論になるのだろうとは思いますが、
精神衛生上、枕を高くして寝れる度がちょっとだけ上がります。

で、ちょっと時間をとってみたところ、意外と簡単そう。

http://ispras.linuxbase.org/index.php/ABI_compliance_checker にある、ABI
checkerと
abi-checker · kosaki/ruby@e27c2e5 · GitHub
のパッチをダウンロードして

./ruby …/tool/abi-checker.rb ~/local/ruby-193p0 ~/local/ruby-193

とすると、スクリーンショットのような結果が得られます。
193p0とくらべて最新の193ブランチは

rb_class_init_copy ( VALUE p1, VALUE p2 )
rb_path_end ( char const* p1 )
rb_path_last_separator ( char const* p1 )
rb_path_next ( char const* p1 )
rb_path_skip_prefix ( char const* p1 )
ruby_find_basename ( char const* name, long* baselen, long* alllen )
ruby_find_extname ( char const* name, long* len )

の7つのシンボルが消えてしまっているわけですね。
基本的に現在パッチリリースをしているのって世の中に三人しかいないので、うささん、ながちかさん、うらべさんの意見を聞きたい
ところですが、どうでしょうか。

2013$BG/(B6$B7n(B4$BF|(B 14:23 KOSAKI Motohiro
[email protected]:

CI $B$C$FC/$KAjCL$9$l$P$$$$$s$G$9$+$M!#:#$N%D!<%k$@$HHf3SBP>]$N%P%$%J%j$^$?$O(B

ABI$B>pJs$r$V$C$3$L$$$?(BXML$B%U%!%$%k72$r(Btar$B%"!<%+%$%V$7$?$b$N$rHf3SBP>]$H$7$F(B

$B$I$3$+$K$$$$F$$+$J$$$H$$$1$J$/$F!“(B1.9.3$B$@$H(Bp0$B$+$i$O$b$&:90[$,$”$k$N$O$o$+$C$F$k$N$G(B

$B:G?7$N%Q%C%A%j%j!<%9$r(BCI$B$KCV$-$?$$$H$3$m$J$s$G$9$1$I!#(B

$BC/$K!“$H$$$o$l$k$H(B chkbuild $B$K4X$7$F$O;d$G$7$g$&$,!”(B
$B8e$G$A$g$C$H8+$F$_$^$9!#(B

$BHf3SBP>]$rMQ0U$7$J$$$H$$$1$J$$$N$,LLE]$/$5$=$&$G$[$C$?$i$+$7$F$?$s$G$9$,!#(B

CI$B$KAH$_9~$s$G$b$i$($k$H$A$g!<=u$+$k46$8$G$9$%(B

CI
$B$C$FC/$KAjCL$9$l$P$$$$$s$G$9$+$M!#:#$N%D!<%k$@$HHf3SBP>]$N%P%$%J%j$^$?$O(B
ABI$B>pJs$r$V$C$3$L$$$?(BXML$B%U%!%$%k72$r(Btar$B%"!<%+%$%V$7$?$b$N$rHf3SBP>]$H$7$F(B
$B$I$3$+$K$$$$F$$+$J$$$H$$$1$J$/$F!"(B1.9.3$B$@$H(Bp0$B$+$i$O$b$&:90[$,$"$k$N$O$o$+$C$F$k$N$G(B
$B:G?7$N%Q%C%A%j%j!<%9$r(BCI$B$KCV$-$?$$$H$3$m$J$s$G$9$1$I!#(B

CI $B$C$FC/$KAjCL$9$l$P$$$$$s$G$9$+$M!#:#$N%D!<%k$@$HHf3SBP>]$N%P%$%J%j$^$?$O(B

ABI$B>pJs$r$V$C$3$L$$$?(BXML$B%U%!%$%k72$r(Btar$B%"!<%+%$%V$7$?$b$N$rHf3SBP>]$H$7$F(B

$B$I$3$+$K$$$$F$$+$J$$$H$$$1$J$/$F!“(B1.9.3$B$@$H(Bp0$B$+$i$O$b$&:90[$,$”$k$N$O$o$+$C$F$k$N$G(B

$B:G?7$N%Q%C%A%j%j!<%9$r(BCI$B$KCV$-$?$$$H$3$m$J$s$G$9$1$I!#(B

$BC/$K!“$H$$$o$l$k$H(B chkbuild $B$K4X$7$F$O;d$G$7$g$&$,!”(B
$B8e$G$A$g$C$H8+$F$_$^$9!#(B

$BHf3SBP>]$rMQ0U$7$J$$$H$$$1$J$$$N$,LLE]$/$5$=$&$G$[$C$?$i$+$7$F$?$s$G$9$,!#(B

$B$=$l$,<u$1F~$l$i$l$J$$$H$9$k$H(Bglibc
$B$_$?$$$K8x3+$9$k%7%s%%k$rA4ItJL%U%!%$%k$K5-=R$5$;$F!“(B
make tests
$B$N2>Dj$GFM$-9g$o$;$r$9$k$H$$$&=hM}$r$9$k$3$H$K$J$j$=$&$G$9$,!”$3$l$O7k9=(B
$B$a$s$I$/$5$$$G$9!#@5D>$J$H$3$m!#(B

e.g.
http://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/Versions;h=7ca9bdf25fcafdf2b01080d972bbde755a4f8108;hb=HEAD

$B4D6-JQ?t$GHf3SBP>]$N(Bruby$B$N%Q%9$,L@<($5$l$F$?$H$-$N$_!“Hf3S$7$F7k2L$rI=<(!#$H$+$@$H0lHL$N(B
chkbuild$B%f!<%6!<$X$NLBOG$,$9$/$J$$$+$J$”!#(B

2013$BG/(B6$B7n(B4$BF|(B 15:26 KOSAKI Motohiro
[email protected]:

$BHf3SBP>]$rMQ0U$7$J$$$H$$$1$J$$$N$,LLE]$/$5$=$&$G$[$C$?$i$+$7$F$?$s$G$9$,!#(B

$B$=$l$,<u$1F~$l$i$l$J$$$H$9$k$H(Bglibc
$B$_$?$$$K8x3+$9$k%7%s%%k$rA4ItJL%U%!%$%k$K5-=R$5$;$F!"(B

$BJL$K<u$1F~$l$i$l$J$$$3$H$O$J$/$F!“$*$C$/$&!”$/$i$$$N46$8$G$9!#(B

$B$G!";n$7$F$$?$s$G$9$,!"(B–enable-shared $B$,I,MW$J$h$&$G$9$M!#(B
$B$^$!$=$l$O$D$1$k$H$7$F!"G:$
$I$3$m$O=PNO$+$J$!!#(B

$B:#$OI8==PNO$K?b$lN.$7$?$N$r$R$H$D$N%U%!%$%k$H$7$F5-O?$7$F$$$k$N$G$9$,!"(B HTML $B%U%!%$%k$r$=$N$^$^I8==PNO$K=P$9$N$O$h$m$7$/$J$$$G$9$h$M!#(B

chkbuild $BE*$K4JC1$J$N$O(B w3m
$B$“$?$j$G%F%-%9%H$K$7$FI8=`=PNO$K=P$7$F$7$^$&$H$$$&$”$?$j$G$9$,!#(B

$BHf3SBP>]$rMQ0U$7$J$$$H$$$1$J$$$N$,LLE]$/$5$=$&$G$[$C$?$i$+$7$F$?$s$G$9$,!#(B

$B$=$l$,<u$1F~$l$i$l$J$$$H$9$k$H(Bglibc
$B$_$?$$$K8x3+$9$k%7%s%%k$rA4ItJL%U%!%$%k$K5-=R$5$;$F!"(B

$BJL$K<u$1F~$l$i$l$J$$$3$H$O$J$/$F!"$*$C$/$&!"$/$i$$$N46$8$G$9!#(B

$B$J$k$[$I!#$8$c$"!"$$$A$I:#Ds0F$7$F$$$kHf3SJ}<0$GAv$C$F$_$FLdBj$,B?$$$h$&$J$i(B
$B:F5DO@$H$$$&$3$H$G!#(B

$B$G!";n$7$F$_$?$s$G$9$,!"(B–enable-shared $B$,I,MW$J$h$&$G$9$M!#(B

$B$9$$$^$;$s!"A02s$N%a!<%k$G=q$-K:$l$^$7$?!#(B

$B$^$!$=$l$O$D$1$k$H$7$F!"G:$_$I$3$m$O=PNO$+$J$!!#(B

$B:#$OI8==PNO$K?b$lN.$7$?$N$r$R$H$D$N%U%!%$%k$H$7$F5-O?$7$F$$$k$N$G$9$,!"(B HTML $B%U%!%$%k$r$=$N$^$^I8==PNO$K=P$9$N$O$h$m$7$/$J$$$G$9$h$M!#(B

chkbuild $BE*$K4JC1$J$N$O(B w3m
$B$"$?$j$G%F%-%9%H$K$7$FI8=`=PNO$K=P$7$F$7$^$&$H$$$&$"$?$j$G$9$,!#(B

abi-checker$B$N%3%^%s%I$O(Bxml$B=PNO$r%5%]!<%H$7$F$k$N$G!“Mh=5$+:FMh=5;~4V$,$H$l$?$H$-$K!”$=$3$+$i%W%l%$%s%F%-%9%H$KJQ49$9$k%9%/%j%W%H=q$$$F$_$^$9!#(B
$B$H$3$m$G!"$$$^(B rubyci.org$B$G$O(B test-all
$B$,(B0F0E$B0J30$N$H$-$O(B 1F2E
$B$H$+$N?t;zI=<($H%F!<%V%k$N?'JQ99$,%5%^%j!<2hLL$N%F!<%V%k$KI=<($5$l$F$^$9$,!"$3$l$O(B
test-all $B$+$i(B
grep$B$7$F$k$H$$$&M}2r$G$"$C$F$^$9$+!)(B

ABI incompatible summary: nAnRnHnMnL

n: $B?t;z!"#0$G$"$k$Y$-(B
A: add
R: remove
H: $B=EMWEY(BHigh$B$NJQ99(B
M: $B=EMWEY(BMiddle$B$NJQ99(B
L: $B=EMWEY(BLow$B$NJQ99(B

$B$_$?$$$J9T$r@hF,$N$[$&$KMQ0U$7$?$iF1$8$h$&$K?t;z$,(B0$B0J30$N$H$-$K%F!<%V%k$,@V$/$J$k$H$+=PMh$^$9!)(B

2013$BG/(B6$B7n(B6$BF|(B 3:29 KOSAKI Motohiro
[email protected]:

$B$^$!$=$l$O$D$1$k$H$7$F!"G:$_$I$3$m$O=PNO$+$J$!!#(B

$B:#$OI8==PNO$K?b$lN.$7$?$N$r$R$H$D$N%U%!%$%k$H$7$F5-O?$7$F$$$k$N$G$9$,!"(B HTML $B%U%!%$%k$r$=$N$^$^I8==PNO$K=P$9$N$O$h$m$7$/$J$$$G$9$h$M!#(B

chkbuild $BE*$K4JC1$J$N$O(B w3m
$B$“$?$j$G%F%-%9%H$K$7$FI8=`=PNO$K=P$7$F$7$^$&$H$$$&$”$?$j$G$9$,!#(B

$B$H$j$“$($:!”(Bw3m $B$G@07A$7$F$D$1$F$_$^$7$?!#(B

http://www.rubyist.net/~akr/chkbuild/debian/ruby-1.9.3/log/20130606T142542Z.log.html.gz#abi-check
http://www.rubyist.net/~akr/chkbuild/debian/ruby-2.0.0/log/20130606T134647Z.log.html.gz#abi-check
http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130606T130700Z.log.html.gz#abi-check

1.9.3 $B$H(B 2.0.0 $B$O$=$l$>$l$N(B p0 $B$H$NHf3S$G$9!#(B
$B$D$$$G$K(B trunk $B$O(B 2.0.0p0 $B$HHf3S$7$F$_$^$7$?!#(B
(1.8.7 $B$O$=$m$=$m=*$o$k$O$:$J$N$G$d$C$F$^$;$s(B)

abi-checker$B$N%3%^%s%I$O(Bxml$B=PNO$r%5%]!<%H$7$F$k$N$G!“Mh=5$+:FMh=5;~4V$,$H$l$?$H$-$K!”$=$3$+$i%W%l%$%s%F%-%9%H$KJQ49$9$k%9%/%j%W%H=q$$$F$_$^$9!#(B

$B$H$3$m$G!"$$$^(B rubyci.org$B$G$O(B test-all $B$,(B0F0E$B0J30$N$H$-$O(B 1F2E

$B$H$+$N?t;zI=<($H%F!<%V%k$N?'JQ99$,%5%^%j!<2hLL$N%F!<%V%k$KI=<($5$l$F$^$9$,!"$3$l$O(B
test-all $B$+$i(B

grep$B$7$F$k$H$$$&M}2r$G$"$C$F$^$9$+!)(B

$B=PNO$+$i9TC10L$K%Q%?!<%s%^%C%A$7$FH4$-=P$7$F$^$9!#(B
Ruby
$B$G=q$$$F$"$k$N$G!“A}$d$7$?$j$J$s$J$j$O$=$s$J$K$`$:$+$7$/$O$”$j$^$;$s!#(B
($B$?$@$7!“9TC10L$G$=$N9T$rG’<1$G$-$kI,MW$,$”$j$^$9(B)

ABI incompatible summary: nAnRnHnMnL

n: $B?t;z!“#0$G$”$k$Y$-(B
A: add
R: remove
H: $B=EMWEY(BHigh$B$NJQ99(B
M: $B=EMWEY(BMiddle$B$NJQ99(B
L: $B=EMWEY(BLow$B$NJQ99(B

$B$_$?$$$J9T$r@hF,$N$[$&$KMQ0U$7$?$iF1$8$h$&$K?t;z$,(B0$B0J30$N$H$-$K%F!<%V%k$,@V$/$J$k$H$+=PMh$^$9!)(B

$BH4$-=P$7$F%?%$%H%k$J$I$K$D$1$k$N$O$G$-$k$H;W$$$^$9!#(B
$B%?%$%H%k$O(B recent.html $B$N0l9T$K$b$J$j!“(Brubyci.org $B$O(B
recent.html $B$rFI$s$G$$$k$N$G!”(B
rubyci.org $B$^$G>pJs$OFO$-$^$9!#(B

$B@V$/$J$k$+$I$&$+$O$h$/$o$+$j$^$;$s!#(B
$B$I$&$d$C$F?‘$,JQ$o$C$F$$$k$+M}2r$7$F$$$J$$$N$G!#(B
$B$H$$$&$+(B HTML
$B$rFI$s$G$b?’$,$I$&$d$C$F$D$$$F$$$k$N$+$o$+$i$J$$$N$G$9!#(B
($B$J$k$;$5$s$O$J$s$+(B CSS
$B$G$,$s$P$C$F$$$k$H8@$C$F$F$$$?$h$&$J5$$,$7$^$9(B)

(13/06/07 0:42), Tanaka A. wrote:

http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130606T130700Z.log.html.gz#abi-check

1.9.3 $B$H(B 2.0.0 $B$O$=$l$>$l$N(B p0 $B$H$NHf3S$G$9!#(B
$B$D$$$G$K(B trunk $B$O(B 2.0.0p0 $B$HHf3S$7$F$_$^$7$?!#(B

confname.h$B$H$$$&%U%!%$%k$GBgNL$K=P$F$$$k$h$&$J$s$G$9$,!"$3$l$O2?$G$7$?$C$1!#(B

2013$BG/(B6$B7n(B7$BF|(B 12:31 Nobuyoshi N. [email protected]:

confname.h$B$H$$$&%U%!%$%k$GBgNL$K=P$F$$$k$h$&$J$s$G$9$,!"$3$l$O2?$G$7$?$C$1!#(B

/usr/include/bits/confname.h $B$C$]$$$G$9$,!"$J$s$G$9$+$M$'!#(B

2013/6/6 Tanaka A. [email protected]:

http://www.rubyist.net/~akr/chkbuild/debian/ruby-1.9.3/log/20130606T142542Z.log.html.gz#abi-check

http://www.rubyist.net/~akr/chkbuild/debian/ruby-2.0.0/log/20130606T134647Z.log.html.gz#abi-check

http://www.rubyist.net/~akr/chkbuild/debian/ruby-trunk/log/20130606T130700Z.log.html.gz#abi-check

1.9.3 $B$H(B 2.0.0 $B$O$=$l$>$l$N(B p0 $B$H$NHf3S$G$9!#(B
$B$D$$$G$K(B trunk $B$O(B 2.0.0p0 $B$HHf3S$7$F$_$^$7$?!#(B
(1.8.7 $B$O$=$m$=$m=*$o$k$O$:$J$N$G$d$C$F$^$;$s(B)

$B$&$r!#$J$s$H!"$b$&$G$-$?$H$O!#$b$&$3$l$G$$$$$8$c$s!*=PNOA[A|$7$F$?$h$j$b(B
$B$:$C$He:No$@$7!#(B

$BF~$l$?(B commit:
Add abi-checker.rb written by kosaki. · ruby/chkbuild@8fbf082 · GitHub

$B$“$k$$$O(B abi-checker.rb $B$O(B ruby $BK\BN$KF~$l$kA[Dj$J$N$+$J$!!#(B
$B:#$+$i(B 1.9.3 $B$d(B 2.0.0 $B%V%i%s%A$KF~$l$k$N$+$H$$$&OC$O$”$j$^$9$,!#(B

$B:G=i!"(Bchkbuild$B$KAH$_9~$`$H$3$m$^$G!"9M$($F$J$/$F(BRuby$B$KF~$l$F<jF0$G<B9T$9$k%$%a!<%8$@$C$?$s$G$9$,!"L@$i$+$K(Bchkbuild$B$N$[$&$,;H$$>!<j$,$h$$$N$G(Bakr$B$5$s$,$h$m$7$1$l$P(B
chkbuild$B$N%D%j!<$KF~$l$F$$$?$@$-$?$$$G$9!#%i%$%;%s%9$O(B
chkbuild$BK\BN$HF1$8$G!#(B

2013$BG/(B6$B7n(B7$BF|(B 2:08 KOSAKI Motohiro
[email protected]:

1.9.3 $B$H(B 2.0.0 $B$O$=$l$>$l$N(B p0 $B$H$NHf3S$G$9!#(B
$B$D$$$G$K(B trunk $B$O(B 2.0.0p0 $B$HHf3S$7$F$_$^$7$?!#(B
(1.8.7 $B$O$=$m$=$m=*$o$k$O$:$J$N$G$d$C$F$^$;$s(B)

$B$&$r!#$J$s$H!"$b$&$G$-$?$H$O!#$b$&$3$l$G$$$$$8$c$s!*=PNOA[A|$7$F$?$h$j$b(B
$B$:$C$He:No$@$7!#(B

$B$=$&$$$($P!“$3$l$N$?$a$K$3$5$-$5$s$,=q$$$?(B

$B$N(B abi-checker.rb $B$r(B chkbuild $B$KF~$l$?$s$G$9$,!”(B
chkbuild $B$,=$@5(BBSD$B%i%$%;%s%9$J$N$G!"(Babi-checker.rb
$B$b=$@5(BBSD$B%i%$%;%s%9$G$$$$$G$7$g$&$+(B?

$BF~$l$?(B commit:

$B$“$k$$$O(B abi-checker.rb $B$O(B ruby $BK\BN$KF~$l$kA[Dj$J$N$+$J$!!#(B
$B:#$+$i(B 1.9.3 $B$d(B 2.0.0
$B%V%i%s%A$KF~$l$k$N$+$H$$$&OC$O$”$j$^$9$,!#(B

confname.h$B$H$$$&%U%!%$%k$GBgNL$K=P$F$$$k$h$&$J$s$G$9$,!"$3$l$O2?$G$7$?$C$1!#(B

/usr/include/bits/confname.h $B$C$]$$$G$9$,!"$J$s$G$9$+$M$’!#(B

trunk $B$@$H!"(Bdefines.h$B$,(Bunistd.h
$B$r(Binclude$B$9$k$h$&$K$J$C$?$N$G!"(BC$B3HD%$+$i$_$k$H(B
ruby.h
$B$r%$%s%/%k!<%I$7$?;~$KDj5A$5$l$k(BSymbol$B$,A}$($F$$$k$H$$$&$3$H$@$H;W$$$^$9!#(B

$B$3$N$X$s$N(B Severity rank$B$,$D$$$F$$$J$$!"(BOther changes
$B$O$"$s$^$j5$$K$7$J$/$F$$$$$s$8$c$J$$$+$J!#$I$N$_$A>WFM$9$k$N$O(BC$B%3!<%I$,(B
_
$B;O$^$j$N%7%s%%k$r;H$C$F$$$?;~$@$1$G!"$=$l$O<+J,$NB-$r7b$D<+M3$H$$$&$d$D$J$N$G!#(B

$BJ6$i$o$7$$$+$i>C$;$H$$$&0U8+$,$?$/$5$sMh$?$i!"$I$C$+$K;~4V<h$C$F%9%/%j%W%H=q$-$^$9(B

2013$BG/(B6$B7n(B8$BF|(B 4:36 KOSAKI Motohiro
[email protected]:

$B$“$k$$$O(B abi-checker.rb $B$O(B ruby $BK\BN$KF~$l$kA[Dj$J$N$+$J$!!#(B
$B:#$+$i(B 1.9.3 $B$d(B 2.0.0 $B%V%i%s%A$KF~$l$k$N$+$H$$$&OC$O$”$j$^$9$,!#(B

$B:G=i!"(Bchkbuild$B$KAH$_9~$`$H$3$m$^$G!"9M$($F$J$/$F(BRuby$B$KF~$l$F<jF0$G<B9T$9$k%$%a!<%8$@$C$?$s$G$9$,!"L@$i$+$K(Bchkbuild$B$N$[$&$,;H$$>!<j$,$h$$$N$G(Bakr$B$5$s$,$h$m$7$1$l$P(B

chkbuild$B$N%D%j!<$KF~$l$F$$$?$@$-$?$$$G$9!#%i%$%;%s%9$O(B
chkbuild$BK\BN$HF1$8$G!#(B

$B%i%$%;%s%9$r=q$$$F$*$-$^$7$?!#(B

Ruby $BB&$K(B abi-checker.rb
$B$,$“$l$P$=$C$A$r<B9T$9$k$H$+$b$G$-$k$N$G!”(B
$B$$$m$$$m$H2~B$$7$?$/$J$C$?$i$=$&$$$&$3$H$b9M$($^$7$g$&!#(B

2013/7/8 kosaki (Motohiro KOSAKI) [email protected]:

Issue #8469 has been updated by kosaki (Motohiro KOSAKI).

Status changed from Open to Closed

Close$B$9$k$NK:$l$F$^$7$?!#$9$$$^$;$s!#(B

$BJD$8$F$+$iJ9$/$N$b%“%l$J$s$G$9$,!”(Brubyci.org
$B$N%H%C%W%Z!<%8$NI=$K(B ABI breakage
$B$N%+%i%`$rDI2C$9$k$N$OC/$KAjCL$9$l$P$h$$$G$7$g$&$+!)(B

$B$3$s$K$A$O!"$J$+$`$i(B($B$&(B)$B$G$9!#(B

In message “[ruby-dev:47493] Re: [ruby-trunk - Feature #8469][Closed]
ABI checker $B$H$+F3F~$7$^$;$s$+(B”
on Jul.09,2013 09:11:18, [email protected] wrote:

$BJD$8$F$+$iJ9$/$N$b%“%l$J$s$G$9$,!”(Brubyci.org $B$N%H%C%W%Z!<%8$NI=$K(B ABI
breakage $B$N%+%i%`$rDI2C$9$k$N$OC/$KAjCL$9$l$P$h$$$G$7$g$&$+!)(B

$B@.@%$5$s$+$J!#$I$&$G$7$g$&(B?

$B$=$l$G$O!#(B

Issue #8469 has been updated by kosaki (Motohiro KOSAKI).

Status changed from Open to Closed

Closeするの忘れてました。すいません。

Feature #8469: ABI checker とか導入しませんか

Author: kosaki (Motohiro KOSAKI)
Status: Closed
Priority: Normal
Assignee:
Category:
Target version:

最近 Vit が報告してきたように、193にもたまにABI非互換が入っているようです。
見たところ実害はなさそうなのですが、非互換が報告されてから実害の有無を検討するのは不毛なのでパッチリリース前に
機械的にチェックしたいですよね。ほとんどのケースは意図的な非互換だからOKという結論になるのだろうとは思いますが、
精神衛生上、枕を高くして寝れる度がちょっとだけ上がります。

で、ちょっと時間をとってみたところ、意外と簡単そう。

http://ispras.linuxbase.org/index.php/ABI_compliance_checker にある、ABI
checkerと
abi-checker · kosaki/ruby@e27c2e5 · GitHub
のパッチをダウンロードして

./ruby …/tool/abi-checker.rb ~/local/ruby-193p0 ~/local/ruby-193

とすると、スクリーンショットのような結果が得られます。
193p0とくらべて最新の193ブランチは

rb_class_init_copy ( VALUE p1, VALUE p2 )
rb_path_end ( char const* p1 )
rb_path_last_separator ( char const* p1 )
rb_path_next ( char const* p1 )
rb_path_skip_prefix ( char const* p1 )
ruby_find_basename ( char const* name, long* baselen, long* alllen )
ruby_find_extname ( char const* name, long* len )

の7つのシンボルが消えてしまっているわけですね。
基本的に現在パッチリリースをしているのって世の中に三人しかいないので、うささん、ながちかさん、うらべさんの意見を聞きたい
ところですが、どうでしょうか。

2013/7/8 Tanaka A. [email protected]:

Problems with High 0
Symbols Medium 0
Low 0
Problems with Low 1
Constants
Other Changes - 3
in Constants

$B$H$$$&$N$r=L$a$F(B ABI:8H1L $B$"$?$j$G$9$+$M!#(B

Low$B$O$I$&$;$_$s$JL5;k$9$k$H;W$C$F$k$N$G(B 8
$B$@$1$G$$$$$H;W$$$^$9!#EvLL$O!#(BHigh$B$GJdB-$G$-$J$$!J$+$D2f!9$,JdB-$7$?$$!K6qBN;vNc$,=P$F$+$i%W%i%9&A9M$($l$P$$$$$H;W$$$^$9!#(B
abi-compliance-checker$B%3%^%s%I5/F0$9$k$H$-$K(B -abi
$B%*%W%7%g%s$D$1$l$P%=!<%9%3%s%Q%A%S%j%F%#$r%A%'%C%/$7$J$/$J$k$N$G!"(B

Removed Symbols High 8
Problems with High 0
Data Types Medium 0
Problems with High 0
Symbols Medium 0

$B$N8^9T$rC1=c$K(Bgrep$B$G=&$C$F$-$F?t;z2C;;$9$l$P$$$$$+$J$“$0$i$$$N%$%a!<%8$J$s$G$9$,!”$I$&$G$7$g$&!#(B

2013$BG/(B7$B7n(B9$BF|(B 10:25 KOSAKI Motohiro
[email protected]:

$B$N8^9T$rC1=c$K(Bgrep$B$G=&$C$F$-$F?t;z2C;;$9$l$P$$$$$+$J$“$0$i$$$N%$%a!<%8$J$s$G$9$,!”$I$&$G$7$g$&!#(B
$B$($'!"<B:]$=$s$J$+$s$8$G<BAu$9$k$3$H$K$J$j$^$9!#(B

$B$H$j$“$($:F0$+$7$F8+$?$H$3$m!”(B
rubyci $B$G$b@V$/$J$C$?$h$&$G$9!#(B

$B$$9$9$a$N$H$$j(B Low $B$OL5;k$7$F$$$^$9!#(B
Medium $B$OL5;k$7$F$^$;$s!#(B

$B$J$*!“(Btrunk $B$K$D$$$F$O(B ABI incompatible
$B$J$N$O$=$&$$$&$b$N$J$N$G!”(B
recent.html $B$K$O=P$5$J$$(B (rubyci $B$K$OI=<($5$l$J$$(B)
$B$h$&$K$7$F$$$^$9!#(B