[Ruby 1.9 - Feature #5315][Open] config.hからコンパイラのバージョンチェックを外して欲しい

Issue #5315 has been reported by Taro MURAOKA.


Feature #5315: config.hからコンパイラのバージョンチェックを外して欲しい

Author: Taro MURAOKA
Status: Open
Priority: Normal
Assignee:
Category:
Target version: 1.9.2

http://www.garbagecollect.jp/ruby/mswin32/ja/
で配布しているrubyで確認したので外しているかもしれません。その場合はあしからず。

問題:
rubyの外部モジュールをコンパイルする際に、ruby本体と異なるバージョンのコンパイラではコンパイルできない

詳細:
上記で配布されているRubyはMSVC9でコンパイルされています。
一方VimなどネイティブでRubyとリンクする外部モジュールをMSVC10でコンパイルしようとした場合
Ruby配布物に含まれている include/ruby-1.9.1/x64-mswin64_80/ruby/config.h に
コンパイラのバージョンチェックがあるため、そのままでは利用できません。

#if _MSC_VER != 1400
#error MSC version unmatch: _MSC_VER: 1400 is expected.
#endif

提案内容:
なにか理由があってこうなっているのかもしれませんが、
手元で無効化して回避しても特に問題もなく使えているようです。
なのでこのチェック自体を破棄するか、もともとの理由に即したものに修正することを提案します。

Issue #5315 has been updated by Ayumu AIZAWA.

Status changed from Open to Third Party’s Issue

そちらで配布されているものはRubyの公式な配布物ではありません。
当該サイトの『はじめに』のページに記載されている連絡先までお問い合わせください。

Feature #5315: config.hからコンパイラのバージョンチェックを外して欲しい

Author: Taro MURAOKA
Status: Third Party’s Issue
Priority: Normal
Assignee:
Category:
Target version: 1.9.2

http://www.garbagecollect.jp/ruby/mswin32/ja/
で配布しているrubyで確認したので外しているかもしれません。その場合はあしからず。

問題:
rubyの外部モジュールをコンパイルする際に、ruby本体と異なるバージョンのコンパイラではコンパイルできない

詳細:
上記で配布されているRubyはMSVC9でコンパイルされています。
一方VimなどネイティブでRubyとリンクする外部モジュールをMSVC10でコンパイルしようとした場合
Ruby配布物に含まれている include/ruby-1.9.1/x64-mswin64_80/ruby/config.h に
コンパイラのバージョンチェックがあるため、そのままでは利用できません。

#if _MSC_VER != 1400
#error MSC version unmatch: _MSC_VER: 1400 is expected.
#endif

提案内容:
なにか理由があってこうなっているのかもしれませんが、
手元で無効化して回避しても特に問題もなく使えているようです。
なのでこのチェック自体を破棄するか、もともとの理由に即したものに修正することを提案します。

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

In message “[ruby-dev:44500] [Ruby 1.9 - Feature #5315][Open]
config.h$B$+$i%3%s%Q%$%i$N%P!<%8%g%s%A%'%C%/$r30$7$FM_$7$$(B”
on Sep.13,2011 19:35:15, [email protected] wrote:

$B$J$K$+M}M3$,$“$C$F$3$&$J$C$F$$$k$N$+$b$7$l$^$;$s$,!”(B

$B$=$j$c$=$&$G$9!#(B

$B<j85$GL58z2=$7$F2sHr$7$F$bFC$KLdBj$b$J$/;H$($F$$$k$h$&$G$9!#(B

$B6vA3$G$9!#(B

$B$A$J$_$K!“(Bmalloc’ed$B$J%a%b%j%V%m%C%/!”%U%!%$%k%G%#%9%/%j%W%?!"(B
$B$=$NB>(BC$B%i%s%?%$%$,4IM}$9$k%j%=!<%9$r$d$j<h$j$7$?>l9g!"LdBj$,(B $B5/$-$^$9!#(B $B$3$l$O(BC$B%i%s%?%$%%P!<%8%g%s4V$NHs8_49$K5/0x$9$kLdBj$J$N$G(Bruby
$B$K$O$I!<$K$b$G$-$^$;$s!#(B

$B$J$N$G$3$N%A%'%C%/<+BN$rGK4~$9$k$+!"$b$H$b$H$NM}M3$KB($7$?$b$N$K=$@5$9$k$3$H$rDs0F$7$^$9!#(B

$B$=$&$G$9$M!“$3$3$O%3%s%Q%$%i$N%P!<%8%g%s$8$c$J$/$F:#%?!<%2%C(B
$B%H$H$7$F$$$k(BC$B%i%s%?%$%`$N%P!<%8%g%s$N%A%‘%C%/$r9T$o$J$$$H$$$1(B
$B$J$$$h$&$J5$$O$7$^$9!#(B
$B$=$l$G$=$A$i$,F’$s$G$kLdBj$K0c$$$,@8$8$k5$$,$7$J$$$N$,$$$5$5(B
$B$+;DG0$G$O$”$j$^$9$,!#(B

$B$G!“9a$j20$5$s$H$3$N(BVim$B$H(Bruby$B$O<B$N$H$3$mHs>o$KAB$J7k9g>u67$@(B
$B$H;W$&$N$G!”(Bruby$B$N%X%C%@(B/$B%$%s%]!<%H%i%$%V%i%j$r;H$C$F%j%s%/$9(B
$B$k$s$8$c$J$/$F!“<B9T;~%m!<%I$K$9$l$PA4$F$NLdBj$,2r7h$9$k$h$&(B
$B$K;W$C$F$k$s$G$9$,!”$$$+$,$J$b$s$G$7$g$&$+(B?

$B$C$F!"?tG/A0$NCN<1$G8@$C$F$k$N$G:#$O$b$&$=$&$J$C$F$?$j$7$F(B

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

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

In message “[ruby-dev:44508] [Ruby 1.9 - Feature #5315]
config.h$B$+$i%3%s%Q%$%i$N%P!<%8%g%s%A%'%C%/$r30$7$FM_$7$$(B”
on Sep.13,2011 22:08:17, [email protected] wrote:

$B%@%$%J%_%C%/%m!<%G%#%s%0$K$D$$$F$O:G=i$+$i(B(Vim$B$K(BRuby$B$,AH$_9~$^$l$?;~$+$i(B)$B$J$C$F$$$^$9!#(B

$B$“$l!”$G$O;d$,2?$+$H:.F1$7$F$^$9$M!#$3$l$O<:Ni$7$^$7$?!#(B

$B$“$H(BMSVCRT$B$NOC$O3N$+$K$=$N$H$*$j$G!”$=$l$i$r$d$j<h$j$9$k$H%-%D%$$G$9$M!#(B

$B5U$K8@$&$H$=$l$i$r$d$j$H$j$9$k$h$&$J(BI/F$B@_7W$K$9$Y$-$G$O$J$$$H$b8@$($^$9!#(B

$BIaDL!“(Bruby$B$N%X%C%@$C$F!”(Bruby$B$rAH$_9~$$N$K;H$o$l$k$h$j!"(Bruby $B$,30It$N%i%$%V%i%j$r<h$j9~$$?$a$N3HD%%i%$%V%i%j$NJ}$K;H$o$l(B
$B$F$*$j$^$7$F!"$=$s$J(BI/F$B@_7W$O$7$?$/$O$J$$$s$G$9$,!“30It$N%i%$(B
$B%V%i%j$5$s$O$^$”$=$N(B…

$B$$$:$l$K$;$h%3%s%Q%$%i$N%P!<%8%g%s$G5q@d$9$k$N$O6Z$,0c$$$^$9!#(B
$B$=$l$,2r>C$7$?$“$H$K5/$3$k%i%s%?%$%`%P!<%8%g%s0c$$$J$I$NLdBj$K$D$$$F$O!”(B
$BAH$_9~$s$@B&$N@UG$$GNI$$$s$8$c$J$$$G$9$+(B?

ruby$B$,5q@d$7$F$k$N$r2sHr$9$k$N$O!"26$OBg>fIW$@$H3N?.$r;}$C$F(B
$B$k?M$,<+J,$N@UG$$G$d$l$P$$$$$s$8$c$J$$$G$9$+(B?

ruby$B$O8=>u0BA4B&$KE]$9$H$$$&A*Br$r$7$F$$$F!“4m81$J$3$H$r$7$?(B
$B$$?M$3$=<+NO$G4hD%$j$J$5$$!”$=$&$$$&$3$H$7$?$$?M$J$i4v$i$G$b(B
$B2sHr$G$-$k$d$m$=$l$/$i$$!"$C$F$$$&$3$H$K$J$C$F$k$o$1$G$9!#(B

$B$3$l$,@dBP$NJ}?K$G1J5W$K0];}$9$k!“$H$+$$$&$o$1$8$c$J$$$G$9$,!”(B
Windows$BHG$K4X78$J$/(Bruby$B<+BN$,$b$C$H%+%8%e%"%k$KAH$_9~$a$kJ}8~(B
$B$K?J2=$9$k$H$+$7$J$$8B$j!“J}?K$rJQ$($k5$$O$”$^$j$7$J$$$G$9!#(B

$B$G$b!“JL$NJ}8~$G@bF@$7$F$/$l$?$i;d$N5$J,$OJQ$o$k$+$b$7$l$^$;(B
$B$s!#(B
$BNc$($P!”%,!<%I$O$9$k$1$I$b$C$H6Z$N$$$$$3$&$$$&J}K!$,$$$$$s$8(B
$B$c$M!"$H$+!#(B

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

Issue #5315 has been updated by Taro MURAOKA.

ダイナミックローディングについては最初から(VimにRubyが組み込まれた時から)なっています。
それでも最低限のヘッダーは必要なのでこの問題は起こります。

あとMSVCRTの話は確かにそのとおりで、それらをやり取りするとキツイですね。
逆に言うとそれらをやりとりするようなI/F設計にすべきではないとも言えます。
ただご指摘の通りVimのケースでは少ないか無いでしょう。

いずれにせよコンパイラのバージョンで拒絶するのは筋が違います。
それが解消したあとに起こるランタイムバージョン違いなどの問題については、
組み込んだ側の責任で良いんじゃないですか?

Feature #5315: config.hからコンパイラのバージョンチェックを外して欲しい

Author: Taro MURAOKA
Status: Third Party’s Issue
Priority: Normal
Assignee:
Category:
Target version: 1.9.2

http://www.garbagecollect.jp/ruby/mswin32/ja/
で配布しているrubyで確認したので外しているかもしれません。その場合はあしからず。

問題:
rubyの外部モジュールをコンパイルする際に、ruby本体と異なるバージョンのコンパイラではコンパイルできない

詳細:
上記で配布されているRubyはMSVC9でコンパイルされています。
一方VimなどネイティブでRubyとリンクする外部モジュールをMSVC10でコンパイルしようとした場合
Ruby配布物に含まれている include/ruby-1.9.1/x64-mswin64_80/ruby/config.h に
コンパイラのバージョンチェックがあるため、そのままでは利用できません。

#if _MSC_VER != 1400
#error MSC version unmatch: _MSC_VER: 1400 is expected.
#endif

提案内容:
なにか理由があってこうなっているのかもしれませんが、
手元で無効化して回避しても特に問題もなく使えているようです。
なのでこのチェック自体を破棄するか、もともとの理由に即したものに修正することを提案します。

Issue #5315 has been updated by Taro MURAOKA.

残念ながら筋の良いガードの仕方はないです。このあたりはWindowsのDLLの問題ですね。
それでもあえて言えばRubyがランタイムライブラリの生成するオブジェクトを、
I/Fを通じて外と直接やりとりする設計になってるのも筋は良くないね、とは指摘しておきます。

もちろんそんなことでI/Fを変えるのがコストに見合わないことは理解した上での「あえて」です。

Feature #5315: config.hからコンパイラのバージョンチェックを外して欲しい

Author: Taro MURAOKA
Status: Third Party’s Issue
Priority: Normal
Assignee:
Category:
Target version: 1.9.2

http://www.garbagecollect.jp/ruby/mswin32/ja/
で配布しているrubyで確認したので外しているかもしれません。その場合はあしからず。

問題:
rubyの外部モジュールをコンパイルする際に、ruby本体と異なるバージョンのコンパイラではコンパイルできない

詳細:
上記で配布されているRubyはMSVC9でコンパイルされています。
一方VimなどネイティブでRubyとリンクする外部モジュールをMSVC10でコンパイルしようとした場合
Ruby配布物に含まれている include/ruby-1.9.1/x64-mswin64_80/ruby/config.h に
コンパイラのバージョンチェックがあるため、そのままでは利用できません。

#if _MSC_VER != 1400
#error MSC version unmatch: _MSC_VER: 1400 is expected.
#endif

提案内容:
なにか理由があってこうなっているのかもしれませんが、
手元で無効化して回避しても特に問題もなく使えているようです。
なのでこのチェック自体を破棄するか、もともとの理由に即したものに修正することを提案します。