C++

jaa ich hab mich in #habo mal ein bissel mit yoda über c/c++/etlichesandres unterhalten und er hat was von 'scheußliches c++' gesagt. das zu erklären hätte wohl irc gesprengt, und weils mich interessiert frag ich hier nochmal:
was ist an c++ scheußlich bzw gegnüber..wie hießen die?
common lisp, dylan, ruby
also was sind die nachteile gegnüber diesen sprachen?

ich freue mich auf wissenszuwachs, jeder ist eingeladen mitzudiskutieren :)
btw: wer persönliche meinungen nicht mag sollte wohl potentiell eher nicht weiterlesen, es könnte sein dass die ein oder andere auftauchen wird :)
 
Naja, es gibt diesen "Glaubenskrieg" um die Programmiersprachen ja schon sehr lange zwischen den Programmierern. Die Frage nach der besten Sprache ist in diesem Sinne wohl die Frage nach der besten Religion. Und alle Religionen die ich kenne haben ihre Vor- und Nachteile. Die Wahrheit wird man in dem Bereich wohl nicht finden , sondern nur Meinungen. Hier ist dann also meine:

Mein persönlicher Favorit unter den Sprachen ist C bzw C++. Warum ist das so? Ich schätze an C die syntaktischen Freiheiten, die man als Programmierer hat. Überspitzt betrachtet reduziert C durch die Expression Syntax ein kleines Regelwerk auf eine Regel: Es muss irgendwie einen Wert ergeben. Wie gesagt: Überspitzt. Einige Konstruktionen, die bei anderen Sprachen eher durch ein starres, fixes Format definiert werden sind in C so flexibel, dass ich den Code leichter meiner Denkweise anpassen kann. Mir persönlich fällt es häufig leichter Programmcode "in einem Ruck" zu erfassen und C ist eine sehr kompakte Sprache, bei der man Vieles in einen Ausdruck packen kann was in anderen Hochsprachen über mehrere Ausdrücke verteilt werden müsste.

C zu beherrschen ist für mich aber auch deswegen wichtig, weil es viele andere Sprachen gibt, die syntaktisch eine vereinfachte C-Variante darstellen. So stellen solide C-Grundkenntnisse bereits ein gutes Grundgerüst zum Erlernen anderer Sprachen dar. Ein weiterer Punkt für C ist die Tatsache dass es sehr Laufzeit- und Speichereffizient ist. Darüberhinaus hat man in C die Möglichkeit sehr maschinennahe zu programmieren ohne dabei auf den Komfort einer Hochsprache verzichten zu müssen.


Ich habe noch niemals in Lisp, Ruby oder Dylan programmiert und kann demzurfolge auch keine Vergleiche mit diesen Sprachen anstellen. Es gibt jedoch einiges was an C tatsächlich scheusslicher ist als an anderen Hochsprachen wie Java, Pascal, Basic etc. und vielleicht ist es mit Lisp etc. ähnlich gelagert.

Die Gründe dafür liegen wohl im Aufbau dieser Sprache, die manchmal relativ hartnäckig sein kann. So kann z.b. die von mir so geschätzte Freiheit in C dazu führen, dass man extrem kryptischen Code produziert. Hinzu kommen eine Reihe technischer Details von C, die in anderen Hochsprachen entweder leichter umgesetzt oder teilweise garnicht vorhanden sind. Der Umgang mit Zeichenketten kann sich in C beispielsweise schwieriger gestalten, alleine schon deswegen weil C keine eigenen Operatoren für sie bereit hält.

Das Konzept der Zeiger ist in C praktisch nicht nur unumgänglich, sondern auch noch komplizierter in der Notation. Für Leute die sich mit Zeigern schwer tun ist C sicherlich unattraktiver, denn bereits ein Ausdruck wie "Hallo" wird durch C als Zeiger behandelt. Die Art und Weise wie C die Manipulation von Speicherbereichen zulässt kann ebenfalls als kritisch gewertet werden. Der Speicher kann zunächst wie in anderen Sprachen über eine statische Variable oder einem zuvor deklarierten Zeiger anberaumt werden. In beiden Fällen sind die Speichergrenzen im Allgemeinen bekannt. In C jedoch können Zeiger auf Speicherbereiche zeigen deren Grösse unbekannt ist und es gibt wahrscheinlich keinen C Programmierer, der nicht schonmal versehentlich über Speichergrenzen hinweg gelesen oder geschrieben hat.

