C++ Warum ist C++ oft eine 'gehasste' Programmiersprache?

@antred
Wenn du schon zwischen Definition und Deklaration dein Wissen versuchst preiszugeben, schau dir mal die Unterschiede auch zur Initialisierung an.

@TrebuTurbo
Best practice heißt nicht das es richtig ist.
Wenn Du mal Teamarbeit gemacht hast, oder Programme warten mußt, dann wüßtest Du auch, daß es katastrophal ist, ständig zu schauen, ob eine Variable im Scope schon benutzt wurde oder nicht. Oder ob sie bereits überdefiniert wurde oder man das gerade selber tut.

@beide
In dem Thread geht es nicht um Spezialfälle sondern der TE hat gefragt, warum C++ oft gehaßt wird.
Ich denke, durch unsere Off-Topic Diskussion haben wir ihm am Beispiel die zwei Seiten gezeigt.
 
@LastChosenOne

Wie alt sind denn die Leute auf deiner Arbeit?

Meist ist doch zufällig immer das Produkt/Programmiersprache/Dings am besten was man selber verwendet. :rolleyes:
Dann müssten deine Kollegen aber einfach jede andere Programmiersprache hassen außer C.
Ich glaub, das es nicht so ist, liegt daran, dass C++ als Erweiterung zu C gesehen werden kann.

Da hier gerne mal unpassende Autovergleiche dargebracht werden, stelle ich folgenden, absurden und nicht ernstgemeinten Vergleich an:
Wenn man C beherrscht aber nicht C++ muss sich das so ähnlich anfühlen, als hätte man ein Auto gekauft, zu dem irgendwann das bessere Nachfolgemodell herausgebracht wurde. Das Nachfolgemodell ist dann natürlich blöd.:D
 
Zuletzt bearbeitet:
@Ochse:
Meine Kollegen sind um die 25-40 Jahre alt. ^^

Und sehr schöner Auto-Vergleich, absurd aber treffend. :D
 
miac schrieb:
@antred
Wenn du schon zwischen Definition und Deklaration dein Wissen versuchst preiszugeben, schau dir mal die Unterschiede auch zur Initialisierung an.

Ich versuche, mein Wissen preiszugeben? :freak:

miac schrieb:
@TrebuTurbo
Best practice heißt nicht das es richtig ist.

Ähm, doch, genau das heißt es. Zumindest ist das, was der überwiegende Teil der Community als den besten Weg betrachtet.

miac schrieb:
Wenn Du mal Teamarbeit gemacht hast, oder Programme warten mußt, dann wüßtest Du auch, daß es katastrophal ist, ständig zu schauen, ob eine Variable im Scope schon benutzt wurde oder nicht. Oder ob sie bereits überdefiniert wurde oder man das gerade selber tut.

Wenn eine Funktion dermaßen lang ist oder so viele lokale Variablen enthält, daß es schwierig wird, den Überblick zu behalten, ist das ein totsicheres Zeichen, daß sie ZU lang ist. Refactoring und Aufbrechen in mehrere Unterprozeduren ist angesagt.

miac schrieb:
@beide
In dem Thread geht es nicht um Spezialfälle sondern der TE hat gefragt, warum C++ oft gehaßt wird.
Ich denke, durch unsere Off-Topic Diskussion haben wir ihm am Beispiel die zwei Seiten gezeigt.

Deswegen lasse ich eine Aussage, die ich für grob falsch erachte, aber nicht einfach unherausgefordert durchgehen.
 
Zitat von LastChosenOne:
@convexus: Wenn C++ so viel besser ist, warum ist dann C mit 17% auf Platz 1 - und C++ mit 4% auf Platz 4 und kann sich gerade noch über C# halten?..

Dafür gibt es viele Gründe. An erster Stelle sehe ich wirtschaftliche Gründe. Z.B. im Embedded-Bereich sind die Aufgaben meist nicht so komplex und die hier anwendbaren Vorteile von C++ sind moderat. Andererseits erfordert der Einsatz von C++ im Embedded-Bereich ein gutes Verständnis der Programmiersprache bzw. die Beschränkung auf ausgewählte Sprachmerkmale. Ansonsten wird häufig eine 'gut genug' Software erstellt. Kommt halt nicht so sehr auf die Qualitäten der Software an, verkauft sich auch so. Aus wirtschaftlicher Sicht wichtiger ist ein kurzer Entwicklungszeitraum und ein großes Angebot von einsetzbaren Programmierern. C++ ist eine komplexe Programmiersprache und eher eine Vereinigung von vielen Paradigmen. Um C++ sinnvoll einsetzen zu können ist daher eine Beschränkung auf eine 'Teilmenge' der Sprache erforderlich oder die Beherrschung der eingesetzten Möglichkeiten. Wenn man aber gewisse Qualitäten anstrebt, kommt wieder C++ ins Spiel. Hier mal als Beispiel der GNU-Compiler gcc, welcher ursprünglich in C programmiert wurde und ab 2008 die Vorteile von C++ nutzt

http://lwn.net/Articles/542457/

Reasons

Taylor's slides list the reasons to commit to writing GCC in C++:

C++ is well-known and popular.
It's nearly a superset of C90, which GCC was then written in.
The C subset of C++ is as efficient as C.
C++ "supports cleaner code in several significant cases." It never requires "uglier" code.
C++ makes it harder to break interface boundaries, which leads to cleaner interfaces.
 
