> C++ が C を拡張したマルチパラダイム言語ということを考えると, D と似ていると云えるのだろうか?
C を出発点として OOP を支援する文法拡張を行いつつ C との互換性を重視したのが Template 導入以前の C++ でした。もとはトランスレータだったことも理由のひとつでしょう。 他方、C との文法やライブラリの互換性を捨ててでもプログラマに使いやすい OOP や Generics を実現しようとしているのが D 言語であると理解しています。 D は後発だけあって、Java などの問題点への解決案も提案されています。
C++ の言語設計では、ときおりものすごくダサイものがあります。 古い仕様では for の itereator のスコープが for の後まで続いていたとか。 template 周りでも pre-compile とかいろいろ怪しいので、言語設計者の処理系実装者としての感覚には疑問を覚えます。 その点、 D は常に実装からのフィードバックをもって言語設計されているようで好もしく感じます。 使い込んだら不満も出るんでしょうが、ちょろっと触ったところでは D はセンスがいいと思いました。
「CプログラマとしてはCとC++を一緒にされて迷惑している」 (スコア:0)
C を知らないで(まともな) C++ プログラマにはなれない気がしないので、普通は C プログラマ ⊂ C++ プログラマ ですよね。Cプログラマだけど、C++も使えると思ってもらえたらむしろラッキーではないでしょうか?
とはいえもちろん、ある言語を「知っている」ということには幅があります。文法を一通り知っている、サンプルプログラムを検索・切り貼りしながら、どんな言語でもできるような一般的な処理を書く、というレベルから、その言語の深層、仕様の危ういところまで把握しているとか、エラーメッセージからすぐ典型的なバグを想像できるとかいうレベルから、真のエキスパートのレベルまで。
高度なCプログラミングの世界は、C++の標準的なプログラマが知らないような側面を持っているのも事実。
Re: (スコア:1)
Cプログラマだけど、C++も使えると思ってもらえたらむしろラッキーではないでしょうか?
C は使えるけど C++ はさっぱりなので, "C/C++" という一緒にされた選択肢を選ぶときは申し訳ない気持ちになります.
C++ が C を拡張したマルチパラダイム言語ということを考えると, D と似ていると云えるのだろうか?
D は全く知らないので, 誰か教えて.
Re: (スコア:1)
> C++ が C を拡張したマルチパラダイム言語ということを考えると, D と似ていると云えるのだろうか?
C を出発点として OOP を支援する文法拡張を行いつつ C との互換性を重視したのが Template 導入以前の C++ でした。もとはトランスレータだったことも理由のひとつでしょう。
他方、C との文法やライブラリの互換性を捨ててでもプログラマに使いやすい OOP や Generics を実現しようとしているのが D 言語であると理解しています。
D は後発だけあって、Java などの問題点への解決案も提案されています。
http://www.kmonos.net/alang/wnd/whats.ja.html [kmonos.net]
Dの文法 (スコア:1)
初期のC++はCからの互換性をかなり重視してましたが、理由はトランスレータだったからじゃなくて、それが設計上の方針だったから。既存のCコードとうまく折り合いをつけながら、C++への移行させるというのが基本戦略だったんだけど、何か新しいことをやるには初期のC++移行コードとの折り合いもつけなくなっちゃった。C++の文法がやらたと複雑な一因だと思います。
彼らはC++コンパイラも作っているんだから、C++の細部に潜む悪魔のようなことには相当精通しているでしょう。Dを勉強すると、C++がいかに複雑な言語かわ
vyama 「バグ取れワンワン」
Re: (スコア:1)
C++ の言語設計では、ときおりものすごくダサイものがあります。
古い仕様では for の itereator のスコープが for の後まで続いていたとか。
template 周りでも pre-compile とかいろいろ怪しいので、言語設計者の処理系実装者としての感覚には疑問を覚えます。
その点、 D は常に実装からのフィードバックをもって言語設計されているようで好もしく感じます。
使い込んだら不満も出るんでしょうが、ちょろっと触ったところでは D はセンスがいいと思いました。
Re: (スコア:0)
ARMには「なぜそういう設計になったか」が書いてあって楽しいですよ。意地を張って多重継承を入れてしまった、今は後悔している、とか。
Re:Dの文法 (スコア:1)
> 意地を張って多重継承を入れてしまった、今は後悔している、とか。
その辺がセンス悪いと思うんです。
そのせいで実装者がエライ目にあい続けているわけで。
1990年ごろに肥満仕様を批判されていた Ada を軽く超えてるのは迷走してるなあと。
Re: (スコア:0)
現在の知見を用いて過去の判断を批判するのは愚かしいことです。
(20年前といえば、インターフェースの継承という考え方が広まる前のことですよ)
当時の知見なら論文をあたればわかりますし、C++のrationaleならARMにもある程度書いてあります。
ご覧になってみてはいかがでしょうか。
Re:Dの文法 (スコア:1)
> 現在の知見を用いて過去の判断を批判するのは愚かしいことです。
実用言語として普及している C++ の実績を否定するものではありません。
私自身 C++ を使ってますしね。
> (20年前といえば、インターフェースの継承という考え方が広まる前のことですよ)
OOP という概念をどう実装するかで、ある意味百花繚乱だった時代ですね。
C 拡張 OOPL としては、C++ 以外にも Objective-C や COB があったわけで。
C++ が他OOPLよりリードできたのは、C を内包しているという保守的な言語仕様で
開発要員を確保しやすいというのが好まれた理由だろうと思っています。
ARM は、これを機会に読んでみたいと思います。