C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。また、C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではないので、C# が比較対象として出てくることが信じられないですね。C# が C++ と同類の言語だと思ってる人って多いんでしょうか?
C++ は C++0x から言語の方向性をジェネリックプログラミングの方へ大きく拡張させるので、このトピックで挙がっているどの言語とも似ていない言語にどんどん近付いていくと思います。
似てるとしたら Objective-C++ かな (スコア:2, 参考になる)
C89 ⊂ C++ だけど C99 ⊄ C++ だから、C 言語と言っても色々あることを考えないといけません。また、C# は C と似てないだけでなく、C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではないので、C# が比較対象として出てくることが信じられないですね。C# が C++ と同類の言語だと思ってる人って多いんでしょうか?
C++ は C++0x から言語の方向性をジェネリックプログラミングの方へ大きく拡張させるので、このトピックで挙がっているどの言語とも似ていない言語にどんどん近付いていくと思います。
また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。
Kenta MURATA
Re:似てるとしたら Objective-C++ かな (スコア:3, 参考になる)
古いC++は存じませんが、C89 ⊄ C++98 です。(例えば関数外 const int i = 0; のスコープ。)
Re:似てるとしたら Objective-C++ かな (スコア:1)
Kenta MURATA
Re:似てるとしたら Objective-C++ かな (スコア:2, すばらしい洞察)
そういう区別が付く人はいいんです。それらの違いがわからず「自分はCが書けるからC++もわかっている(拡張子.cppのファイルに有効に機能するコードが書ける)」と思い込んでる人がC/C++なる選択肢を選ぶから酷いことになるんですよ。
既にコメントが付いていますが、似てる似ていないは主観によるところが大きいですが、各種構文、言語として用意されている演算子と優先順位、関数の呼び出し方法などなど似てる点は多いと思いますよ。「異なる点があるから似ていない」というのは間違っています。異なる点があるからこそ「同一」ではなく「似てる」と言っているのですから。
それからオブジェクト指向的でない書き方もできるからと言って「C++ はオブジェクト指向言語ではない」と結論づけるのもどうなんでしょう。libjpeg [wikipedia.org]のソースを読むと認識が変わりますよ。これはC言語で書かれていますが、れっきとしたオブジェクト指向だと思っています。
Re:似てるとしたら Objective-C++ かな (スコア:2, 参考になる)
複数の言語を比較する場合、各言語が第一級で何を表現する能力を持っているかを考えたほうがいいです。
たとえば、C言語は、手続きとしての関数、構造体、整数、浮動小数点数、ポインタなど。C++ は手続きとしての関数、構造体、数値、ポインタ、クラス、クラステンプレートと関数テンプレート、のような感じです。C# は無名関数を第一級で書けたりしますよね (C++ も C++0x から書けるようになるんでしたよね)。このような第一級で扱える概念の比較が、言語の比較だと私は思うのです。
各言語は第一級で表現できない概念を複数持っていますが、第一級で表現可能なものを組み合わせることで、ほとんどの場合について説明的に実装する事が可能になります。その例の代表として、Tsann さんが挙げられている libjpeg であるとか GObject や libobjc のような C 言語で実装されたオブジェクト指向システムがありますよね。これらはオブジェクト指向を実装しているのであって、C言語がオブジェクト指向を第一級の概念として記述できているわけではありません。こういうものまで入れてしまうと、極論として各プロセッサの機械語だってオブジェクト指向を記述できていわけですから、同じになってしまうでしょう。これは言語の比較ではありませんよね。
Kenta MURATA
Re:似てるとしたら Objective-C++ かな (スコア:1)
「第一級で扱える概念の比較」だけが「似ている似ていない」の結論を出すのでしょうか? 事前に比較範囲を明示していればわかりますが、これでは後出しじゃんけんで、言語ごとに違う機能があると言っているだけにしか聞こえません。そしてそんなことは百も承知です。しかも並べられても似ていない理由にはなってないし。
「C++ はオブジェクト指向言語ではない」と結論づけている点についても説明が欲しいです。第一級の定義がよくわかりませんが、C++におけるclassは第一級に含まれないのでしょうか?
Re: (スコア:0)
喧嘩しているわけではないので後出しじゃんけんでも問題はないと思いますが、自分の意見が否定されてプライドが傷つきましたか?
> 「C++ はオブジェクト指向言語ではない」と結論づけている点についても説明が欲しいです。
どこからそんな結論を引き出してきたのやら。
あなたは後出しじゃんけんを気にするよりも、読解力のなさを恥じたほうがいいようですよ。
muraken> 各言語は第一級で表現できない概念を複数持っていますが、第一級で表現可能なものを組み合わせることで、ほとんどの場合について説明的に実装する事が可能
Re: (スコア:0)
オブジェクト指向の言語は必ずオブジェクトに属さなければなりません。
C++の場合、クラスや構造体によってオブジェクト指向のコードを
表現できるだけですね。
※ だからめんどうごとは少ないと思うのだけど。。。
オブジェクト指向は、カプセル化と隠蔽と多態 ができればいいのでしたっけ?
Re: (スコア:0)
>異なる点があるからこそ「同一」ではなく「似てる」と言っている
今回の一連の議論のすべて、いやそれどころかこれに類する「xxとyyは似たようなものか」という議論すべて、が、
この一言でFAしてる。
もうちょっとまじめに説明するならば、この一言は「"異なる"と"似ていない"とは異なる」と言っているわけです。
このメタっぽい峻別がカナメになります。
素晴らしい洞察すぎる。500点くらいあげなければならない。
というか、ギークが満開全開であるはずのスラドにおいては、これくらい鋭い意見でなきゃ軽率にすば洞を発行すべきではないのかも知れない。
Re:似てるとしたら Objective-C++ かな (スコア:1)
> C# はオブジェクト指向言語だけど C++ はオブジェクト指向言語ではない
それはさすがに言いすぎでは... Smalltalk みたいな古い言語から見てもどっちもどっちだと思いますが。
Re:似てるとしたら Objective-C++ かな (スコア:1, すばらしい洞察)
Re:似てるとしたら Objective-C++ かな (スコア:1, すばらしい洞察)
逆です。オブジェクトを表すのにクラス定義やテンプレートを使うようになってるだけですよ。
オブジェクトでないクラスやテンプレートが書けるからといってオブジェクト指向言語ではないと言うことはできません。
Re: (スコア:0)
オブジェクト指向の定義なんてもの自体が
無い/あやふやである/百家争鳴である/状況依存である/…
なので。
ある言語やある機能について「これはOOか」と問えば、
「なんとなく賛成」「3割くらいかなー」「気分次第で決める」
といった集計しにくいことこの上ない答えが帰ってくるのがオチです。
むしろ「xxx言語はOOである!絶対!」と言い切る意見のほうが、
単なる宗教だったりするんで、集計から除外したほうが賢明。
クラス、ですか?
そこまで言いたいなら、つきつめるとソースがテキスト(文字のストリーム)である時点で「OOかどうか」は微妙なんだがね…
あとはあれですね。
クラスやテンプレートがオブジェクトである「ほうが使いやすい言語だ」…とかなら有るかも。
#Javaで面倒な思いをしてるのでAC
Re: (スコア:0)
> ある言語やある機能について「これはOOか」と問えば、
> 「なんとなく賛成」「3割くらいかなー」「気分次第で決める」
> といった集計しにくいことこの上ない答えが帰ってくるのがオチです。
どこの妖精さん [wikipedia.org]ですか。
Re: (スコア:0)
Re:似てるとしたら Objective-C++ かな (スコア:1)
また、本文では挙がっていませんが、C++ を丸ごと含んでいるという意味で一番似ているのは Objective-C++ かな。
何を以って「似てる」と云うかに依りますが, あの角括弧だらけのソースを見て C++ と似ていると云うのは, 人によっては難しいのではないでしょうか?
Re:似てるとしたら Objective-C++ かな (スコア:1, 参考になる)
Objective-Cはどっちかつーとsmalltalkに似てませんか?
Re:似てるとしたら Objective-C++ かな (スコア:1)
murakenさんがおっしゃっているのはObjective-CではなくObjective-C++です。
これは文字通り、Objective-CとC++の両方の記述方法を使えるという変態言語なのです(^^;)
C++ライブラリをOSXのCocoaアプリに流用するには便利ですが、双方のクラスに互換性が全くないので注意が必要です。
Re:似てるとしたら Objective-C++ かな (スコア:1)
それほど変態でもないですよ。使ってみると案外便利。"Objective-"の部分が明確にCやC++からみて違和感のある書き方なので完全に区別できるので、一つのソースで2つの言語が使える感じで便利ですよ。制限としては例えばidという名前のテンプレートが使えない(Objective-Cの id<Protocol>の書式とぶつかる)などの数点ありますが、気にするほどではありません。
Best regards, でぃーすけ
Re:似てるとしたら Objective-C++ かな (スコア:1)
あ、はい。実際お仕事で使ってますから、利点は承知してますー。
ただ、C++とObjective-Cの双方をそれなりに習熟しておく必要がありますから、新規に覚える言語ではないですよね。
C++かObjective-Cのどちらか(または両方)を知らない誰かがObjective-C++を学習しようとしていたら、阻止すべきでしょう(^^;)
そういう意味で、かなり変態なのではないかと。
Re: (スコア:0)
K&R形式の関数宣言や、new 、delete などの変数や関数は C89では許されるけど C++じゃコンパイルできません。
少なくとも C#とJava の関係以上には C++ と C# は似てると思いますし、C++ はオブジェクト指向言語と言ってよいと思いますよ。
世の中にはクラスや継承がなきゃオブジェクト指向じゃないと思いこんでる人もいるぐらいなので、腐るほどあるオブジェクト指向の宗派によっては、異端なところもあるし認めたくない部分も多いでしょうけど。
Re: (スコア:0)
>少なくとも C#とJava の関係以上には C++ と C# は似てる
普通は逆だと思うが。それこそどこの宗派ですか。