In einer Informatikarbeitsgruppe haben wir mal als Beispiel nur ein kleines Programm durchexerziert, ca. 20 Zeilen mit einer for-Schleife. Es sollte bewiesen werden, ob das Programm terminiert; war mühselig.
Mein persönliches Problem mit dem akademischen Arm der Informatik und dessen Fixierung auf die mathematischen Aspekte wie Beweisbarkeit: Programme werden nicht zum Selbstzweck geschrieben. Eine Nachgewiesene Terminierbarkeit ist zwar wunderschön, aber in der Realität hängt die doch meistens von den Eingaben oder anderen Nebeneffekten ab. Das ist mathematisch natürlich sehr unschön, weswegen die funktionalen Programmiersprachen diese Nebeneffekte wegabstrahieren möchten. Leider gehen die "rein funktionalen" Programmiersprachen soweit, Nebeneffekte komplett zu leugnen, womit eine Sprache aber jeglichen Nutzen verliert, wieso möchte ich ein Programm schreiben, das nicht auf seine Umwelt reagieren kann? Wenn das EVA-Prinzip zu umständlich wird, dann sollte man sich Gedanken machen, was man überhaupt erreichen möchte. Mathematische Perfektion ist für mich ein einfach ein unerreichbares Ideal des Elfenbeinturms.
Das ist eben der krasse Gegenentwurf zur einer Minimalspezifikation wie der von C. Aber der Ansatz ist dort auch nicht Top-Down, sondern Bottom-Up: Was kann die Hardware, wie drücken wir das abseits von roher Maschinensprache aus. Aber für mich hat C noch etwas anderes, das in meinen gerade C++ fehlt, aber auch vielen anderen Sprachen: Konsistenz. Natürlich ist auch C nicht 100% konsistent, Arrays sind beispielsweise ein ziemliches Chaos. Aber gerade bei C++ habe ich viel öfter das "98%-Problem": meine Abstraktion funktioniert in 98% der Fälle super, aber in den übrigen 2 % wird das so unbequem, dass ich anfange mich zu fragen, warum ich nicht einfach von Anfang an C genommen habe (Konstruktoren, Destruktoren und Exceptions beispielsweise). Vielleicht fällt es mir auch nur deswegen so sehr auf, weil doch eigentlich ständig das Gegenteil versprochen wird.
Trotzdem ist es ein Rätsel warum man unbedingt C nach Jahrzehnten aufräumen will, hat man denn nicht genug Sprachen die das besser machen?
Weil es eine sehr einfache Sprache ist, mit schlanker Spezifikation. Außerdem, was heißt besser machen?
Was willst du besser machen? Jede Sprache hat ihre eigenen Vor- und Nachteile, die perfekte Sprache gibt es nicht. Im anglikanischen Sprachraum werden Programmierer ja oft als
engineers bezeichnet, damit schwingt für mich das Abwägen von Vor- und Nachteilen mit. Eine grundlegende Crypto-Bibliothek würde ich aufgrund der Performanceimplikation ungern in
managed Sprachen oder sogar Python oder Ruby schreiben, dazu ist Verschlüsselung doch zu allgegenwärtig um diese Menge an Zeit und Strom zu verschwenden.