アカウント名:
パスワード:
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 incompatible (assuming the struct's size/layout is part of the ABI)
とわざわざ断っているのは、そう思わない人がいるからでしょ?まあABIを随分と広く解釈してバイナリ互換=ABI互換と言う人がいるのは分かりましたが、この場合のABIってコンパイラが作ったバイナリそのものを言うわけですよね?
私は、ABIと言うからにはAPIと同等に明示的に定義されたものである必要があると考えています。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
普通のやつらの下を行け -- バッドノウハウ専門家
逆なら見るけども (スコア: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: (スコア:1)
それはAPIの変更であってABIとは関係ないです。あるAPIに含まれる構造体のレイアウトを変更したら、通常はAPIのバージョンを上げて非互換を明示しますが、そんな基本的なことも知らないのですか?
ABIとは、例えばIA-64 C++ ABI [codesourcery.com]で定義されているようなもっと基本的な部分での話です。
Re: (スコア:0)
>それはAPIの変更であってABIとは関係ないです。
ABIの変更だと言ってるようですが [mit.edu]。
Re:逆なら見るけども (スコア:1)
とわざわざ断っているのは、そう思わない人がいるからでしょ?
まあABIを随分と広く解釈してバイナリ互換=ABI互換と言う人がいるのは分かりましたが、この場合のABIってコンパイラが作ったバイナリそのものを言うわけですよね?
私は、ABIと言うからにはAPIと同等に明示的に定義されたものである必要があると考えています。