PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum wird soviel C genutzt/nicht immer C++?


Marscel
2006-02-27, 18:05:47
Ich hab einfach mal eine Frage, auf die ich momentan keine Antwort finde. Warum werden soviele Programme, die auf handelsüblichen PCs unter Windows, Linux, BSD etc. laufen eigentlich in C geschrieben, nicht in C++?

Vielleicht habe ich irgendwann mal nicht aufgepasst aber ich sehe eigentlich nichts, was für reines C spricht, anstatt C++ ... An mangelnden Compilern kann es ja nicht liegen und an Anarchie auch nicht.

Könnte mich mal jemand aufklären?

Trap
2006-02-27, 18:24:30
Zumindest bei Bibliotheken gibt es einen Grund: C kann man von jeder Programmiersprache aus aufrufen, C++ nicht (ohne größeren Aufwand).

RoKo
2006-02-27, 18:45:56
Ist eigentlich auch nur ein Grund für extern "C".
Ich tippe auf Gewohnheit und Unkenntnis.

Fruli-Tier
2006-02-27, 20:43:10
Zumindest bei Bibliotheken gibt es einen Grund: C kann man von jeder Programmiersprache aus aufrufen, C++ nicht (ohne größeren Aufwand).
Da treibe ich doch lieber ein Quentchen mehr Aufwand, um meine Funktionalität oder gar Klassen ordentlich aus einer Bibliothek(DLL) zu exportieren, spare mir aber einiges an unschöner C-Programmierung ein.

Shink
2006-02-27, 21:30:12
Naja, ich muss z.B. auf embedded Systemen C verwenden, da die C++-Standardlibrary Binaries mit über 500KB produziert.

Hübscher wär natürlich C++.

Gast
2006-02-27, 21:32:57
Ich glaube das liegt daran das noch nicht soviele Leute C++ können.

Marscel
2006-02-27, 21:52:31
Ich glaube das liegt daran das noch nicht soviele Leute C++ können.

Wenn das stimmt, dann wäre ich erstaunt.

Selbst wenn, sich als C-Programmierer C++ anzueignen sollte doch nicht das schwierigste sein...

Das mit den Embedded-Anwendungen war mir bewusst, deshalb schrieb ich ja Heim-PCs, da kommts ja nicht wirklich darauf an, wie groß die Binary ist.

Kabelsalat
2006-02-28, 00:25:07
Das mit den Embedded-Anwendungen war mir bewusst, deshalb schrieb ich ja Heim-PCs, da kommts ja nicht wirklich darauf an, wie groß die Binary ist.

Bei der Entwicklung für Heim-PCs ist aber auch die Verwendung von C++ meistens unnötig. Die Verwendung modernerer Hochssprachen wie Java, den .Net-Sprachen o.ä. hilft viele Fehler zu vermeiden, hält den Code übersichtlicher und kann teilweise sogar performanter sein (Genauso wie man mit C[++] sehr schnellen Code fabrizieren kann, können Fehler und unüberlegter Code auch schnell das Gegenteil bewirken). Auch wenn ein solcher Performance-Vorteil nicht vorhanden ist, überwiegen die Vorteile modernerer Sprachen in - ich behaupte mal - 90% der Fälle - in etwa 80% davon wird man die minimalst niedrigere Performance nicht einmal wahrnehmen.

Trap
2006-02-28, 00:44:59
Ausgerechnet Java als Beispiel für eine moderne Sprache zu nehmen...

Stax
2006-02-28, 01:24:55
... und dann noch von Performance im selben Satz zu reden ^^

ScottManDeath
2006-02-28, 02:32:53
Da treibe ich doch lieber ein Quentchen mehr Aufwand, um meine Funktionalität oder gar Klassen ordentlich aus einer Bibliothek(DLL) zu exportieren, spare mir aber einiges an unschöner C-Programmierung ein.

Problem dabei, es gibt keinen einheitlichen Binärstandard für C++. Versuch mal eine Klasse aus einer Dll, geschrieben in z.B. *grusel* Borland C++ mit Visual Studio zu nutzen, oder andersrum. Ohne neu zu kompilieren wird das nicht gehen.

Für C gibts das schon, den Binärstandard. Man kann sich in C++ drumrummogeln, indem man eine extern "C" Funktion schreibt, die einen Pointer auf ein Interface zurückliefert. Mit diesem kann man dann z.B. per Factory pattern auch C++ Klassen instanziieren

