アカウント名:
パスワード:
と言ってるだけだな。Cの何が悪いかちゃんと理解できればC++できちんとしたコード書けるだろ。Windowsにはmanaged objectだとかもあるだろ。取り替えられるならとっくにやってる&あんたが知らないだけだと思われ。
今のC++は複雑すぎるだろう。新しい言語の成果をどんどん取り入れるのはいいが、頑なに互換性を守るために歪な文法を強いられる。Cの良いところは、言語使用が小さく一行一行がどういう機械語に置き換わるか予想できるところ。モダンC++は a = b;とだけ書かれていても凡人には想像も及ばないことが行われていたりする。
あと、C++のコミュニティが最悪だね。間違った理解やちょっと古臭いコードを書くと「そんなことも知らないんですか。勉強して出直してきてください」だもんな。
凡人だけどa = b;と書かれていれば代入演算子が呼ばれてるんだろうなってことがわかるけどそれが想像できないってモダンな他の言語やスクリプトを書けないレベルだろ
> 凡人だけどa = b;と書かれていれば代入演算子が呼ばれてるんだろうなってことがわかるけど
私にはこの =演算子がどこでどのように定義されているか簡単にはわかりませんね。
a.f();でfがどこでどのように定義されているか簡単にはわからないなんて言う人はいないでしょ?aの型の定義を見ればいいと思います
演算子がオーバーライドされていることを知っていれば、調べようという気が起きるでしょうけど、起きなかったらそれまでですね。
調べるのも開発環境のサポートがあるから簡単なだけで、無ければ結構手間ですね。
C以上にフリーダムであり、演算子が想像通りの動きをしてくれるとは限らず、人によってはむしろバグの温床になったりしませんかね。
話のすり替え乙
いや、「演算子オーバーロードを乱用すべきではない」というのはあるのでは?(特に代入演算子のオーバーロード)固有の実装が行われていることが判別しづらいので。
C++は色々な出自のライブラリを組み合わせるとそこら辺で各ライブラリで方針が異なっていて非情に厄介ですね。他の言語なら「ベンダ毎の方針が異なるの当たり前だろ?」となるのだが、C++だと最悪組合せを諦める事になる。
aの型がわからないことも多いわけで。
> a.f();でfがどこでどのように定義されているか簡単にはわからないなんて言う人はいないでしょ?
動的ディスパッチをまさにそういう理由で嫌う人は大勢いますねlinusとかerlangのjoe armstrongとかclojureのhickyとかjanes streetなど金融系とかそれを知らないということは、つまりあなたが大したプログラマではないということです
例えばaの型がクラスAだとして、そこにはf()の定義が無いかもしれません。そうなるとクラス階層をたどる必要があります。クラスAの上位のどこかのクラスにf()の定義があっても、純粋仮想関数かもしれません。そうするとAの複数ある派生クラスのうち実行時にaがどの型なのかを知る必要があります。
デバッグで動かしてトレース出来る状況なら分かりやすいでしょうが、ソースコードから追うのは簡単じゃないと思いますよ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie
女房と言語は新しい方がいい (スコア:1)
と言ってるだけだな。
Cの何が悪いかちゃんと理解できればC++できちんとしたコード書けるだろ。
Windowsにはmanaged objectだとかもあるだろ。
取り替えられるならとっくにやってる&あんたが知らないだけだと思われ。
Re: (スコア:1)
今のC++は複雑すぎるだろう。
新しい言語の成果をどんどん取り入れるのはいいが、頑なに互換性を守るために歪な文法を強いられる。
Cの良いところは、言語使用が小さく一行一行がどういう機械語に置き換わるか予想できるところ。
モダンC++は a = b;とだけ書かれていても凡人には想像も及ばないことが行われていたりする。
あと、C++のコミュニティが最悪だね。
間違った理解やちょっと古臭いコードを書くと「そんなことも知らないんですか。勉強して出直してきてください」だもんな。
Re: (スコア:0)
凡人だけどa = b;と書かれていれば代入演算子が呼ばれてるんだろうなってことがわかるけど
それが想像できないってモダンな他の言語やスクリプトを書けないレベルだろ
Re:女房と言語は新しい方がいい (スコア:0)
> 凡人だけどa = b;と書かれていれば代入演算子が呼ばれてるんだろうなってことがわかるけど
私にはこの =演算子がどこでどのように定義されているか簡単にはわかりませんね。
Re: (スコア:0)
a.f();でfがどこでどのように定義されているか簡単にはわからないなんて言う人はいないでしょ?
aの型の定義を見ればいいと思います
Re:女房と言語は新しい方がいい (スコア:1)
演算子がオーバーライドされていることを知っていれば、
調べようという気が起きるでしょうけど、起きなかったらそれまでですね。
調べるのも開発環境のサポートがあるから簡単なだけで、無ければ結構手間ですね。
C以上にフリーダムであり、演算子が想像通りの動きをしてくれるとは限らず、
人によってはむしろバグの温床になったりしませんかね。
Re: (スコア:0)
話のすり替え乙
Re: (スコア:0)
いや、「演算子オーバーロードを乱用すべきではない」というのはあるのでは?
(特に代入演算子のオーバーロード)
固有の実装が行われていることが判別しづらいので。
Re:女房と言語は新しい方がいい (スコア:1)
C++は色々な出自のライブラリを組み合わせるとそこら辺で各ライブラリで方針が異なっていて非情に厄介ですね。
他の言語なら「ベンダ毎の方針が異なるの当たり前だろ?」となるのだが、C++だと最悪組合せを諦める事になる。
Re: (スコア:0)
aの型がわからないことも多いわけで。
Re: (スコア:0)
> a.f();でfがどこでどのように定義されているか簡単にはわからないなんて言う人はいないでしょ?
動的ディスパッチをまさにそういう理由で嫌う人は大勢いますね
linusとかerlangのjoe armstrongとかclojureのhickyとかjanes streetなど金融系とか
それを知らないということは、つまりあなたが大したプログラマではないということです
Re: (スコア:0)
例えばaの型がクラスAだとして、そこにはf()の定義が無いかもしれません。
そうなるとクラス階層をたどる必要があります。
クラスAの上位のどこかのクラスにf()の定義があっても、純粋仮想関数かもしれません。
そうするとAの複数ある派生クラスのうち実行時にaがどの型なのかを知る必要があります。
デバッグで動かしてトレース出来る状況なら分かりやすいでしょうが、ソースコードから追うのは簡単じゃないと思いますよ。