Warum programmiert ihr in C?
-
Ich programmiere in C weil ich damit die meiste Kontrolle über mein Programm habe und man schnell zum Ziel kommt.
-
Mann könnte ja auch einfach sagen, dass die C++ troller keine Ahnung haben wie man in C richtig Software implementiert!
Nichts gegen C++.
Beide Sprachen haben ihre stärken und schwächen. Deshalb könnt ihr langsam ein close darunter setzen.
-
rotf-äh schrieb:
siehste, hat c mehr Kante als c++ bzw. c--
C-- -> http://www.cminusminus.org/ wird als Zwischensprache beim Kompilieren von Haskell benutzt und hat wenig mit dem Thema zu tun.
__-- schrieb:
ja gebe zu, der vergleich hat mich schon ein bischen überrascht. ändert aber nichts daran, dass nicht die sprache (c) sondern die umsetzung/implementation langsam ist
Ach? Haben aber nicht alle wegen Performance auf der Sprache herumgehackt? Die Sprache an sich hat selten was Geschwindigkeit zu tun, sie ist eben nur eine Sprache definiert in irgendeinem Textdokument.
Irgendwie verstehe ich die ganzen Argumente nicht mehr. Um was gehts eigentlich?
-
volkard schrieb:
Damit ist gemeint, daß wir jetzt eine sort funktion mit geinlineter vergleichsfunktion (was dann auch pro zu sortierendem datentyp eine eigene funktion erfordert) vs. normaler vergleichsfunktion vergleichen tun, um mal zu schauen, was das Inlinen hier bringen bewirken könnte. Das ist doch auch für C-Leute ein wichtiges Ergebnis.
Zumindest ich wüsste das gerne. Gibt es da verlässliche Vergleichsdaten?
-
knivil schrieb:
Ach? Haben aber nicht alle wegen Performance auf der Sprache herumgehackt?
kann auch sein das sich bei anderen eingabedaten/array größen andere werte ergeben. worüber sich die c'ler aufregen ist nicht die umsetzung eines sort... es ist das paket, der overhead usw... das muß deswegen auch nicht langsamer sein.
und dann gibt es auch einfach noch einen aspekt den man nicht wegdiskutieren kann und das ist geschmack :p
-
Lasst euch doch von den Dumpfbacken hier nicht erzählen man bekommt in C nicht einen schnellere Implementierung eines qsort hin als in C++, das ist totaler Quatsch.
Wenn du willst ist dein C Programm IMMER schneller als ein C++ Programm, das mag vielleicht nicht immer der große Faktor sein aber hier zu behaupten C++ ist schneller als C ist der größte Humbug den ich seit langem gelesen habe. Vielleicht mag das noch für irgendwelche Standardimplementierungen manchmal hinhauen aber nicht wenn man selbst implementiert und optimiert, da ist C naturbedingt näher an der Maschine dran als C++.
-
totalerstuss schrieb:
Vielleicht mag das noch für irgendwelche Standardimplementierungen manchmal hinhauen aber nicht wenn man selbst implementiert und optimiert, da ist C naturbedingt näher an der Maschine dran als C++.
-
Ich liebe doppelte Verneinungen. Und Mikrooptimierungen mache ich auch immer selbst. Die Compiler koennen das nie richtig.
-
knivil schrieb:
Ich liebe doppelte Verneinungen. Und Mikrooptimierungen mache ich auch immer selbst. Die Compiler koennen das nie richtig.
OMG
-
volkard schrieb:
Freu Dich doch darüber, daß ich Dir so spannendes Wissen vor die Füße lege.
Dass C++' STL toll ist, bestreite ich nicht und dass es so viel schneller ist hätte ich nicht gedacht.
Dass sort in dieser Geschwindigkeit in C nicht möglich ist, stimmt nicht. Es ist ein bisschen schwieriger, da reicht die Standardbibliothek nicht aus, dafür gibt es unzählige alternative Bibliotheken.Apropo Standardbibliothek in C: In C++ scheint die auch nicht so toll zu sein.
Der C++-Compiler kann mitunter ein identisches Programm etwas schneller machen als der C-Compiler, aber ein Asm/C/C++-Gemisch nenn ich dann nicht mehr C++.
Vielleicht geht es mit C++, durch die Exceptions auf einfache Weise das Programm so zu optimieren, wie es in C nur sehr umständlich hinzukriegen ist, aber vermutlich ist mit der Verwendung von Makros mit Assemblercode das gleiche in C mit sehr viel mehr Aufwand möglich.
Solche theoretischen Szenarien mit einem maximal ausgereizten C++-Compiler den C-Compiler auszustechen sind mit der Einbindung von Assemblercode wieder hinfällig, rein theoretisch kann man in C++ wie in C reinen Assembler schreiben, es gilt C=C++=Assembler.Jedes, in der Praxis geschriebene Programm in C++ ist etwas langsamer als ein C-Programm mit der gleichen Funktionalität und das liegt an erster Linie an RAII (insbesondere wenn später erneut initialisiert wird), an falscher Nutzung von Sprachfeatures und an bestimmten Teilen der Standardbibliothek.
volkard schrieb:
Genau das sage ich über cout und Konsorten.
Ausserdem ist jedes C++ Programm grösser als das in C.
Aus reinem Interesse (ich programmiere manchmal auch in C++): Was verwendest du an der Stelle von den Standard-Streams (boost::iostreams kanns ja nicht sein)?
-
In C++ hat man immer einen Overhead z.B. durch RTTI, Exceptions(die kann man wenigstens ausschalten, obwohl dann nutzlos) und lahme C++ Laufzeitumgebung wie unter Linux.
Funktionen die durch in Assembler implementiert sind als Vergleich heranzuziehen ist dann wohl dann auch mehr als ärmlich, gelle? Macht mal den QSorttest unter einem System welches eine weniger Assemblerlastige C++ Implementierung hat und schon sieht alles wieder anders aus. Was ich damit sagen will? Wer Geschwindigkeitsvergleiche wie hier aufgezeigt ernst nimmt hat nicht viel von der Technik hinter einer Programmiersprache verstanden.
-
Ich sehe kein Assembler Aber ich benutz ja auch nur nen unbekannten Compiler von Microsoft.
-
overheadwithtail schrieb:
In C++ hat man immer einen Overhead z.B. durch RTTI, Exceptions(die kann man wenigstens ausschalten, obwohl dann nutzlos) und lahme C++ Laufzeitumgebung wie unter Linux.
Funktionen die durch in Assembler implementiert sind als Vergleich heranzuziehen ist dann wohl dann auch mehr als ärmlich, gelle? Macht mal den QSorttest unter einem System welches eine weniger Assemblerlastige C++ Implementierung hat und schon sieht alles wieder anders aus. Was ich damit sagen will? Wer Geschwindigkeitsvergleiche wie hier aufgezeigt ernst nimmt hat nicht viel von der Technik hinter einer Programmiersprache verstanden.
= Jeder der eine andere Meinung hat hat es nicht verstanden. Erbärmlich.
-
Leute ist doch ganz einfach. Alle Theorie und Mikrobenchmark sind doch von Arsch. Vergleicht einfach mal ein GTK+/C Programm mit einem Qt/C++ Programm und ihr seht wie Ressourcensparend man sehr ähnliche Programme in C realisieren kann und darum mag ich die Sprache so, auch wenn sie nicht mehr modern ist und jeder meint mir OOP an die Backe quatschen zu müssen.
Übrigens glaube ich auch unter Windows das hier die WinAPI/C Programme am besten die Ressourcen nutzen. Von der Wirtschaftlichkeit rede ich hier nicht, aber darum geht es in diesem Thread ja auch nicht.
-
Cönner schrieb:
Jedes, in der Praxis geschriebene Programm in C++ ist etwas langsamer als ein C-Programm mit der gleichen Funktionalität
Tja, das ist jetzt vollig unbewiesener ein Glaubenssatz.
Cönner schrieb:
und das liegt an erster Linie an RAII (insbesondere wenn später erneut initialisiert wird), an falscher Nutzung von Sprachfeatures und an bestimmten Teilen der Standardbibliothek.
Inwiefern macht RAII langsamer? Welche technischen Aspekte bewirken das. Wo sind die Mehr-Anweisungen, die dadurch entstehen? Das kannst Du doch sicherlich herausarbeiten, es ist so wunderbar konkret. Uder die Aussage zurücknehmen.
Klar, falsche Nutzung von Sprachfeatures würde langsam machen. Aber dem halte ich entgegen, daß man zum Greifen nah lauter nette Sachen hat, allem Voran
- schnelle stings (kein strlen dauernd und strcat muß nicht das Ende suchen), CopyOnWrite-Optimierung bei mmachen Compilern sogar SmallString-Optimierung.
- std::map und dadurch oft plattenlastige Eingabe und prozessorlastige Sortierung verschränkt.
- std::queue und damit einen effizienten Universalzwischenspeicher für viele kleine Sachen.
Das müßte dafür sorgen, daß Leute, die die Tendenz haben, Sprachmittel falsch zu verwenden, daß diese Leute auf der C-Seite einfach gute Techniken nicht nutzen können, weil zu weit entfernt.Bestimmte Teile der Standardbibliothek sind langsam. Aber keine dieser Teile benutzt man in grafischen Anwendungen oder in Spielen. Gell? Gib es zu.
Cönner schrieb:
volkard schrieb:
Genau das sage ich über cout und Konsorten.
Ausserdem ist jedes C++ Programm grösser als das in C.
OK. time-space-tradoff. Ich zahle ein wenig Speicherkosten, um ein wenig Geschwindigkeit zu gewinnen.
Cönner schrieb:
Aus reinem Interesse (ich programmiere manchmal auch in C++): Was verwendest du an der Stelle von den Standard-Streams (boost::iostreams kanns ja nicht sein)?
Eine experimentelle Eigenimplementierung. Die kann fast nichts; dafür zahle ich auch fast nichts.
-
mngbd schrieb:
volkard schrieb:
Damit ist gemeint, daß wir jetzt eine sort funktion mit geinlineter vergleichsfunktion (was dann auch pro zu sortierendem datentyp eine eigene funktion erfordert) vs. normaler vergleichsfunktion vergleichen tun, um mal zu schauen, was das Inlinen hier bringen bewirken könnte. Das ist doch auch für C-Leute ein wichtiges Ergebnis.
Zumindest ich wüsste das gerne. Gibt es da verlässliche Vergleichsdaten?
Du könntest die Datenbasis um eine zweite Messung erweitern. Ich hoffe, daß auf moderneren als meinem Prozessor der Unterschied kleiner wird, weil der Prozessorbauer noch mehr Druck in die Performance des Funktionsaufrufs gelegt hat.
-
@volkard: Wenn etwas nach Scheiße schmeckt muss ich das nicht immer bis auf die Molekülebene beweisen. C++ hat sich ja nicht durchgesetzt weil es so eine tolle Sprache ist, sondern weil einige unfähige Leute in der Industrie den damaligen Versprechungen von C++ geglaubt haben. Das C++ letztendlich crap ist brauch wohl nicht mehr bewiesen zu werden und dass das hier in einem C++ auch niemand zugeben würde ist ja wohl auch klar. Eine Verbreitung einer Sache sagt noch lange nichts über dessen Qualität aus.
-
Cönner schrieb:
Dass sort in dieser Geschwindigkeit in C nicht möglich ist, stimmt nicht. Es ist ein bisschen schwieriger, da reicht die Standardbibliothek nicht aus, dafür gibt es unzählige alternative Bibliotheken.
Ja, kann sein. Ich kenne leider keine, weil ich so selten noch C betreibe. Natürlich geht das.
Der C++-Compiler kann mitunter ein identisches Programm etwas schneller machen als der C-Compiler, aber ein Asm/C/C++-Gemisch nenn ich dann nicht mehr C++.
Ich rede gar nicht von Asm drinne. Daß die STL voller Asm wäre, war eine Behauptung von einem C-Troll. Ich bezeichne Dich nicht als C-Troll. C-Trolle sind hier die paar, die völlig ohne Begründung uder zu 100% falsch begründet rumplärren, wie schlecht C++ sei, also Leute wie Didaktiker5. Als ich mit std::sort mal genau vor die Lupe nahm, war keine einzige Zeile Assembler drin.
Cönner schrieb:
Vielleicht geht es mit C++, durch die Exceptions auf einfache Weise das Programm so zu optimieren, wie es in C nur sehr umständlich hinzukriegen ist, aber vermutlich ist mit der Verwendung von Makros mit Assemblercode das gleiche in C mit sehr viel mehr Aufwand möglich.
Das glaube ich nicht. Mit Makros recht einfach kriegt ihr das Inlining im Sort hin. Aber zero cost exceptions, da sehe ich jetzt keinen Angriffspunkt.
Cönner schrieb:
Solche theoretischen Szenarien mit einem maximal ausgereizten C++-Compiler den C-Compiler auszustechen sind mit der Einbindung von Assemblercode wieder hinfällig, rein theoretisch kann man in C++ wie in C reinen Assembler schreiben, es gilt C=C++=Assembler.
Ja, das war bis vorhin auch so. Natürlich ist der Test irrelevant.
Aber dann kotzt Du so eine Scheiße, wie daß C++-Programme immer langsamer seien als C-Programme. Dann laß Dir auch sagen, daß C-Programme erst konkurrenzfähig sind, wenn der Programmierer gut Assembler kann, während die STL bereits bei Halbprofis für eine Geschwindigkeit im Datenmanagement sorgt, die in C kaum ein Vollprofi hinkriegt.
Laß es doch einfach dabei bewenden, daß Du C++ nicht magst. Aber Du mußt das nicht mit Behauptungen untermauern, C++ sei prinzipiell schlecht. Das ist nicht der Fall. Und da fange ich dann auch an, zu widersprechen. Geht ja zum Glück recht einfach, indem ich technische Fakten ausgrabe, statt sozioökonomischen Vermutungen.Cönner schrieb:
Jedes, in der Praxis geschriebene Programm in C++ ist etwas langsamer als ein C-Programm mit der gleichen Funktionalität
Hier. Das ist einfach nicht der Fall.
-
cppschmecktnicht schrieb:
@volkard: Wenn etwas nach Scheiße schmeckt muss ich das nicht immer bis auf die Molekülebene beweisen. C++ hat sich ja nicht durchgesetzt weil es so eine tolle Sprache ist, sondern weil einige unfähige Leute in der Industrie den damaligen Versprechungen von C++ geglaubt haben. Das C++ letztendlich crap ist brauch wohl nicht mehr bewiesen zu werden und dass das hier in einem C++ auch niemand zugeben würde ist ja wohl auch klar. Eine Verbreitung einer Sache sagt noch lange nichts über dessen Qualität aus.
Trotzdem steck der Troll in Scheiße!
-
cppschmecktnicht schrieb:
@volkard: Wenn etwas nach Scheiße schmeckt muss ich das nicht immer bis auf die Molekülebene beweisen.
Du mußt nicht beweisen, daß es *Dir* nicht schmeckt.
Aber wenn Du auftrittst und sagst, daß es allen Menschen nicht schmeckt oder gar schadet, mußt Du es beweisen oder zurücknehmen.
cppschmecktnicht schrieb:
Eine Verbreitung einer Sache sagt noch lange nichts über dessen Qualität aus.
Volkard mag Eigentore.