Ich werde hier auch gegen den Strich gehen und versuchen, eine (etwas humorvolle) ästhetische Argumentation für C zu formulieren. Einige Leute nennen es aus verschiedenen Gründen "hässlich", beispielsweise weil es keine übergeordneten Konstrukte wie Klassen oder gibt Wenn ich mich auf Zeiger verlasse, sehe ich, dass dies bei mir nicht der Fall ist .
TL; DR : Meiner Meinung nach ist C einfach, gutes C ist lesbar und es gibt eine gewisse Freude, wenn man Bits schlägt.
C ist einfach
Standard C definiert nur einige grundlegende Typen und Mechanismen, um daraus Funktionen, Zeiger und Arrays zu erstellen. Darüber hinaus gibt es eine kleine Anzahl von Kompositionskonstrukten, mit denen komplexere Typen aus den Primitiven (wie Strukturen und Vereinigungen) erstellt werden können. Beachten Sie, wie ich den größten Teil der Sprache in zwei Sätzen beschrieben habe. Dies bedeutet, dass Sie beim Codieren nicht zu viele syntaktische Regeln und Formulare im Kopf behalten müssen.
Einfach ist schön .
C ist nicht arkan
Im Gegensatz zu vielen höheren Sprachen wird es Ihnen schwer fallen, in C viele seltsame, unverständliche Symbole zu finden. In der C-Welt ist die Funktion sowohl für die Abstraktion als auch für die "syntaktische Komprimierung" die wichtigste Funktion - semantisch eine sehr einfache und selbsterklärendes Konstrukt. Guter C-Stil fördert fast poetische, lesbare Schönheit. Versuchen wir zur Veranschaulichung das folgende Snippet aus dem Linux-Kernel zu lesen. Auch ohne die zugrunde liegenden Datenstrukturen und Implementierungsdetails zu verstehen, können wir Folgendes sinnvoll verstehen:
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();
}
In der Mitte der Funktion steht "Wenn der Strom unwahrscheinlich einfriert, fragen Sie den Kühlschrank, ob das Einfrieren tatsächlich stattgefunden hat". Dr. Seuss hätte es nicht besser schreiben können.
Lesbar ist schön .
C ist transparent
Wenn eine C-Anweisung keinen Funktionsaufruf enthält, können Sie sich im Allgemeinen einen guten Überblick über die Laufzeitkosten und die Nebenwirkungen verschaffen. C gibt dem Programmierer die Kontrolle und vertraut letztendlich darauf, dass er das Richtige tut. Wir können uns ein Bild davon machen, was passiert, wenn dieser (für SE leicht neu formatierte) Ausschnitt aus der Implementierung strlen()
in der GNU C-Bibliothek ausgeführt wird, da jeder Operator eine genau definierte Semantik hat. Es gibt keine Überlastung in C.
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
Für die Zwecke der "Optimierbarkeit" ist diese Eigenschaft großartig. Zwar erleichtern einige übergeordnete Sprachen den prägnanten Ausdruck übergeordneter Algorithmen (wie C ++ mit Klassen und Überladung), doch für die Zwecke, für die C als portabler Assembler konzipiert wurde, ist C ideal. Manchmal fühlt sich ein Programmierer nach erfolgreicher Ausführung von Code auf niedriger Ebene in gewisser Weise eins mit der Maschine (oder Null - es ist ein Implementierungsdetail). Das soll nicht heißen, dass andere Sprachen schlecht sind, nicht "Zen" genug oder etwas Dummes wie das, nur dass IMO C auf eine Weise interessant sein kann, die viele andere Sprachen aus vielen triftigen Gründen nicht gewählt haben.
Meiner Meinung nach machen die drei oben genannten Punkte die Schaffung komplexer und dennoch effizienter Systeme, die in meinem Kopf von Linux verkörpert werden, überschaubar. Ich finde, dass diese Welt meine ästhetischen Empfindungen anspricht, und ich würde jedem raten, C als sein nächstes Ziel zu betrachten, um diese Punkte zu berücksichtigen. Ich bin der Meinung, dass Argumente über Betriebssysteme und so weiter besser unterstützt werden, wenn sie explizit angegeben werden, da man Kernel sicherlich nicht verstehen muss, um ein erfolgreicher Programmierer zu sein, aber man könnte diese Felder als subjektiv überzeugend empfinden.