Hallo CK,
Dafür sind viele Dinge in C katastrophal gelöst.
Und viele Dinge sind in Pascal so gar nicht möglich.
Das musst Du mir mal näher erklären. Beide sind Turing-complete. Was soll also in C
möglich sein was in Pascal nicht möglich ist?
»»
Ein String länger als X. Ich sage extra: ein String. Wenn ich mit Pointern arbeite, bin
ich wieder bei C-Zuständen.
Äh ... ok. Pointer gibt es auch in Pascal. Du sagtest etwas von "gar nicht möglich".
Und auf solche Fälle warte ich immer noch.
Auf unzulänglichkeiten in Konstrukten hinzuweisen, die es in C nichtmal gibt hat nichts mit der oben genannten Frage zu tun.
Das fängt schon bei ganz simplen Dingen an wie Arrays. So beginnen Arrays in C immer
mit 0 auch wenn ich das gar nicht haben will.
Die Philosophie, die da hinter steckt: das herunterrechnen des Indexes kannst du als
Programmierer auch selber tun.
Ja ich kann und MUSS es selber tun. Für mich ein Rückschritt ohne Zwang.
»»
Die Philosophie von C ist Minimalismus. Wenn dir das nicht gefällt, wähle eine andere
Sprache.
*lol* Wenn ich eine minimalistische Sprache nehmen will dann nehm ich eine Stackmaschine oder eine Programmiersprache wie Brainfuck (http://www.muppetlabs.com/~breadbox/bf/).
Es stimmt schon, daß C darauf ausgelegt ist möglichst wenig Schlüsselworte zu verwenden. Um das aufzufangen braucht man dann schon für primitivste Sachen Bibliotheksfunktionen.
Hat natürlich auch einen entscheidenen Vorteil. Man kann bei Bedarf sehr viele Dinge reimplementieren.
Noch eines zu den Schlüsselworten. C hat zwar wenig Schlüsselworte aber das wird dadurch ausgeglichen das im übermäßigen Maß Operatoren verwendet werden.
Und apropos Operator: Ganz krank ist ja nun dieses = für eine Zuweisung und == für Vergleich. Ich möchte nicht wissen, wie oft Programmierer darüber geflucht haben wenn in vielen unbeabsichtigen Verwechslungsfällen der Compiler keine Fehlermeldung liefert. --> Krankes Konzept da nicht am Menschen orientiert.
Übrigens versuche ich tatsächlich C aus dem Weg zu gehen. Nicht immer läßt sich das aber vermeiden.
In Pascal kann ich sagen Array[5..15] usw.
Pascal ist auch keine Sprache für Programmierer. Pascal ist eine Sprache für Anfänger.
Ohne vernüftige Begründung bleibt das eine Aussage auf dem Niveau wie "Windows ist für
DAUs und Linux für Profis".
Pascal wurde als Lehr-Sprache entwickelt. Dementsprechend ist das Abstraktionslevel,
die Syntax und dementsprechend ist der Aufwand, den man betreiben muss, wenn man bestimmte
Konstrukte erreichen will.
C ist nicht als Lehrsprache entwickelt worden. C ist eine Sprache für Programmierer. Das
merkt man sowohl an der Syntax als auch an den Freiheiten und dem Abstraktions-Grad.
Das ist ja alles recht hochtrabendes Gerade ... was mir fehlt sind konkrete praxisrelevante Beispiele.
Wenn C die Sprache für Real-World-Programmer ist, dann muss es doch irgendwas praxisrelevantes und _konkretes_ geben, was sich in Pascal nur schwer umsetzen läßt.
falls ich das mal brauche (das konnte sogar BASIC schon) und vorallem ist auch gleich
klar wenn man sich den Code anschaut, wo dass Array beginnt und wo es endet.
Das ist bei C genau so:
char array[100];
Fängt bei 0 an, hört bei 99 auf.
Was ich meinte (so schrieb ich es auch), dass es eben beim hinschauen nicht klar ist
»»
Es ist auf den ersten Blick klar. Ich schaue hin und weiss sofort: der Array ist 100 Zeichen
lang, erstes Byte liegt bei 0 und letztes Byte liegt bei 99.
Aber nur aufgrund impliziten Wissens.
Einer der noch nie Pascal programmiert hat (aber Erfahrung in Programmierung hat) wird sich in Pascal besser zurecht finden als jemand der noch nie C programmiert hat in einem C-Programm.
Ok aber darauf will ich jetzt nicht ewig herumreiten. Ich habe auch kein Problem mit dieser Definition von Feldern. Damit komme ich ganz gut klar. Was mir weniger gefällt ist eben nur, daß man keinen Startwert angeben kann.
Die Splittung von Headerdateien und Programmdateien bringt ebenfalls viele Probleme
mitsich (doppelter Pflegeaufwand) und tragen nicht gerade zur Übersichtlichkeit bei.
»»
Das Gegenteil ist der Fall. Die Header-Dateien bilden recht gut die Trennung von
Deklaration und Implementation ab. In Pascal musste man diese sehr dämlichen
forward;-Konstrukte bilden. Der Pflege-Aufwand war dort übrigens in dem Fall der
gleiche.
Irgendwie sehe ich nicht den rechten Sinn in dieser Trennerei (wegen der Übersichtlichkeit
dafür gibts moderne IDEs).
»»
Nicht jeder benutzt IDEs. Ich persönliche z. B. benutze keine IDE.
Da kann ich nur sagen: Selbst schuld.
Wenn Du Dir das Leben unnötig schwer machst, dann ist das Dein Problem. Schieb es dann aber nicht auf die Sprache wenn Dir dann irgendwas fehlt.
Ohne zusätzliche Software sind viele Sachen aufgrund der Komplexität gar nicht mehr vernünftig handhabbar. Denk nur an UML usw.
Und sowas sehe ich nicht als Aufgabe der Programmiersprache sich auch noch darum zu kümmern. Wie war das doch gleich mit der minimalistischen Philosophie von C? Alles klar!
[Fortsetzung folgt]