アカウント名:
パスワード:
C++大好きな人が「そんなCみたいなコーディングして!」とぶーたれている図ならあちこちで見られますやね。けどC大好きな人の「そのC++的発想やめてほしい」みたいに言う図って想像できないんだ。
Cラブな人の誇りって、どのへんに宿るんだろう。
C++のシンボルのname manglingは実装依存でコンパイラのベンダーによってバラバラ。Windowsだとvtable絡みでMicrosoftが特許とってるらしくてC++ ABIをMSVC++互換にはできないっぽい。LinuxのC++ ABIはGNU libstdc++のそれに標準化してたと思うけど、そもそもlibstdc++自体がABI安定してないからなあ。ていうかscim-bridgeが作られたきっかけはABI問題だし、iBusがCで書かれている理由もそれを嫌ってるからだし。
まあOSのコアAPIはCで書くのが無難だよなあ。
LinuxのC++ ABIはGNU libstdc++のそれに標準化してたと思うけど、そもそもlibstdc++自体がABI安定してないからなあ。
ABIが何かを理解していますか?GCCのC++ ABIは何度か変更がありましたが、そのことですよね。
つーか、その2つはセットで考えるべきでしょ。
ABIと言うからにはしっかり区別すべき。ライブラリが規程するのはAPIであってABIではありません。
なんだ、ただの知ったか君か。C/C++のライブラリなんざ注意を払わずに変更を加えた日にゃ簡単にABIが壊れるよ。コンパイラだけの問題じゃない。
C/C++のライブラリなんざ注意を払わずに変更を加えた日にゃ簡単にABIが壊れるよ
では具体例にどうABIを壊すのかを例示してください。そのような変更は、普通APIの互換性を崩す変更と呼ぶと思いますが。
構造体のサイズやレイアウトを変えるとか。
それはAPIの変更であってABIとは関係ないです。あるAPIに含まれる構造体のレイアウトを変更したら、通常はAPIのバージョンを上げて非互換を明示しますが、そんな基本的なことも知らないのですか?
ABIとは、例えばIA-64 C++ ABI [codesourcery.com]で定義されているようなもっと基本的な部分での話です。
>それはAPIの変更であってABIとは関係ないです。
ABIの変更だと言ってるようですが [mit.edu]。
何でか知らんけど、おまいがABIを極めて限定的な範囲で捉えていることと、ソース互換とバイナリ互換の区別がつかないことだけはよくわかった。
ABI incompatible (assuming the struct's size/layout is part of the ABI)
とわざわざ断っているのは、そう思わない人がいるからでしょ?まあABIを随分と広く解釈してバイナリ互換=ABI互換と言う人がいるのは分かりましたが、この場合のABIってコンパイラが作ったバイナリそのものを言うわけですよね?
私は、ABIと言うからにはAPIと同等に明示的に定義されたものである必要があると考えています。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
物事のやり方は一つではない -- Perlな人
逆なら見るけども (スコア:0)
C++大好きな人が
「そんなCみたいなコーディングして!」
とぶーたれている図ならあちこちで見られますやね。
けどC大好きな人の
「そのC++的発想やめてほしい」
みたいに言う図って想像できないんだ。
Cラブな人の誇りって、どのへんに宿るんだろう。
Re:逆なら見るけども (スコア:0)
C++のシンボルのname manglingは実装依存でコンパイラのベンダーによってバラバラ。Windowsだとvtable絡みでMicrosoftが特許とってるらしくてC++ ABIをMSVC++互換にはできないっぽい。LinuxのC++ ABIはGNU libstdc++のそれに標準化してたと思うけど、そもそもlibstdc++自体がABI安定してないからなあ。ていうかscim-bridgeが作られたきっかけはABI問題だし、iBusがCで書かれている理由もそれを嫌ってるからだし。
まあOSのコアAPIはCで書くのが無難だよなあ。
Re:逆なら見るけども (スコア:1)
ABIが何かを理解していますか?GCCのC++ ABIは何度か変更がありましたが、そのことですよね。
Re: (スコア:0)
つーか、その2つはセットで考えるべきでしょ。
Re:逆なら見るけども (スコア:1)
ABIと言うからにはしっかり区別すべき。ライブラリが規程するのはAPIであってABIではありません。
Re: (スコア:0)
なんだ、ただの知ったか君か。
C/C++のライブラリなんざ注意を払わずに変更を加えた日にゃ簡単にABIが壊れるよ。
コンパイラだけの問題じゃない。
Re:逆なら見るけども (スコア:1)
では具体例にどうABIを壊すのかを例示してください。
そのような変更は、普通APIの互換性を崩す変更と呼ぶと思いますが。
Re: (スコア:0)
Re: (スコア:0)
構造体のサイズやレイアウトを変えるとか。
Re:逆なら見るけども (スコア:1)
それはAPIの変更であってABIとは関係ないです。あるAPIに含まれる構造体のレイアウトを変更したら、通常はAPIのバージョンを上げて非互換を明示しますが、そんな基本的なことも知らないのですか?
ABIとは、例えばIA-64 C++ ABI [codesourcery.com]で定義されているようなもっと基本的な部分での話です。
Re: (スコア:0)
>それはAPIの変更であってABIとは関係ないです。
ABIの変更だと言ってるようですが [mit.edu]。
Re: (スコア:0)
何でか知らんけど、おまいがABIを極めて限定的な範囲で捉えていることと、ソース互換とバイナリ互換の区別がつかないことだけはよくわかった。
Re:逆なら見るけども (スコア:1)
とわざわざ断っているのは、そう思わない人がいるからでしょ?
まあABIを随分と広く解釈してバイナリ互換=ABI互換と言う人がいるのは分かりましたが、この場合のABIってコンパイラが作ったバイナリそのものを言うわけですよね?
私は、ABIと言うからにはAPIと同等に明示的に定義されたものである必要があると考えています。