ScottManDeath
2006-02-28, 02:39:43
Bei der Entwicklung für Heim-PCs ist aber auch die Verwendung von C++ meistens unnötig. Die Verwendung modernerer Hochssprachen wie Java, den .Net-Sprachen o.ä. hilft viele Fehler zu vermeiden, hält den Code übersichtlicher und kann teilweise sogar performanter sein (Genauso wie man mit C[++] sehr schnellen Code fabrizieren kann, können Fehler und unüberlegter Code auch schnell das Gegenteil bewirken). Auch wenn ein solcher Performance-Vorteil nicht vorhanden ist, überwiegen die Vorteile modernerer Sprachen in - ich behaupte mal - 90% der Fälle - in etwa 80% davon wird man die minimalst niedrigere Performance nicht einmal wahrnehmen.

Ich löte gerade einen Raytracer in C#*. Bin ca. 8 mal langsamer als C++.
Liegt zum einen am lausigen C# Optimierer (der vom VC++ ist deutlich smarter), zum anderen ist der JITter wohl nicht so freudig auf float Code.

Noch juckts mich nicht, aber ich kann, wenn es eng wird, ja immer noch für kritische Teile C++/CLI bzw. native C++ nehmen. =)

Aber ansonsten, ist man mit einem umfangreichem Framework (.NET, Java, C++ + boost) gut bedient.

* Ich wollte mal sehen, wie sich C# dazu schlägt. Ich passe schon auf, dass ich Value Types und Call by Reference nutze, und den GC möglichst wenig stresse.

Bietchiebatchie
2006-02-28, 04:38:02
Ich löte gerade einen Raytracer in C#*. Bin ca. 8 mal langsamer als C++. ... .
Hey, das interessiert mich jetzt aber, da ich eigentlich komplett andere Erfahrung gemacht habe.
Kurz zur Erklärung: Wir mussten am Anfang von der Grafikvorlesung des vergangenen Semesters einen eigenen Raytracer basteln. Allerdings in C++ und teilweise mit recht brauchbarem Code, teilweise (auch dadurch bedingt, dass er halt eben Woche für Woche erweitert wurde; d.h. da was verändert, da was reingeschoben etc.) sehr unleserlich. Performance war aber letztlich vollkommen egal.
Jetzt hab ich mich vorgestern hingesetzt und einen Teil mal in strukturiertes, wunderschönes C# gepackt und in ein halbwegs brauchbares GUI gesetzt. Das erste Ergebnis war, dass die Performance bei einer extrem simplen Szene(< 10 Dreiecke* ) eigentlich genauso ist, wie unter C++.
Aber wie oben schon erwähnt, ist bei mir Performance eigentlich absolut zweitrangig; ich will mit dem Ding rumspielen und einige Dinge ausprobieren, sonst nix.
Schraubst du an nem Raytracer der später mal in Echtzeit rendern soll?
Wenn ja: Respekt, wieviel MRays/s schaffst du denn schon? ;)
Wenn nicht: wundert mich, dass du einen doch so großen Unterschied merkst, wo bei mir eigentlich keiner ist...

*der kd-Tree is noch nicht drin, daher so eine simple Szene

Damit ich nich vollkommen offtopic bin:
Ich denke, C wird insbesondere noch häufig von Leuten benutzt, die eben ab und an mal was programmieren wollen, Programmieren vor 20 Jahren gelernt haben und halt C benutzen, da sie nix anderes können...
Naja sehr selten vielleicht auch aufgrund den schon oben genannten Gründen. =D

ScottManDeath
2006-02-28, 07:26:49
Naja, ich scher mich eigentlich weniger um Perforcmance, lege mehr Wert auf ein flexibles Design. Das was uns in der Uni an Design vorgeschlagen wird ist eher :|
Ich hatte letze Woche 2 Tage refaktorisiert, dadurch war ich doppel so schnell. Es ist noch Spielraum, aber wenn man jede Woche ne Deadline hat, ist nicht viel Luft zum fixer machen. :( Ist nicht für Echtzeit gedacht, eher meine Spielwiese für mich :)

Als Vergleich: 512x512, 70k Bunny, stupider KdTree (SplitInTheMiddlee) 2 Pointlights, Shadows. Bei mir 4.xxs, bei einem Mitstudenten 0.5s.

