パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

CとC++は似たようなモノか?」記事へのコメント

  • by muraken (2830) on 2009年05月16日 23時21分 (#1566769)

    C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。また、C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではないので、C# が比較対象として出てくることが信じられないですね。C# が C++ と同類の言語だと思ってる人って多いんでしょうか?

    C++ は C++0x から言語の方向性をジェネリックプログラミングの方へ大きく拡張させるので、このトピックで挙がっているどの言語とも似ていない言語にどんどん近付いていくと思います。

    また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。

    --
    Kenta MURATA
    • by ei (19798) on 2009年05月17日 0時10分 (#1566793) 日記
      | C89 ⊂ C++ だけど…

      古いC++は存じませんが、C89 ⊄ C++98 です。(例えば関数外 const int i = 0; のスコープ。)
      親コメント
    • by Tsann (15931) on 2009年05月17日 7時14分 (#1566913)

      C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。

      そういう区別が付く人はいいんです。それらの違いがわからず「自分はCが書けるからC++もわかっている(拡張子.cppのファイルに有効に機能するコードが書ける)」と思い込んでる人がC/C++なる選択肢を選ぶから酷いことになるんですよ。

      C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではない

      既にコメントが付いていますが、似てる似ていないは主観によるところが大きいですが、各種構文、言語として用意されている演算子と優先順位、関数の呼び出し方法などなど似てる点は多いと思いますよ。「異なる点があるから似ていない」というのは間違っています。異なる点があるからこそ「同一」ではなく「似てる」と言っているのですから。
      それからオブジェクト指向的でない書き方できるからと言って「C++ はオブジェクト指向言語ではない」と結論づけるのもどうなんでしょう。libjpeg [wikipedia.org]のソースを読むと認識が変わりますよ。これはC言語で書かれていますが、れっきとしたオブジェクト指向だと思っています。

      親コメント
      • by muraken (2830) on 2009年05月18日 8時34分 (#1567495)

        複数の言語を比較する場合、各言語が第一級で何を表現する能力を持っているかを考えたほうがいいです。
        たとえば、C言語は、手続きとしての関数、構造体、整数、浮動小数点数、ポインタなど。C++ は手続きとしての関数、構造体、数値、ポインタ、クラス、クラステンプレートと関数テンプレート、のような感じです。C# は無名関数を第一級で書けたりしますよね (C++ も C++0x から書けるようになるんでしたよね)。このような第一級で扱える概念の比較が、言語の比較だと私は思うのです。

        各言語は第一級で表現できない概念を複数持っていますが、第一級で表現可能なものを組み合わせることで、ほとんどの場合について説明的に実装する事が可能になります。その例の代表として、Tsann さんが挙げられている libjpeg であるとか GObject や libobjc のような C 言語で実装されたオブジェクト指向システムがありますよね。これらはオブジェクト指向を実装しているのであって、C言語がオブジェクト指向を第一級の概念として記述できているわけではありません。こういうものまで入れてしまうと、極論として各プロセッサの機械語だってオブジェクト指向を記述できていわけですから、同じになってしまうでしょう。これは言語の比較ではありませんよね。

        --
        Kenta MURATA
        親コメント
        • 「第一級で扱える概念の比較」だけが「似ている似ていない」の結論を出すのでしょうか? 事前に比較範囲を明示していればわかりますが、これでは後出しじゃんけんで、言語ごとに違う機能があると言っているだけにしか聞こえません。そしてそんなことは百も承知です。しかも並べられても似ていない理由にはなってないし。

          「C++ はオブジェクト指向言語ではない」と結論づけている点についても説明が欲しいです。第一級の定義がよくわかりませんが、C++におけるclassは第一級に含まれないのでしょうか?

          親コメント
          • by Anonymous Coward
            > これでは後出しじゃんけんで、

            喧嘩しているわけではないので後出しじゃんけんでも問題はないと思いますが、自分の意見が否定されてプライドが傷つきましたか?

            > 「C++ はオブジェクト指向言語ではない」と結論づけている点についても説明が欲しいです。

            どこからそんな結論を引き出してきたのやら。
            あなたは後出しじゃんけんを気にするよりも、読解力のなさを恥じたほうがいいようですよ。

            muraken> 各言語は第一級で表現できない概念を複数持っていますが、第一級で表現可能なものを組み合わせることで、ほとんどの場合について説明的に実装する事が可能
          • by Anonymous Coward
            べた書きできるからでしょ。
            オブジェクト指向の言語は必ずオブジェクトに属さなければなりません。

            C++の場合、クラスや構造体によってオブジェクト指向のコードを
            表現できるだけですね。

            ※ だからめんどうごとは少ないと思うのだけど。。。

            オブジェクト指向は、カプセル化と隠蔽と多態 ができればいいのでしたっけ?
      • by Anonymous Coward

        >異なる点があるからこそ「同一」ではなく「似てる」と言っている

        今回の一連の議論のすべて、いやそれどころかこれに類する「xxとyyは似たようなものか」という議論すべて、が、
        この一言でFAしてる。

        もうちょっとまじめに説明するならば、この一言は「"異なる"と"似ていない"とは異なる」と言っているわけです。
        このメタっぽい峻別がカナメになります。

        素晴らしい洞察すぎる。500点くらいあげなければならない。
        というか、ギークが満開全開であるはずのスラドにおいては、これくらい鋭い意見でなきゃ軽率にすば洞を発行すべきではないのかも知れない。

    • > C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではない

      それはさすがに言いすぎでは... Smalltalk みたいな古い言語から見てもどっちもどっちだと思いますが。

      親コメント
    • また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。

      何を以って「似てる」と云うかに依りますが, あの角括弧だらけのソースを見て C++ と似ていると云うのは, 人によっては難しいのではないでしょうか?

      親コメント
      • by Anonymous Coward on 2009年05月17日 2時14分 (#1566860)

        Objective-Cはどっちかつーとsmalltalkに似てませんか?

        親コメント
      • murakenさんがおっしゃっているのはObjective-CではなくObjective-C++です。
        これは文字通り、Objective-CとC++の両方の記述方法を使えるという変態言語なのです(^^;)
        C++ライブラリをOSXのCocoaアプリに流用するには便利ですが、双方のクラスに互換性が全くないので注意が必要です。

        親コメント
        • > これは文字通り、Objective-CとC++の両方の記述方法を使えるという変態言語なのです(^^;)
          それほど変態でもないですよ。使ってみると案外便利。"Objective-"の部分が明確にCやC++からみて違和感のある書き方なので完全に区別できるので、一つのソースで2つの言語が使える感じで便利ですよ。制限としては例えばidという名前のテンプレートが使えない(Objective-Cの id<Protocol>の書式とぶつかる)などの数点ありますが、気にするほどではありません。
          --
          Best regards, でぃーすけ
          親コメント
          • あ、はい。実際お仕事で使ってますから、利点は承知してますー。
            ただ、C++とObjective-Cの双方をそれなりに習熟しておく必要がありますから、新規に覚える言語ではないですよね。
            C++かObjective-Cのどちらか(または両方)を知らない誰かがObjective-C++を学習しようとしていたら、阻止すべきでしょう(^^;)
            そういう意味で、かなり変態なのではないかと。

            親コメント
    • by Anonymous Coward
      どのバージョンの組合せで持ってきても C++ の仕様が C の仕様を丸ごと包括してたことはありませんよ。
      K&R形式の関数宣言や、new 、delete などの変数や関数は C89では許されるけど C++じゃコンパイルできません。

      少なくとも C#とJava の関係以上には C++ と C# は似てると思いますし、C++ はオブジェクト指向言語と言ってよいと思いますよ。
      世の中にはクラスや継承がなきゃオブジェクト指向じゃないと思いこんでる人もいるぐらいなので、腐るほどあるオブジェクト指向の宗派によっては、異端なところもあるし認めたくない部分も多いでしょうけど。
      • by Anonymous Coward

        >少なくとも C#とJava の関係以上には C++ と C# は似てる

        普通は逆だと思うが。それこそどこの宗派ですか。

アレゲは一日にしてならず -- アレゲ研究家

処理中...