Ich bin zwar eigentlich ein C++-Fanboy (ich gebe es zu), aber es gibt durchaus ein paar Sachen, die mich stören. Was mir bisher am Meisten auf den Keks gegangen ist ist die Tatsache, dasss man in C++ programmieren möchte aber dabei uralt Bibliotheken benutzt, die dann leider aber in C sind. Elegant bekommt man das dann eigentlich nur in C++ eingebettet, wenn man eine Art Wrapper für die benötigten Funktionalitäten schreibt. Das kostet aber natürlich etwas Zeit und Nerven.
Mittlerweile zwar eigentlich Vergangenheit aber die ursprünglichen APIs für Oberflächen unter Windows finde ich grauenvoll. Die Win32-API kann ich schonmal gar nicht leiden und was danach kam war auch nciht viel besser. Erst mit Qt hat sich hier für mich die Sache gebessert. Aber das erfordert für Neulinge in Qt natürlich viel Geduld und Frusttoleranz, bis sie sich endlich für Qt entscheiden (:)).
Die beiden Punkte führen aber zu ein und dem selben Punkt: es gibt einfach furchtbar viele Altlasten. Ist ja schön und gut, dass alles kompatibel sein soll, aber angenehmer wäre tatsächlich mal ein harter Schnitt. Dass das aber in ganz vielen Fällen einfach nicht geht, sollte eigentlich jedem klar sein.

Eher am Rand von Bedeutung, aber ebenfalls nicht so ganz optimal finde ich die Auftrennung in Header und CPP-Dateien. Das finde ich zB in Java wesentlich schöner gelöst. Objektorientiert programmieren bedeutet meiner Meinung nach, dass es eine Datei pro Klasse gibt und ich nach außen Interfaces sichtbar machen kann. Für mich jedenfalls die elegantere Lösung.

Aber trotz dieser (in meinen Augen) suboptimalen Punkte ist C++ (für mich) immer noch die angenehmste Sprache. Die einzige andere Alternative wäre für mich C, was ich allerdings dann als Einschränkung meiner Möglichkeiten betrachten würde. Oder eben dann tatsächlich Assembler, wenn es um Microcontroller geht.
 
daemon777 schrieb:
Was mir bisher am Meisten auf den Keks gegangen ist ist die Tatsache, dasss man in C++ programmieren möchte aber dabei uralt Bibliotheken benutzt, die dann leider aber in C sind. Elegant bekommt man das dann eigentlich nur in C++ eingebettet, wenn man eine Art Wrapper für die benötigten Funktionalitäten schreibt. Das kostet aber natürlich etwas Zeit und Nerven.
Ja das stimmt, das ist auch etwas umständlich meistens - wer sich aber die Mühe nicht machen will, sich eine eigene Klasse zusammen zu basteln, die das für einen übernimmt (man muss die Klasse ja nur ein mal machen), dann kann man auch vorgefertigte Bibliotheken benutzen - erleichter einem so manches.

daemon777 schrieb:
Mittlerweile zwar eigentlich Vergangenheit aber die ursprünglichen APIs für Oberflächen unter Windows finde ich grauenvoll. Die Win32-API kann ich schonmal gar nicht leiden und was danach kam war auch nciht viel besser.
Die Windows-API kam für mich persönlich noch nie in Frage,.. Hab mich einmal darüber informiert und es sofort gehasst ^^

daemon777 schrieb:
Die beiden Punkte führen aber zu ein und dem selben Punkt: es gibt einfach furchtbar viele Altlasten. Ist ja schön und gut, dass alles kompatibel sein soll, aber angenehmer wäre tatsächlich mal ein harter Schnitt. Dass das aber in ganz vielen Fällen einfach nicht geht, sollte eigentlich jedem klar sein.
Das dachte ich mir auch schon öfters, ist aber leider nicht möglich.
Wenn dann sollte C++ einfach alle Altlasten direkt ersetzen durch neue Klassen, oder es sollte eine vergleichbare Programmiersprache geben wo es keine Altlasten mehr gibt. (Vergleichbar mit Binary-Größe, Geschwindigkeit, Syntax, usw)

daemon777 schrieb:
Eher am Rand von Bedeutung, aber ebenfalls nicht so ganz optimal finde ich die Auftrennung in Header und CPP-Dateien. Das finde ich zB in Java wesentlich schöner gelöst. Objektorientiert programmieren bedeutet meiner Meinung nach, dass es eine Datei pro Klasse gibt und ich nach außen Interfaces sichtbar machen kann. Für mich jedenfalls die elegantere Lösung
Ich denke mal in Java wird das genauso gehandhabt sein mit Klassen wie in C#, korrigiert mich bitte wenn ich falsch liege.
Einerseits wäre es einfacher eine Klasse zu erstellen - nur noch eine Datei zu pflegen, statt zwei.
Aber es hat mir bisher auch immer wieder geholfen, falls ich die IO-Optionen einer Klasse brauchte, nur die Header-Dateien anzuschauen. Genauso ist es, wenn man eine Bibliothek programmiert und diese irgendwo einbetten will, ohne dass der andere den Source-Code hat - man compiliert die Bibliothek (in Objekt- oder Binary-Dateien) und nimmt einfach noch die Header-Dateien dazu. Fertig.
In anderen Sprachen müsste man sich ja noch etwas mehr Mühe machen - man muss den Kopf jeder einzelnen Funktion in eine extra Datei schreiben - mach das mal bei ca. 20-30 Klassen. :D
 
Zurück
Oben