Jetzt ist gerade Semestermitte und es sieht so (http://www.cs.utah.edu/~mschott/UoU/classes/cs6620/index.php) aus. Ich bau gerade PerlinNoise und TextureMapping ein, bin so gut wie fertig.

muhkuh_rs
2006-02-28, 09:37:33
Es gibt, wie aus der Diskussion wohl schon hervorgeht, verschiedene Ursachen:

- Programmierer haben keine Erfahrung mit C++ und sehen den Sinn nicht (ja, das gibt es)

- Code size

- binäres Interfacing mit anderen Sprachen schwieriger

- Übersetzungszeiten

- Portierbarkeit von Code (es kommt schnell zu Problemen, wenn man z.B. versucht Code, der stark von Templates Gebrauch macht, auf einem anderen Compiler zu übersetzen)

Es ist einfach für viele Anwendungen sinnvoller, die Teile, die wirklich schnell sein müssen, in C zu schreiben und auszulagern. Unkritische Teile der Anwendung wie z.B. das GUI können dann in "produktiveren" Sprachen wie Python oder C# geschreiben werden und problemlos auf die C-Teile zugreifen.

Oft zieht man auch in den leistungskritischen Programmteilen keine großen Vorteile aus den Möglichkeiten von C++.

Monger
2006-02-28, 09:43:39
Ich bin von der Diskussion hier verwirrt. Ich dachte, praktisch jede Anwendungssoftware unter Windows ist in C++ geschrieben ?!?

Anders wäre das ja auch gar nicht zu packen. Was gibt es denn sonst noch für große Anwendungsgebiete für C unter Windows ?

muhkuh_rs
2006-02-28, 12:25:07
Naja, alles was MFC verwendet, ist in C++ geschrieben. Es gibt aber auch Software, die nur die win32 API verwendet und reines C ist. Dann gibt es noch Anwendungen, die mit mit der VB Runtime laufen, .NET managed in diversen Sprachen, java ...

Coda
2006-02-28, 12:57:34
Ein Programm in C++ schreiben und es wirklich zu beherschen sind auch nochmal zwei sehr unterschiedliche Dinge ;)

Spiele werden aber inzwischen wohl wirklich zum Großteil in C++ geschrieben.

The_Invisible
2006-03-01, 20:21:25
Ich bin von der Diskussion hier verwirrt. Ich dachte, praktisch jede Anwendungssoftware unter Windows ist in C++ geschrieben ?!?

Anders wäre das ja auch gar nicht zu packen. Was gibt es denn sonst noch für große Anwendungsgebiete für C unter Windows ?

mich würde auch interessieren was für ein programm in was für ner sprache geschrieben wurde, ein tool wirds dafür wohl nicht geben ;(

bei opensource software ist es ja kein problem, aber closed source wäre interessant

mfg

Wuzel
2006-03-01, 20:53:02
Geht hauptsächlich um die plattformübergreifende Geschichte, deswegen laufen ja die GNU Tools samt Kernel auf fast allem was ein Microprozessor hat (hab erst vor kurzem ein How To für dieses Nintendo Game Dingens und Linux gesehen :ugly: ). Ein C compilierer ist halt relativ gesehen einfacher und schneller zu realisieren als ein C++ compilierer und braucht zudem weniger Resourcen, C Code lässt sich halt deswegen (fast) überall übersetzen.

Coda
2006-03-01, 21:10:52
Ein vollständiger C++-Compiler ist wirklich ein sehr schwieriges Unterfangen. Bis es halbwegs standardkonforme gab sind mindestens 6 Jahre vergangen X-D

minos5000
2006-03-02, 09:43:26
Ich dachte, praktisch jede Anwendungssoftware unter Windows ist in C++ geschrieben ?!?


Das hab ich auch mal gedacht, bis ich gesehen hab, wieviel Software unter VB entwickelt wird :hammer:

Fruli-Tier
2006-03-02, 09:59:43
Problem dabei, es gibt keinen einheitlichen Binärstandard für C++. Versuch mal eine Klasse aus einer Dll, geschrieben in z.B. *grusel* Borland C++ mit Visual Studio zu nutzen, oder andersrum. Ohne neu zu kompilieren wird das nicht gehen.
Immer diese berechtigten negativen Aussagen gegenüber Borland C Produkten :biggrin:
Wobei ich mir dieses Szenario eigentlich nicht vorstellen kann. Wenn eine DLL ihre Funktionen ordentlich exportiert, dann muss das gehen. Oder meinst Du jetzt die *.lib Dateien?


Für C gibts das schon, den Binärstandard. Man kann sich in C++ drumrummogeln, indem man eine extern "C" Funktion schreibt, die einen Pointer auf ein Interface zurückliefert. Mit diesem kann man dann z.B. per Factory pattern auch C++ Klassen instanziieren
Genau das meine ich, mit ein wenig mehr Aufwand.