警告:これは、「ユーザーの知らない人」が彼の答えでリンクした話の批評ほどではありません。
彼の最初の主要なポイントは(おそらく)「常に変化する標準」です。実際には、彼が提供するすべての例は、標準が存在する前の C ++の変更に関連しています。1998年(最初のC ++標準が完成したとき)以来、言語への変更はごくわずかでした。実際、多くの人が本当の問題はもっと多くの変更を加えるべきだと主張しています。私は、元のC ++標準に準拠したすべてのコードが現在の標準に準拠していることを合理的に確信しています。多少確かではありませんが、何かが急速に(そしてまったく予期せずに)変更されない限り、これは今後のC ++標準(理論的には、使用されるすべてのコードexport
壊れますが、実質的には存在しません。実用的な観点からは問題ではありません)。そのような主張をすることができる他の言語、OS(またはコンピューター関連の他の多くの言語)はほとんど考えられません。
その後、彼は「常に変化するスタイル」に入ります。繰り返しますが、彼のポイントのほとんどはナンセンスにかなり近いです。彼はfor (int i=0; i<n;i++)
「古くて壊れた」とfor (int i(0); i!=n;++i)
「新しい辛さ」として特徴付けようとします。現実には、そのような変更が意味をなすタイプがありますがint
、違いはありません-何かを得ることができたとしても、良いコードや正しいコードを書くために必要なことはめったにありません。せいぜい、彼はモグラ塚から山を作っています。
彼の次の主張は、C ++が「間違った方向に最適化する」ことです。具体的には、優れたライブラリの使用は簡単であると認めながら、C ++は「優れたライブラリの作成をほとんど不可能にします」。ここで、私は彼の最も根本的な間違いの一つだと信じています。実際には、ほとんどすべての言語に適したライブラリを作成することは非常に困難です。最低限、優れたライブラリを作成するには、問題のドメインを十分に理解して、そのドメイン内の(または関連する)可能性のある多数のアプリケーションでコードが機能することが必要です。C ++が実際に行うことのほとんどは「水準を引き上げる」ことです。ライブラリがどれほど優れているかを見た後、人々は、そうでない場合のようなドレックの書き方に戻ることはほとんどありません。本当に優れたコーダーはかなりの数のライブラリを作成し、それを「残りの人」が(簡単に、彼が認めているように)使用できるようにします。これは本当に「それはバグではなく、機能です」というケースです。
私はすべてのポイントを順番にヒットしようとはしませんが(ページを取得します)、彼の終了ポイントに直接スキップします。Bjarneは「プログラム全体の最適化を使用して、未使用の仮想関数テーブルとRTTIデータを排除できる。このような分析は、動的リンクを使用しない比較的小規模なプログラムに特に適している」と述べています。
彼はこれを、「これは本当に難しい問題だ」という支持されていない主張をすることで批判し、それを停止する問題と比較することさえします。現実には、それは何の種類でもありません-実際、Zortech C ++(1980年代に遡るMS-DOS用のほとんど最初の C ++コンパイラ)に含まれていたリンカーがこれを行いました。おそらく外部データのすべてのビットが削除されたことを確認することは困難ですが、それでもかなり公平な仕事をすることは完全に合理的です。
ただし、それにもかかわらず、はるかに重要な点は、いずれにしても、ほとんどのプログラマーにとってこれはまったく無関係であることです。かなりの量のコードを逆アセンブルした私たちが知っているように、ライブラリをまったく持たないアセンブリ言語を書かない限り、実行可能ファイルにはほぼ確実にかなりの量の「もの」(典型的な場合はコードとデータの両方)が含まれますおそらく実際に使用していることは言うまでもなく、おそらく知らないでしょう。ほとんどの人にとって、ほとんどの場合、それは重要ではありません。最も小さな組み込みシステム向けに開発しているのでない限り、余分なストレージ消費は単純に無関係です。
最後に、この暴言はLinusの愚かさよりも少し多くの内容を持っているのは事実ですが、それは当然のことながら、それにふさわしいかすかな賞賛を与えています。
virtual
関数のvtableを持つ通常のクラスを生成するはずですよね?