Die Welt braucht mehr CONST

Wenn ich von RUST und vor allem von ZIG eines gelernt habe, dann die Notwendigkeit const häufiger einzusetzen.

Denn moderne Sprachen meckern sofort, wenn wir Variablen deklarieren, die dann nur wie Konstanten benutzt werden.


Variablen, die nicht variieren

Wenn wir vom Compiler eine Variable verlangen, dann sollten wir das nur tun, weil wir in dessen “Lagerraum” unterschiedliche Dinge aufbewahren wollen.
Wir erhalten den notwendigen Platz und auch “Logistik”, die den Platz verwaltet und an unsere Bedürfnisse anpasst.

Konstanten hingegen sind wie Verkehrsschilder. Sie werden einmal produziert und aufgestellt und brauchen danach keine “Wartung” mehr.

Ein effizientes Programm weiß also genau, wo es veränderbare Informationen braucht, und wo fixe Daten ausreichen.

In der Praxis sieht das aber anders aus, und so liegt fast alles in Variablen, die dann auch noch “versehentlich” verändert werden und der Grund für Fehlverhalten sind.

ZIG sagt: Konstante Variablen sind ein Fehler

Der ZIG Code

1const std = @import("std"); 
2const builtin = @import("builtin");
3
4pub fn main() void { 
5  var v = 42;
6  std.debug.print("Hello, {}!", .{ v }); 
7}

führt zum Fehler:

error: variable of type ‘comptime_int’ must be const or comptime

Unser v ist keine Variable und ändert sich nie. Es ist eigentlich eine Konstante und ZIG lässt uns den Code nur durchgehen, wenn wir daraus ein
const v = 42; machen.

Jetzt kann der Compiler den Zielcode perfekt optimieren, denn er braucht keinen Speicher für v reservieren und kann somit die CPU Register ausreizen.

In C würden viele Entwickler folgendes hintippen:

1int main() {
2  int v = 42;
3  printf("Hello, %d", v);
4}

Aber auch hier würde ein
const int v = 42 oder noch besser ein
static const int v = 42; zu mehr Optimierungen führen.
Doch da uns der Compiler dazu nicht zwingt, bleibt die Variable bestehen.

Wieso behaupten RUST und ZIG teils besser als C zu sein?

Tja … es ist nicht die Sprache, sondern der Programmierstil, der gut- oder schlecht-optimierten Code zur Folge hat.

Die Unterscheidung von Variablen und Konstanten sollte also auch in C Code von hoher Priorität sein. So erhalten wir dann nämlich Ergebnisse, die keine andere Sprache mehr übertreffen kann.
Es ist natürlich nur ein erster Schritt, auf den viele andere wohlüberlegt folgen müssen.

Fazit: Weitere Sprachen lernen hilft!

Je mehr Sprachen man sich ansieht, um so mehr lernt man auch über die “Muttersprache” (also C).

Ich würde mir wünschen, dass wir mehrere Level der Codeverifizierung in C Compilern hätten. Die Feststellung, dass Variablen als Konstanten genutzt werden, wäre ein solches Feature.

Natürlich könnte man das über “Warnings-as-Errors” Optionen auch umsetzen, aber es ist eben nicht das gleiche, wie eine zwingend per Standard vorgeschrieben Var-Konstanten-Prüfung.

Doch im Gegensatz zu ZIG und RUST sollte C sich immer die Option vorbehalten, dass man ein solches Feature auch abschalten können muss.

Oder wie man gerne sagt:

Ein Feature, das man nicht abschalten kann, ist ein Bug.

📧 📋 🐘 | 🔔
 

Meine Dokus über:
 
Weitere externe Links zu:
Alle extern verlinkten Webseiten stehen nicht in Zusammenhang mit opengate.at.
Für deren Inhalt wird keine Haftung übernommen.



Wenn sich eine triviale Erkenntnis mit Dummheit in der Interpretation paart, dann gibt es in der Regel Kollateralschäden in der Anwendung.
frei zitiert nach A. Van der Bellen
... also dann paaren wir mal eine komplexe Erkenntnis mit Klugheit in der Interpretation!