C ++を愛する理由

C ++は複雑すぎますか?



時々私はhabrを読みます。 そして、 http://habrahabr.ru/blogs/cpp/111403/という投稿に気づいたとき、正直に認めますが、彼は私に生計を立てるために触れました。 私は長年にわたってC ++をコア言語として使用しています。 繰り返しますが、私は正直に認めます。私は彼を完全には知りません。 Boost :: MPL、Boost :: SpiritまたはBoost :: Xpressiveのようなものを作成できるとは考えられません。 しかし、これが言語の複雑さについて話す理由ですか? はい、C ++言語標準はC#標準の2倍です。 しかし、コンテンツを見てくださいhttp : //www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdfおよびhttp://www.open-std.org/jtc1/sc22/wg21/docs /papers/2007/n2461.pdf 違いは顕著ですか? C#言語を最大限に活用するには、.NETの一部である多くのものが欠落していることをお勧めします。 実際、C ++は、STLがなくても、一般的にランタイム部分がなくても使用できます。 若い頃、OSでさえ、ローダーがアセンブラーのどこにあるのか、それ以外はすべてC ++で書くようになりました。 .NETとは異なり、STLが標準に含まれており、詳細に説明されているという事実は、C ++では大きなプラスであり、C#では大きなマイナスです。 だからこそ、私はC#についてのニュースを少しうらやましく思うが、それを使うつもりはない。 私のメインOSはLinuxであり、Monoプロジェクトは.NETの問題の解決策ではないようです。



プログラミング言語は、対処する時間を見つけるまで複雑です。 それとも、10ページに完全な説明があり、落とし穴のない理想的な本格的な言語があると誰かが考えていますか? 私はそのようなことを聞​​いたことがない。 しかし、長年にわたって、C ++はすでに死んでいるか、ゆっくりと死んでいると聞いていますが、彼の死体を回避するためのヒントがあります。 あらゆる種類の評価は、そもそもJavaまたはC#を持っていることを示しています。 しかし、ハードドライブの内容を見ると、ほとんどのソフトウェアはJavaまたはC#にありますか? はい、JavaとC#自体はC ++で記述されています(少なくとも以前はそうでした)。



私がCが嫌いなもののために



私は、憎しみがC89の時代にさかのぼることをすぐに特定します。 この言語を見るとすぐに、私はそれが嫌いだということにすぐに気付きました。 特にこれらのデザイン:



void main(argc, argv) int argc; char **argv; { ... }
      
      







引数を2回繰り返すのはなぜですか? または、関数宣言はfunc()



ようなもので、どの引数を受け入れますか? intが返されることは明らかですが、型制御はどうでしょうか? そして、引数のタイプを把握するための実装を探す必要があります。 実装を変更するときだけ、私はそれを知らないかもしれません。それは未定義の動作につながります。



私はまだCから継承されたコードで作業する必要があります。これは単なるバッファオーバーフローとリークの束です。 あなたはしばしば間違いに遭遇して困惑しますが、これまでどのように機能しましたか? 「C ++はコードを許容しません」そうです。 しかし、何らかの理由で、Cはその反対に、その執筆に貢献しています。 より正確には、なんらかの理由ではなく、理由は明らかです。リンク(ポインターより安全)がなく、タイプセーフがない(実線void *



)...多くのことがあります。 そして、エラーの原因はstrcat、printf、getsだけです。RAIIもガベージコレクションもありません。ここから多くのリークがあります。 長年にわたって、C言語に対する膨大な数の議論を蓄積してきましたが、めったに使用しないので、今ではすべてを思い出すことさえできません。



しかし、ドライバーとOSカーネルをC ++で記述することはお勧めしません。 もちろん、これにはCの方が適しています。 小さいライブラリとユーティリティの場合、CはおそらくC ++よりも良い選択です。 しかし、普通の雇われたプログラマーによって開発された中規模または大規模プロジェクトの場合、言語としてCを選択することはほとんど良い考えではありません。 少なくとも10万行をアセンブラーに変換する必要がある人はいますか? そして何百万人? 誰かがこの考えを好むなら、C ++が最善の選択です。このアセンブラーコードの多くがあります:–)



