また、私はここで穀物に反して、Cの(少しユーモラスな)美的なケースを作成しようとします。一部の人々は、クラスやクラスのような高レベルの構成体の欠如など、ポインタに依存しているため、私には当てはまらないことがわかります。
TL; DR:私の意見では、Cはシンプルで、良いCは読みやすく、バンギングビットに特定の喜びがあります。
Cは単純です
標準Cは、関数、ポインター、および配列からそれらを作成するためのいくつかの基本的なタイプとメカニズムのみを定義しています。その上、プリミティブからより複雑な型(構造体や共用体など)を作成するための少数の構成構造体があります。ほとんどの言語を2つの文で説明していることに注目してください。これは、コーディング中に頭の中にあまり多くの構文規則やフォームを保持する必要がないことを意味します。
シンプルは美しい。
Cは不可解ではありません
多くの高レベル言語とは異なり、Cで多くの奇妙な、理解できない記号を見つけるのは難しいでしょう。Cの世界では、抽象化と「構文圧縮」の両方の主な機能は機能です。自明の構造。良いCスタイルは、ほとんど詩的で読みやすい美しさを助長します。説明のために、Linuxカーネルから次のスニペットを読んでみましょう。基礎となるデータ構造と実装の詳細を把握していなくても、次のことを理解できます。
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
関数の中央には、「電流が凍結するというまれなイベントでは、実際に凍結が起こったかどうか冷蔵庫に尋ねてください」と表示されます。スース博士はそれをもっとうまく書けなかったでしょう。
読みやすいは美しい。
Cは透明です
Cステートメントに関数呼び出しが含まれていない限り、通常、実行時のコストと副作用について非常に良いアイデアを得ることができます。Cはプログラマーに制御権を与え、最終的に彼または彼女が正しいことをすることを信頼します。strlen()
すべての演算子は明確に定義されたセマンティクスを持っているため、GNU Cライブラリーの実装のこのスニペット(SE用に少し再フォーマットされた)が実行されたときに何が起こるかを把握できます。Cにはオーバーロードはありません。
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
「最適化可能性」の目的のために、このプロパティは素晴らしいです。おそらく、一部の高レベル言語は高レベルアルゴリズムの簡潔な表現を簡単にします(クラスとオーバーロードを伴うC ++など)が、Cが設計された目的のために-ポータブルアセンブラーとして機能するために-Cは理想的です。場合によっては、低レベルのコードが正常に実行されると、プログラマーはある意味でマシン(またはゼロ-実装の詳細)に1つ感じます。これは、多くの正当な理由から、IMO Cが他の多くの言語がそうでないことを選んだ方法で興味深いことができるというだけで、他の言語が悪い、「十分な」、またはそのような愚かではないということではありません。
私の意見では、上記の3つのポイントは、Linuxによって私の心に具体化された複雑でありながら効率的なシステムの作成を管理可能にします。この世界は私の美的感覚に訴えるものであり、Cを次のターゲットとして検討している人には、これらの点を検討することをお勧めします。オペレーティングシステムとその他の議論は、プログラマーとして成功するためにカーネルを理解する必要はないので、明示的に述べることでよりよくサポートされると思いますが、これらの分野は主観的に説得力があるかもしれません。