Warum programmiert ihr in C?
-
Was erwartest du in einem C++ Forum? Sachliche Argumente für C? Bis auf ein zwei halbwegs vernünftige Antworten war der Rest einfach nur billigstes C vs C++ getrolle. Da sind teilweise die Flamewars in den Webdesignforen lesenswerter.
Für ein Forum welches noch eine der beiden Sprachen favorisiert war es echt erbärmlich. Gibt es denn nicht eine einzige Person hier die wirklich Ahnung hat und neutral ist? Wie wir gesehen haben nicht.
Also macht den Thread zu und versucht es vielleicht in einem englischen Forum nochmal. Die Chance mal auf kompetente Leute zu treffen ist dort wesentlich höher.
-
Die meisten kompetenten Leute verbringen ihre Zeit wohl eher mit programmieren als mit solchen Diskussionen. Bevor man das alles durchgelesen hat, hat man auch Java gelernt
-
volkard schrieb:
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 ...
Och nö, echte C++ - Trolle vergleichen die Laufzeit einer (dank Callback-Vergleicher) generische Sortierfunktion wie qsort() mit einer std::sort(), wo der Vergleicher bereits zur Compile-Time (nach Schablone) aufgelöst und folglich auch ge-inlined werden kann (d.h. der Funktionszeiger wird wegoptimiert).
std::sort() hat aber leider auch den Nachteil, dass dem verschwundenen Funktionszeiger dann zur Laufzeit keine alternative Vergleichsfunktion mehr zugewiesen werden kann.
Und wehe, dem Anwender fällt zur Laufzeit ein, dass er ein Feld statt nach Nachnamen beim zweiten Mal nach Wohnorten sortieren möchte, dann stösst man
mit der super-schnellen, aber leider ge-inlineten Vergleichsfunktion() von std::sort() auch sehr schnell an die Grenzen der Generizität.
Mit qsort() nimmt man einfach einen anderen Callback-Vergleicher (der natürlich zwangsläufig langsamer ist als eine inline-Vergleichsfunktion).
Du vergleichst also bei Deinen 'Laufzeit-Messungen' buchstäblich Äpfel mit Birnen, und scheinst es nicht mal zu bemerken.
qsort() ist selbst zur Laufzeit des Programms noch generisch.
std::sort() mit ge-inlineter (wegoptimierter call) Vergleichsfunktion natürlich nicht mehr -
Aber Hauptsache es hat sich ausnahmsweise mal ein C++ Konstrukt als 'schneller' 'erwiesen' ...
Hiermit gebe ich den Troll gerne zurückMFG
@Cönner: Lass Dir nix vormachen, von den 'Experten' hier.
In C sieht man sich zuerst an, was auf einer Maschine überhaupt machbar ist,
was der Rechner gut und was er weniger gut kann usw.,
bevor man damit anfängt, große, abstrakte Pläne & Klassenhierarchien zu schmieden.
In C++ (und OOP allgemein) macht man's genau umgekehrt.--> Welche Vorgangsweise führt wohl eher zu konkreten Ergebnissen?
MFG
-
Didaktiker5 schrieb:
In C sieht man sich zuerst an, was auf einer Maschine überhaupt machbar ist,
was der Rechner gut und was er weniger gut kann usw.,
bevor man damit anfängt, große, abstrakte Pläne & Klassenhierarchien zu schmieden.
In C++ (und OOP allgemein) macht man's genau umgekehrt.Sagt wer? Ja, Shlaer und Mellor natürlich. Glaub denen nicht alles. Es gibt viel mehr Vorgehensweisen, die für bestimmte Projekttypen ihre Berechtigung haben.
-
Ich frag mich wie viele der Cler hier schon an richtig großer Software geschrieben haben mit GUI, Netzwerk, Datenbankanbindung etc. Wird bestimmt sehr übersichtlich der Code mit purem C.
Cler leben halt doch eher in ihrer kleinen Treiber/Hack-Welt, die eher dem Jahr 1980 als 2010 entspricht. In der realen Welt ist es den Kunden scheissegal ob die Anwendung 2% langsamer läuft. Der will einfach schnellstmöglich Ergebnisse, denn SW Entwicklung ist schweineteuer.
Aber ich erwarte nicht, dass das unsere unstudierten Cler verstehen.
-
Mach Dir keine Mühe mehr ... wir wissen das Du es kapiert hast.
Musst nicht Äpfel mit Birnen vergleichen, um dein Territorium zu verteidigen.Und es sagt niemand C++ sei schlecht. Aber wenn man dann das Gefühl bekommt man müsse aus Langeweile oder weis ich was, auf C herumreiten, dann wird man leider gesteinigt von den C -ler.
Hatte vorhin mit einem Freund / Programmierer aus den USA ein Gespräch. Er erzählte mir das C++ eine immer schlechtere Wahl werde (da wird schon mal Python bevorzugt).
Und zwar aus dem Grund weil heute niemand mehr richtig C++ lernen will oder kann, da in der heutigen Zeit in der die Leute immer fauler werden, vieles vergessen oder einfach viel zu viel Zeit gebraucht um sich überhaupt in der Sprache zurechtzufinden. Deshalb spricht für mich so vieles für C. Es ist zwar schlank aber ein bisschen schwer zu erlernen für den Anfänger, doch man versinkt nicht darin. Und mann kann sich mit den eigentlichen Problemen befassen, und lernt noch was dabei. Wer einmal C begriffen hat, und mit der Zeit viele erfahrungen gesammelt hat wird den schlankeren, portableren , und performanteren Code schreiben.
-
realistee schrieb:
Ich frag mich wie viele der Cler hier schon an richtig großer Software geschrieben haben mit GUI, Netzwerk, Datenbankanbindung etc. Wird bestimmt sehr übersichtlich der Code mit purem C.
Du musst es dir übersichtlich machen! Dies ist kein Argument.
-
-lowbyte- schrieb:
realistee schrieb:
Ich frag mich wie viele der Cler hier schon an richtig großer Software geschrieben haben mit GUI, Netzwerk, Datenbankanbindung etc. Wird bestimmt sehr übersichtlich der Code mit purem C.
Du musst es dir übersichtlich machen! Dies ist kein Argument.
Eines der Design Ziele von C++ war es, größere Softwareprojekte besser handhaben zu können. 3mal darfst du raten wieso es die Notwendigkeit gab.
Alle C Apis die ich kenne sind ein Graus (einfach ein Haufen von globalen Funktionen, überall void*). Bei C++ sind viele APIs zwar auch scheiße, aber immerhin hab ich schon einge schön designte gesehen. So Dinge wie Vererbung und Polymorphie helfen einfach ENORM mit Komplexität fertig zu werden.
-
-lowbyte- schrieb:
@Volkard
Mach Dir keine Mühe mehr ... wir wissen das Du es kapiert hast.
Musst nicht Äpfel mit Birnen vergleichen, um dein Territorium zu verteidigen.Ich werde weiter gelegentlich widersprechen, wenn eindeutige Lügen verbreitet werden, mit dem Ziel, C++ schlechtzureden.
Zum Beispiel vorhin Didaktiker5s Aussage, in C++ und der OOP allgemein würde ausschließlich ein reines Top-Down-Vorgehen benutzt werden, natürlich mit der Implikation, daß dabei Entwürfe passieren, die nicht der Implemetierungssprache und der Hardware Rechnung tragen und bestenfalls als suboptimal bezeichnet werden können.
Einfach falsch. Also widerspreche ich. Darf ich das nicht?-lowbyte- schrieb:
Und es sagt niemand C++ sei schlecht. Aber wenn man dann das Gefühl bekommt man müsse aus Langeweile oder weis ich was, auf C herumreiten, dann wird man leider gesteinigt von den C -ler.
Schau mal, wieviel hier grundlos auf C++ herumgeritten wurde und wird. Seid froh, daß ich Euch ein wenig aus Eurer Fantasiewelt heraushole.
-lowbyte- schrieb:
...Amerika...Und zwar aus dem Grund weil heute niemand mehr richtig C++ lernen will oder kann, da in der heutigen Zeit in der die Leute immer fauler werden,
Und ich kenne jemanden, der sagt, in seinem Unternehmen wird immer weniger C eingesetzt. Haha.
Also Du kommst jetzt auch von den technischen Argumenten gegen C++ ab, (die allesamt falsch waren), und wechselst um zu sozialen Phänomenen. Das ist OK.
-
Nun irgendwie traurig, dass hier soviele Scheinargumenten reinkommen
@Volkard
Btw die C Version läuft bei mir stabil immer schneller als C++ Variante.VS 2010 Release /O2 (Max Speed)
c:8,16s
cpp(Funktionszeiger):8,26s
cpp:4,5s
-
-lowbyte- schrieb:
Und zwar aus dem Grund weil heute niemand mehr richtig C++ lernen will oder kann, da in der heutigen Zeit in der die Leute immer fauler werden, vieles vergessen oder einfach viel zu viel Zeit gebraucht um sich überhaupt in der Sprache zurechtzufinden. Deshalb spricht für mich so vieles für C. Es ist zwar schlank aber ein bisschen schwer zu erlernen für den Anfänger, doch man versinkt nicht darin. Und mann kann sich mit den eigentlichen Problemen befassen, und lernt noch was dabei. Wer einmal C begriffen hat, und mit der Zeit viele erfahrungen gesammelt hat wird den schlankeren, portableren , und performanteren Code schreiben.
Also ganz ehrlich: wenn die Person schon zu dumm/faul fuer C++ ist, wuerde ich sie auf keinen Fall an C ran lassen. In C muss man viel mehr aufpassen was man tut - da sind kleine Fehler oft tragisch.
Python ist da eine viel viel bessere Wahl. Sich mit Python in den Fuss zu schiessen ist schwer. Bei C passiert das jeden mal.
@Zeus:
Du sollst auch nicht die Funktionszeiger Variante nehmen sondern die Funktionsobjekt Variante. Und du sollst sie nicht C++ variante nennen
-
Super. Geilen wir uns jetzt an realitsfremden Minibeispielen auf, welches unter welchen Compilerflags und HW und BS um ein paar Millisekunden schneller ist?
Was für ein Witzthread.
-
Zeus schrieb:
@Volkard
Btw die C Version läuft bei mir stabil immer schneller als C++ Variante.
VS 2010 Release /O2 (Max Speed)
c:8,16s
cpp(Funktionszeiger):8,26sJa, daß qsort bei mir langsamer war, hat mich auch überrascht. Immerhin kann der int pro Aufruf mehr Information liefern.
-
@volkard: Lässt du gelten, dass es viel schwieriger ist, etwas gescheit in C++ zu implementieren als in C? Laut dir existiert ja beispielsweise keine zufriedenstellende Lösung für grundlegende Fähigkeiten wie streams.
Die OOP-Argumente von C-lern kann ich nicht nachvollziehen, dank der Glib kann man in C genauso objektorientiert programmieren wie unter C++, hat nur mehr Kontrolle. Ausserdem sind Ereignisse einfacher handzuhaben.
Mit den GString ist ein guter string vorhanden und richtig zeitkritische Abschnitte lassen sich ohne grossen Stilbruch einfügen. In C++ habe ich den Stress, dass alles in RAII gewrappt werden muss.realistee schrieb:
Ich frag mich wie viele der Cler hier schon an richtig großer Software geschrieben haben
Bezüglich in C geschriebene Software muss sich C++ hinten anstellen, Microsoft-Software (Windows XX, Word), Firefox und KDE sind alle nicht besonders performant, bei Linux, Emacs, mutt und GNOME sieht das alles gleich besser aus. Klar, diese Produkte sind weniger "aufs Äussere bedacht", sie haben halt die Philosophie von C übernommen. Aber das sind keine objektiven Argumente gegen C++.
Meine Meinung zusammengefasst: Wenn man in C++ C-artig programmiert, sind beide Sprachen etwa gleich schnell, sobald templates verwendet werden ist das C++-Programm grösser und wenn eine echte Klassenhierarchie aufgestellt wird (streams) kann man den Geschwindigkeitsunterschied zugunsten von C leicht messen. In C habe ich den Blick aufs Wesentliche.
-
Cönner schrieb:
@volkard: Lässt du gelten, dass es viel schwieriger ist, etwas gescheit in C++ zu implementieren als in C?
Nein, ganz bestimmt nicht in dieser Allgemeinheit.
Cönner schrieb:
Laut dir existiert ja beispielsweise keine zufriedenstellende Lösung für grundlegende Fähigkeiten wie streams.
Damals war C++ voll neu, und keiner, auch Stroustrup nicht, wußte wie man in C++ programmieren sollte. Und sie sind anscheinend nicht schlecht genug, daß man sie ersetzt. Soo arg beschleunigen kann man streams nämlich gar nicht. Damals gab es keine Templates und keine Exceptions!
Cönner schrieb:
Meine Meinung zusammengefasst: Wenn man in C++ C-artig programmiert, sind beide Sprachen etwa gleich schnell, sobald templates verwendet werden ist das C++-Programm grösser und wenn eine echte Klassenhierarchie aufgestellt wird (streams) kann man den Geschwindigkeitsunterschied zugunsten von C leicht messen. In C habe ich den Blick aufs Wesentliche.
Meine Meinung klingt ähnlich: Wenn man in C++ sorgsam performance-orientiert programmiert (wozu es nötig ist, auch ein wenig in C zu Hause zu sein), muß man keinen Takt mehr zahlen als mit C. Auch nicht bei Verwendung komplexer Objektorientierung. Theoretisch sogar ein paar weniger, aber das wird nicht messbar sein.
Man kann aber auch leicht dem Arbeitgeber oder Kunden nachgeben und mit recht wenig Mühe Sachen hinhudeln, die sind dann schneller fertiggestellt, laufen aber ein wenig langsamer. Kann man das auch in C? Falls ja, sind wir doch eigentlich quitt.
-
Cönner schrieb:
Bezüglich in C geschriebene Software muss sich C++ hinten anstellen, Microsoft-Software (Windows XX, Word), Firefox und KDE sind alle nicht besonders performant, bei Linux, Emacs, mutt und GNOME sieht das alles gleich besser aus. ... Aber das sind keine objektiven Argumente gegen C++.
Trotzdem möchte ich kurz darauf eingehen, weil andere Teilnehmer das in wütenden Beweisführungen vortragen.
Nur mal so eine Idee:Es gibt Leute, die schlichte Eleganz mögen. Leute, für die Einfachheit was tolles ist. Leute, die davon überzeugt sind, daß man für ein schnelles Auto zuerst mal auf den elektisch einfahrbaren Kofferraumgriff verzichten sollte, satt hinten einen Spoiler dranzuschrauben. So Leute mag ich. Die gehen eher zu Gnome als zu KDE, eher zu Linux als zu Windows. Ich nenne sie im Folgenden mal KISS-Leute.
Vor 20 Jahren war C++ technisch langsamer als C. Man hat für den (damals) Luxus der Objektorientierung bezahlen müssen.
Die KISS-Leute gingen nicht nur mehr zu Gnome, sondern auch mehr zu C. Logisch.
Jetzt ist C++ technisch nicht mehr langsamer.
sprungmarke:
Die KISS-Leute sind aber noch mehr bei Gnome und C zu finden. DADURCH sind C-Programme oft bescheidener und schneller.
Und jetzt kommt die sich selbsterfüllende Phophezeihung: http://de.wikipedia.org/wiki/Selbsterfüllende_Prophezeiung
Wenn ich ein neuer KISS-Leut bin, schaue ich mir KDE/C++ an und Gnome/C und stelle fest, daß mir Gnome/C mehr gefällt.
Wenn ich ein neuer Bloat-Leut bin, schaue ich mir KDE/C++ an und Gnome/C und stelle fest, daß mir KDE/C++ mehr gefällt.goto sprungmarke;
---
Kleine Anektode am Rande. Hier war mal einer, der hat ein Virenschutzprogramm für Win mitentwickelt und beworben. Ich wünste mir entschieden ein Kommandozeileninterface, damit ich nach Gusto den Prüfer durchlaufen lassen kann. Auch in den Windows-Taskplaner reintun. Nix da! Geschäftsleitung erlaubt sowas nicht. Stattdessen wird ein eigener Taskplaner gebastelt und mitgeliefert, der natürlich dann mitlaufen muß und wieder ein wenig Rechenzeit und RAM klaut.
Jeder Virenscanner oder Defragmentierer, den man für Windows kaufen kann, hat so einen Taskplaner dabei. Es wird aus Prinzip nicht der eingebaute verwendet. Seltsam das. Und unangenehm.Oder jüngst erlebt. Ich benutze im Moment ein gentoo-Linux auf USB-Stick. Bin ein wenig am rumfummeln. Da gibt es einen recht simplen Texteditor namens Mousepad. Ich war an sich glücklich damit. Bis ich ihn mal als root ausgeführt hatte. Da wird das Textfenster um eine Zeile verkleinert und oben schiebt sich eine feste rot hinterlegte Zeile ein "Warning, you are using the root account, you may harm your system."
Was soll der Quatsch?
-
realistee schrieb:
Ich frag mich wie viele der Cler hier schon an richtig großer Software geschrieben haben mit GUI, Netzwerk, Datenbankanbindung etc. Wird bestimmt sehr übersichtlich der Code mit purem C.
Cler leben halt doch eher in ihrer kleinen Treiber/Hack-Welt, die eher dem Jahr 1980 als 2010 entspricht. In der realen Welt ist es den Kunden scheissegal ob die Anwendung 2% langsamer läuft. Der will einfach schnellstmöglich Ergebnisse, denn SW Entwicklung ist schweineteuer.
Aber ich erwarte nicht, dass das unsere unstudierten Cler verstehen.
also zugegeben hab ich noch nie eine richtig große software erstellt. aber wer hat das schon? übersichtlichkeit kommt durch schnittstellen. ob ich meine funktionen jetzt mit
my_class::abc()
oder über
my_class_abc()
aufrufe macht keinen großen unterschied... einzig die übergabe des für oop notwendigen parameter könnte man als argument anführen. was übersichtlich ist und was nicht hängt vom entwickler ab. hingerotztes c++ ist genau so unleserlich wie schlampiges c. wenn man sich aber ein bischen mühe gibt, kann man in beiden saubere/leserliche/wartbare software schreiben.
-
evtl. sollte ich noch anmerken, dass die größten bisher geschriebenen software pakete in c daher kommen?
-
Ich denke der Grund warum es mehr C-Programmierer gibt als die die C++ können liegt darin begründet dass C++ zu den am schwersten zu lernenden Sprachen gehört. Wenn man es denn sehr gut kann ist es extrem schnell und auch meist ein Allzweckwerkzeug, aber das können eben nicht vielen und haben auch irgendwann keine Lust mehr so weit zu gehen da es heutzutage mehr als genug Alternativen gibt.
Oft wird sogar nur noch extrem zeitkritische oder systemnahe Geschichten in C oder C++ als Lib geschrieben und der Rest eben in OOP Hochsprachen die schnell zu lernen sind und viele Fehler von vornerein gar nicht erst zu lassen.
Ich denke daran wird sich auch nichts mehr ändern schließlich dreht sich die Welt immer schneller und schon gutes OOP zu lernen dauert seine Zeit und irgendwann will man neben der ganzen zu lernenden Informatik hinter allem auch mal anfangen zu arbeiten. Eine Sprache die dann noch mal viel Zeit abverlangt hat du heute keine große Chance mehr und wird nur noch genutzt weil einige Entwickler nichts anderes können oder man alten Code weiterverwenden muss.
-
Ich programmiere lieber in C++, denn es bietet mir Funktionalitäten, die mir C nicht bietet, z.B.:
- Operatorenüberladung
- Vererbung
- Konstruktoren und Destruktoren ermöglichen automatische Initialisierung bzw. Freigabe von Speicher. Auf sowas muss ich in C extra achten.
- Daten und Zugriffsfunktionen sind in einen Objekt zusammengefasst
- Exceptions, die eine einfachere Fehlerbehandlung ermöglichen.C++ ist ebenso wie C maschinennah und damit sehr schnell, schliesslich ist C++ ja auch mal aus C enstanden. Und: Auch in C++ kann optimiert programmiert werden.
Das ist meine Antwort auf die ursprüngliche Frage.