Cに対するC ++の利点:







これらの利点を正しく使用することだけが残っています。 たとえば、 goto



代わりに例外を使用しないでください。カンマ演算子などをオーバーロードしないでください。



短所:







長いコンパイルが問題になるのは、ヘッダーファイルに誤ってアクセスした場合(ヘッダーファイルがすべて制御不能にポップされた場合)、またはBoost :: Xpressiveなどのライブラリを使用する場合のみです。 たとえば、私のマシン上のかなり大きなQtプロジェクト(2年前、4コア、8GB RAM)はわずか15分で完全に再構築されます。 まあ、ボリューム...必要な犠牲。



Javaが嫌いなもの。



私は正直にJavaで書かれたプログラムを使用しようとしました。 何回も何年も。 しかし、実際にはそれらのどれも正常に動作しませんでした。 たとえば、C ++のIDEとしてのWindowsバージョンの2008モデルの有名なEclipseプログラム。 eclipse.exeを使用して起動しませんでした。 そこに何があったのか覚えていませんが、仕事を拒否しました。 eclipse c .exeを使用して実行する場合にのみ、コンソールウィンドウが残りますが、これは許容範囲です。 しかし、しばらくすると、このメソッドも機能しなくなりました。 私はフォーラムに登り、eclipse.iniファイルの秘密のアクションを見つけました。 しかし、長くはない。 最初に、eclipse.exeの起動が機能しなくなり、次にeclipse c .exeが起動しました。 再び、私はそれを始める方法を探さなければなりませんでした。 起動時にすぐにワークスペースを指定することをお勧めします。 .batファイルを作成しました。 しかし、これは長い間十分ではありませんでした。 おそらく問題は、プロジェクトに数百万行のコードが含まれていることでした...しかし、私の意見では、これはこのように振る舞う理由ではありません。



最悪の部分は、すべての場合において、EclipseがJavaで呼び出しスタックをポップアップして閉じたことです。 単一の正気なエラーメッセージではありません。 さらに、Javaで書かれたほとんどすべてのプログラムがこれを行ったことはさらに不愉快です!



2番目の長い話は、AS2サーバーに関するものでした( http://en.wikipedia.org/wiki/AS2 )。 これは、Apache Tomcat用のアプリケーションの形式でした。 それから、JavaプログラマーがXMLファイルで人々を苦しめることを好む方法をまだ知りませんでしたし、それを完全に受け入れられる形式だと考えました。 しかし、私はもうそうは思わない。私はXMLがJavaと同じくらい嫌いだ。 そのため、サーバーをインストールした後、彼は起動を拒否し、すべて同じ不可解な呼び出しスタックをログに書き込みました。 java.policyおよびjava.securityを修正し、必要なファイルlocal_policy.jarおよびUS_export_policy.jarを探して、動作を開始しました。 しかし、常にではありませんが、彼は時々仕事の代わりにスタックを書き続けました。 その結果、彼らはあなたのサーバーを書く方が簡単だという結論に達しました。 私はもっ​​と早く、時間を節約します。



Javaプログラムはゆっくり実行され、多くのメモリを消費します。 すべてではなく、確かに大多数ではありませんが、私がテストしたものの多くです。 同時に、私はpythonまたはrubyでプログラムを使用することを楽しんでおり、不便を感じません。 そして今、 Oracle不可解な動作



そしてC ++私も嫌い



私は愛と憎しみを同時に持っています。 Cの形式の重いレガシーの場合。長いコンパイルの場合。 多くのあいまいさのために、そのすべてがCから継承されているわけではありません。C++ 11を待つのに非常に時間がかかったという事実のために。 作成する必要のある巨大なデザイン用。 finality



という言葉がないため。 内省の欠如のため。 多重継承と不純物の不在。 異なるコンパイラとOSの違いについて...はい、彼には欠陥があります。 彼らはどこにでもあります。 しかし、私の分野では、ほとんどの場合、C ++の利点を上回ります。 そして、最も重要なことは、JavaScript、Ruby、Pythonなどのインタープリター言語と絶対に競合しないことですが、それらと非常に平和に調和しています。



何が好き?





GW-Basic。 初恋は人生のためです。



All Articles