Desweiteren ist es in C schwieriger im Kopf zu behalten wie bestimmte Datenstrukturen angesprochen werden. Wie war das noch gleich mit dem Zeiger auf ein Array bestehend aus Zeigern auf Klassen mit Strukturzeigern auf dynamisch-verkettete Listen? Ok, das Beispiel ist ein bisschen unrealistisch und krank. Die Typüberprüfung in C ist sehr inkonsequent realisiert und diesbezüglich sind die Unterschiede zwischen Compilern teilweise gewaltig. Bei Zuweisungen mit unterschiedlichen Typen führen einige Compiler eine automatische Conversion durch während bei anderen ein explizites Typecasting notwendig ist. Hierdurch wird das Schreiben von portabelem Code zusätzlich erschwert.

In komplexeren Ausdrücken oder bei Typdeklarationen ist es häufig schwierig die Rangfolge bestimmter Operatoren und Teilausdrücke zu erfassen. Ein kleines Quiz für alle: x = (int)y++; und x = ((int)y)++; Wo liegt der genaue Unterschied zwischen diesen beiden Zuweisungen? Ich habe wohlgemerkt bewusst ein recht einfaches Beispiel gewählt und doch glaube ich, dass es den ein oder anderen ins Schwanken bringt.

Ich selbst habe in diesem Text die Laufzeit- und Speichereffizienz pro C ins Feld geführt, aber auch dieses Argument wird durch die voranschreitende Entwicklung des Computers langsam immer unwichtiger. Was nützt uns schon eine theoretische Effizienz, die in der Praxis nicht mehr spürbar ist?

Ingesamt summieren sich diese kleinen Details in C zu einem grossen Schwachpunkt: Schwere Handhabung.
Manchmal würde C die Disziplin von Pascal wirklich gut tun, insbesondere wenn es um die Datentypen geht.

Ich glaube, dass abgesehen von bestimmten technischen Erwägungen, die Wahl der Programmiersprache eine Frage des persönlichen Geschmacks ist oder sein sollte. In der Praxis kommt es mir jedoch so vor, dass bei der Wahl auch häufig das persönliche Image von Belang ist. Ich will garnicht leugnen, dass dies auch bei mir ein bisschen so ist.:-)
Programmieren ist auch ein Weg sich gedanklich intellektuell in den Vordergrund zu stellen und viele Programmierer halten sich insgeheim für Genies oder hoffen darauf eines zu sein. Wenn man erstmal erkannt hat, dass einem C-Programmierer mehr Kompetenz zugesprochen wird als einem VB-Programmierer und einem Assembler-Programmierer wieder mehr als den anderen, dann ist dies oft der letzte Anstoss sich mit diesen Sprachen zu beschäftigen. Ich glaube aber dass man die wahre Erleuchtung des Programmierens nicht in einer Programmiersprache findet, sondern vielmehr in der Erkenntnis das man Probleme so stark abstrahieren kann, dass die verwendete Sprache fast zur Nebensache wird.

Trotzdem ist die Diskussion darüber immer wieder interessant und amüsant.

mfG, Softrunner
 
Viele Wege führen ans Ziel, welchen man einschlägt ist einem selbst überlassen. Ob nun mit C, Delphi, VB et cetera - am Ende zählt nur wie gut das Programm funktioniert. Glaubenskriege über diverse Sprachen sind Unsinn, denn es interessiert den Endanwender überhaupt nicht womit das Programm erstellt worden ist.
 
hmm, ich persönlich neige dagegen zu der auffassung, dass man sich ganz genau überlegen muss, was man wie programmieren möchte. mir käme es zB nie in den sinn, ein directx spiel in assembler zu coden. wenn ich aber ein programm mit einer grafischen schnittstelle, die windows komform sein soll brauche, nehme ich delphi4 zur hand und nicht vc5. es gibt halt vor- und nachteile.
 
@Tec

Es ist richitg, dass dem Endanwender die Sprache egal ist; deswegen herrscht dieser Glaubenkrieg ja auch zwischen den Programmierern und nicht zwischen Programmierer und Anwender. Ich verstehe, dass du Glaubenskriege dieser Art unsinnig findest und eigentlich denke ich das auch häufig.´Wenn man sich allerdings mit anderen Programmierern, mit denen man ein Projekt starten will, auf eine Sprache einigen muss, ist es einem eben nicht mehr ganz überlassen welchen Weg man geht und diese Diskussionen kommen einfach auf.
 
Zurück
Oben