Optimieren von Programmen mit C/C++

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Unter anderem wegen diesem C++ ist das schnellste überhaupt, alles andere ist total langsam weil soweit von der Maschine weg.
Was sie nicht bedenken ist, dass C schneller ist zudem simpler (spätestens wenn man sich C++0x, die STL und Boost ansieht). Wenn man Objektorientierung haben will, kann man ja auch O'Caml nehmen, das ist auch sehr schnell und vermutlich einfacher zu beherrschen als C++ (vollständig zu beherrschen, also nicht nur ein Subset).

Der Vorteil den C++ hat sind eben diese Urban Legends dass es so schnell ist, dass man ein ganz toller Programmierer ist wenn man C++ nutzt und natürlich dass Firmen wie Microsoft C++ nutzen. Aber eigentlich ist es von den C-Nachfolgern C++, Objective-C und D wohl am langweiligsten. Eigentlich hätte C nur ein paar zusätzliche Features gebraucht, wie etwa Exceptions und Objektorientierung, dann wären viele Leute wohl bei C geblieben.

Um mal aus den Paul Graham-Facts zu zitieren und die Stimmung etwas aufzulockern:
Bjarne Stroustrup once tried to look upon Paul Graham, but was driven mad. Thus was born C++.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Dass C auf Grund des Sprachumfangs simpler ist, ist unbestreitbar. Aber ob Programme zu schreiben in C simpler ist, will ich jetzt mal wen. offen lassen.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Aber ob Programme zu schreiben in C simpler ist, will ich jetzt mal wen. offen lassen.
Hmm. Was mein Beispiel angeht: der Anfang ist Bibliotheksarbeit, das Ende ist aus dem Manual kopiert.

Der eigentliche C-Code ist weder simpler noch schwieriger als Python-Code, es ist schlichtweg der gleiche Code in anderem Gewand:

Code: Alles auswählen

PyObject *list = PyList_New((Py_ssize_t)0);
Py_UNICODE *word;

while((word = agetword()) != NULL)
    PyList_Append(list, Py_BuildValue("u", word));
       
return list;
Man könnte stattdessen in Python sagen:

Code: Alles auswählen

list = []

for word in iter(getword, ''):    # wenn man getword() analog in Python hat
    list.append(word)

return list
Man darf da keine großen Performace-Verbesserungen erwarten, wenn man C nimmt.
BlackJack

@Panke: Falls Du im Gegensatz zu C++ meinst, dann ist die Antwort "Ja". Ich habe jedenfalls immer aufgegeben wenn es zu irgendwelcher obskuren Template-Metaprogrammierung oder der Mischung zwischen Speicherverwaltung und Ausnahmen kam. Man muss da als Programmierer an viel zu viele Kleinigkeiten denken die andere Sprachen einem nicht aufbürden.

Da mag ich sogar Haskell noch lieber. Hat zwar auch das Potential einem die graue Masse zwischen den Ohren zu sprengen, aber wenigstens eine einfachere Syntax. :-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

BlackJack hat geschrieben:Wer C++ und Templates mag und damit freiwillig programmiert, hat ganz offensichtlich keinen Bedarf an einer einfachen, verständlichen Programmiersprache, also ziehen die üblichen Argumente für Python nicht. ;-)
Hallo BlackJack!

Ich kann deine Aussage nur bestätigen. Aber so langsam wird Python registriert. -- Die C++-Typen übernehme ich. Aber um die Java-Typen muss sich ein anderer kümmern. ;-)

:lol:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Panke
User
Beiträge: 185
Registriert: Sonntag 18. März 2007, 19:26

Ich meinte, das tatsächlich im Gegensatz zu C++.
Mit Template-Metaprogrammierung die Komplexität von C++ zu begründen, halte ich für wenig stichhaltig. TMP brauchts ja nun wirklich nicht, um mit C++ Programme zu schreiben, sondern ist mehr so ein "geht auch, aber brauch' man's?".

Was ich jetzt nicht verstehe ist, warum Speicherverwaltung im Vergleich mit C(!) als Schwachstelle von C++ angeführt wird. In C habe ich doch genau die gleichen Probleme wie in C++, nur dass ich in C++ alles in Klassen packen kann, im Konstruktor den Speicher alloziere und im Destruktor wieder freigebe. Das ist zwar immer noch komplizierter (Regel der großen Drei, Zuweisung an sich selbst etc.) als in Java oder Python, aber doch um Längen einfacher als in C. Denn ich muss mir zwar Gedanken machen, aber genau an einer Stelle (pro Klasse).
Man muss halt vermeiden ausserhalb von Klassen Sachen auf den Heap zu legen, dann passt's eigentlich.

Wenn man C++ kritisieren will, sollte man lieber den ekelhaften Präprozessor und das Modulsystem bemängeln oder dass die Standardlib im Vergleich zu Python wenig komfortabel ist, dass der Compiler (hier g++) manchmal Fehler ausspuckt so kryptisch, dass man meint, der weiß selber nicht, wovon er spricht ..
BlackJack

Ich bin über TMP, nur benutzend, und die Speicherverwaltung gestolpert. Ich hatte bei der STL Compiler-Fehlermeldungen, die total unverständlich waren. Und im Grunde ist Boost mittlerweile für viele so etwas wie die inoffizielle Erweiterung der Standardbibliothek. Da ist auch eine Menge Black-Template-Magic drin.

Mit der Speicherverwaltung hatte ich massive Probleme im Zusammenhang mit Ausnahmen die tief in einem rekursiven Aufruf einer Funktion ausgelöst wurden, die einen Graphen aufgebaut hat. Die hätte ich unter C nicht gehabt ─ gibt ja keine Ausnahmen. ;-)

Wo bei Klassen Speicher alloziert wird, bei welchen Zuweisungen automatisch eine Kopie erzeugt wird, welcher Standard-, Copy- was weiss ich nicht-Konstruktor wann aufgerufen wird etc. ist mir alles zu viel Denkarbeit. Das ist bei C wesentlich einfacher und transparenter. Und bei anderen (wirklich) High-Level-Sprachen muss ich mir da gar keine Gedanken drüber machen.
Antworten