Warum wird C mehr benutzt als C++?
-
Warum versteift ihr euch so darauf, daß C++ nur eine OOP-Erweiterung ist.
C++ ist eine Multi-Paradigmen-Programmiersprache, d.h. es unterstützt u.a OOP (mittels Klassen, Polymorphie, etc.), Funktionale Programmierung (besonders in C++0x), Wiederverwendbarkeit (z.B. mittels templates), Streaming und diverse andere Methoden.
Eine der gängigsten C++-Mittel, nämlich die Operatorüberladung von '>>' und '<<' hat nichts mit OOP zu tun.Und gute C++-Programme lassen sich erst dann schreiben, wenn man je nach Aufgabenstellung die richtige Methode verwendet (daran scheitern generell viele Programmierer, egal welche Programmiersprache sie verwenden !!!).
Ich bin jedenfalls froh, daß ich bei C nicht hängengeblieben bin, sondern auch andere Programmierparadigmen kennengelernt habe (damit meine ich jetzt auch andere Sprachen als C++, insbesondere die Funktionalen PS, wie z.B. Miranda und Gofer - die heute bekannteste Sprache ist wohl Haskell).
Ein Ziel bei meiner ganzen Programmierung war und ist jedenfalls die Reduzierung von (unnötigem) Programmcode, und da habe ich mich oft über C geärgert.
Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.In neu codiertem C++ wäre dieses Programm sicherlich auch kürzer (da es die vorhandenen Typen aus der STL verwenden könnte) und man den Hauptcode auf die Umsetzung der Algorithmen beschränken könnte.
Mir wäre es auch lieber, wenn nur die Profis mit C++ programmieren würden und nicht immer wieder versucht wird C-Code mit einem C++ Compiler zum Laufen zu bringen -)
-
Was ist dieses "alles möglich"?
Mit "alles" möglich bezog ich mich auf die Möglichkeit sowohl prozedural, objektorientiert und oder auch generetisch programmieren zu können, das deckt für mich schon ziemlich viel von dem ab was eine imperative Programmiersprache können muss.
Mir ist allerdings auch noch keine Programmiersprache unter die Finger gekommen, bei der man so viel "falsch" machen kann, vom Programmdesign mal abgesehen, wie bei C++.
Ich denke das Objective-C, durch z.B. IPhone-Apps, einiges an Zulauf für sich verzeichen wird und bin mal auf die Entwicklung gespannt. Vielleicht ist das ja wirklich mal eine würdige OOP-Erweiterung für C.
-
Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.
Ich denke es lässt sich nicht pauschal sagen ob mit anderen Programierpradigmen weniger oder auch leichter zu versteheneder Quellcode entsteht.
Wenn Jemand alle Datenstrukturen und Algorithmen selbst implementiert anstatt auf bewährte Bibliotheken zurückzugreifen kann man das nicht C im allgemeinen in die Schuhe schieben. Dadurch das C so schlank gehalten wurde ist es relativ einfach zu lernen und auch auf fast jeder Plattform verfügbar und somit auch immer noch populär. Das es nicht sinnvoll ist alles in C zu machen versteht sich von selbst, unsere Welt besteht ja auch nicht nur aus guter Handarbeit
-
_jsb schrieb:
Ich denke das Objective-C, durch z.B. IPhone-Apps, einiges an Zulauf für sich verzeichen wird und bin mal auf die Entwicklung gespannt. Vielleicht ist das ja wirklich mal eine würdige OOP-Erweiterung für C.
Yep, hat mir gefallen, was ich da gesehen habe und gibt's auch als Objective Pascal. Man hat nicht versucht, OOP in eine C-like- Syntax zu pressen, sondern ganz klar einen Extender drangebaut. Einzig ärgerlich, daß ich nichts für meine Controller gefunden habe.
_jsb schrieb:
... Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). ...
Ich denke es lässt sich nicht pauschal sagen ob mit anderen Programierpradigmen weniger oder auch leichter zu versteheneder Quellcode entsteht ... Dadurch das C so schlank gehalten wurde ist es relativ einfach zu lernen und auch auf fast jeder Plattform verfügbar und somit auch immer noch populär. Das es nicht sinnvoll ist alles in C zu machen ...
Wenn das Konzept blöd ist, hilft keine Programmiersprache oder Paradigma. Vielleicht war auch einfach keine Zeit oder Geld mehr für's Refactoring drin.
Wenn man's richtig anfängt, kriegt man auch eine GUI in Assembler hin (sh. GEOS) - ich wür's mir nicht antun.
Was bei dem obig zitierten Fallbeispiel los war, ist leicht zu erklären: Die haben eine firmeneigene Vektorbibliothek zugelinkt, ohne zu beachten, daß nur orthogonale Berechnungen stattfinden werden, was dazu führt, daß weitgehend mit 0ern gefüllte Matrizen mulipliziert werden, während ich nur mit den interessanten Vektorkomponenten hantiert habe. Daß mein Code "nur" zehnmal so schnell ist, schulde ich dem Umstand, daß ich portabilitätshalber nicht RAM- basierend arbeiten wollte, sondern Filebasierend.
Es gibt keinen Maßanzug von der Stange, die Code- Wiederverwerterei führt oft zu grotesken Ergebnissen. Daß durch Konzepte wie die STL dies dem C++- Programmierer näher liegt mag durchaus zu schlechten Ergebnissen und Ruf der Sprache beitragen, ist aber sicher auch in C möglich.
Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.Ja, so lieben wir unsere C++ Profis, die gelebte Reklame für die Features einer Sprache. Aber eigentlich werden Trolle hier eher gekickt ... oder?
-
pointercrash() schrieb:
Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.Ja, so lieben wir unsere C++ Profis, die gelebte Reklame für die Features einer Sprache. Aber eigentlich werden Trolle hier eher gekickt ... oder?
Zerst generalisiert hat die C++-Bashing-Fraktion, die allen C++-Programmierern unterstellt, nur Mist und lahme Programme zu bauen, oder? Und daß fricky nach Kosenamen bettelt, da bin ich einfach zu weichherzig und gebe ihm gelegentlich welche.
Außerdem steige ich immer erst ein, nachdem irgendwelche Banausen völlig unhaltbare Gerüchte über C++ verbreiten, und eine an sich feine Sprache schlechtreden, ohne davon Ahnung zu haben.
-
pointercrash() schrieb:
Daß durch Konzepte wie die STL dies dem C++- Programmierer näher liegt mag durchaus zu schlechten Ergebnissen und Ruf der Sprache beitragen, ist aber sicher auch in C möglich.
Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.
-
pointercrash() schrieb:
Es gibt keinen Maßanzug von der Stange, die Code- Wiederverwerterei führt oft zu grotesken Ergebnissen.
In C nennt sich das "Plattformunabhängerei".
-
Th69 schrieb:
Ein Ziel bei meiner ganzen Programmierung war und ist jedenfalls die Reduzierung von (unnötigem) Programmcode, und da habe ich mich oft über C geärgert.
Als Beispiel sei mal meine Diplomarbeit genannt, wo ich bestehendes Programm (in C) zu einer funktionalen Programmiersprache umgesetzt hatte. Das Original C-Programm hatte ca. 5700 Zeilen (147 KB) und meines dann nur noch 1600 Zeilen (51 KB). Allein das Hauptprogramm des C-Codes bestand aus ca. 1000 Zeilen mit drei ineinander verschachtelten Schleifen sowie diversen selbst entwickelten Strukturen für Listen, Bäume, Hash-Maps etc.warum eigentlich? für allerwelts-datenstrukturen wie listen usw. gibt auch für C genügend fertige und getestete implementationen. C wird zu unrecht vorgeworfen, dass man jedesmal 'das rad neu erfinden' muss.
pointercrash() schrieb:
Ganz sicher zum schlechten Ruf beitragen werden Mods wie Volkard, die sich in nicht-C++ - Foren aufführen wie die offene Hose:
Mal eine Provokation nach dem Muster "arrogante Nullmeldung" abdrücken, embedded- Proggern Arroganz und Inkompetenz unterstellen und mangels Argumenten Beleidigungen wie "Idiot" hinterherwerfen ... also, ich weiß nicht.naja, es ist nun mal nicht leicht, mitzukriegen, wie etwas, in das man viel zeit und kraft investiert und dem man eine grosse zukunft vorhergesagt hat, so langsam den bach runtergeht und immer mehr an akzeptanz verliert. wenn dann noch welche darauf rumhacken, passieren schon mal, vor lauter frust, ein paar aussetzer und man pfeift auf jede sachlichkeit. so'n verhalten ist sogar ziemlich normal und menschlich.
-
Mich nervt nur Dein Einsatz überall, hunderte von threads entführst Du mit deinem C++-Bashing. Du hast auch mit C viel mehr Gründe, traurig zu sein, weil die Sprache ein mickriges Schattendasein führt. Anscheinend bist Du auch sehr wütend und mußt immer auf den armen großen Bruder einschlagen.
-
volkard schrieb:
Mich nervt nur Dein Einsatz überall, hunderte von threads entführst Du mit deinem C++-Bashing.
nö, das liegt eher an diesen c++ 'viral advertising' aktivisten, die c++-freie threads mit sätzen wie: nimm doch c++, c++ ist besser als ...,c++ ist ja so toll weil..., usw. attackieren. dass ich sowas nicht unkommentiert stehen lassen kann, ist doch kein wunder.
volkard schrieb:
Du hast auch mit C viel mehr Gründe, traurig zu sein, weil die Sprache ein mickriges Schattendasein führt. Anscheinend bist Du auch sehr wütend und mußt immer auf den armen großen Bruder einschlagen.
als pc-only coder kommts dir vielleicht so vor, als würde C ein schattendasein fristen, aber dem ist nicht so. und nö, ich verwende zwar C, finde es an sich auch eine gelungene sprache, aber wenn ab morgen sämtliche entwicklungskits statt C turbo-pascal (oder wass-weiss-ich) als grundlage hätten, dann wär mir das auch egal. jedenfalls: grosser und kleiner bruder leben in verschiedenen welten. von daher gibt es keinen grund, auf den grossen böse zu sein, weil er dem kleinen sowieso nicht schaden kann. bis jetzt endete fast jeder versuch des grossen, dem kleinen das territorium streitig zu machen, in einer schmählichen niederlage.
-
@volkard: Wenn man nicht wüsste dass du hier moderierst würden Viele sich glatt diverse Synonyme für Inkompetenz Fachrichtung "übern Tellerrand schauen" für dich ausdenken. C und ein Schattendasein tztztz...
Ich persönlich habe auch schon versucht mich mit C++ anzufreunden aber finde es einfach nur hässlich und unötig kompliziert. Es reicht schon wenn Informatik eine Wissenschaft ist, da muss es nich auch noch die Programmiersprachen sein. Für mich ist das Lernen von C++ reine Resourcenveraschwendung, brauchen tut es keiner da gibt es viele Werkzeuge die schneller zum Ziel führen wenn man unbedingt OOP etc braucht.
-
@volkard: Wenn man nicht wüsste dass du hier moderierst würden
Hier? Nein, soweit ist es noch nicht.
-
Das ist Alterssturheit bei volkard. Der ist mit C++ verheiratet und findet alle anderen hässlich.
-
onmyshoulder schrieb:
Das ist Alterssturheit bei volkard. Der ist mit C++ verheiratet und findet alle anderen hässlich.
Du verkennst die Lage. Meistens sorgt Alterssturheit dafür, daß Leute, die 10 oder mehr Jahr lang C verwendet hatten, nicht mehr dazulernen wollen und C++ nie eingeführt wird. Warum kommt mir jetzt fricky in den Sinn? Innerhalb von C++ bin ich einer, der besonders viele Sachen häßlich findet, aber reines veraltetes C ist in den allermeisten Verwendungszwecken definitiv häßlicher.
Das bringt mich aber gar nicht dazu, immer, wenn jemand was in C machen will, rumzublöken, daß C kacke sein. Gelegentlich helfe ich auch im C-Forum. Die Streit-Initiative geht stats von anderen aus, die rumblöken, daß C++ kacke sei. Nehmen wir mal diesen "Java oder .NET"-Thread. Jemand schlägt vor, Qt (und damit C++) zu nehmen. Und fricky hat nichts besseres zu tun, als erstmal ein Riesenfaß aufzumachen, in dem er tausende von scheinbaren Nachteilen von C++ aufzählt. Wenn er C vorschlagen will, soll er's doch tun. Aber warum immer diese Angriffe?
-
volkard schrieb:
Nehmen wir mal diesen "Java oder .NET"-Thread. Jemand schlägt vor, Qt (und damit C++) zu nehmen. Und fricky hat nichts besseres zu tun, als erstmal ein Riesenfaß aufzumachen, in dem er tausende von scheinbaren Nachteilen von C++ aufzählt. Wenn er C vorschlagen will, soll er's doch tun. Aber warum immer diese Angriffe?
in einem thread, in dem es um Java v. .NET geht, ist C genauso unangebracht wie C++. ich käme nie im leben auf die idee, dort vorzuschlagen, man solle C nehmen. sowas wäre ziemlich absurd (ausser einer hätte nach 'ner JNI-erweiterung gefragt). dass fass haben diese 'c++ ist besser trolle' aufgemacht. mein fehler war allerdings, darauf einzugehen. das war überflüssig, denn wer Java oder .NET verwendet, würde sich sicherlich, auch ohne mein zutun, nicht in die C++-steinzeit beamen lassen.
-
Warum stehst du nicht einfach drüber und reagierst nicht darauf? Dafür wäre mir die Zeit zu schade, um ehrlich zu sein.
-
;fricky schrieb:
dass fass haben diese 'c++ ist besser trolle' aufgemacht.
Vorher hat jemand BASIC vorgeschlagen und Du bist nicht wie toll drauf losgegangen. Das scheint dafür zu sprechen, daß Du einen speziellen C++-Hass vorträgst. Warum nur?
;fricky schrieb:
mein fehler war allerdings, darauf einzugehen. das war überflüssig, denn wer Java oder .NET verwendet, würde sich sicherlich, auch ohne mein zutun, nicht in die C++-steinzeit beamen lassen.
Es ist generell überflüssig, dieses Faß aufzumachen. Finde Dich damit ab, daß in der PC-Welt es durchaus C++-Anhänger gibt. Übrigens gibt es dieses lustige C++/CLI, das ist beinahe C++ und hat das ganze .NET drin.
-
Solche Fragen hatten wir doch schon öfter von Usern, die immer nur das aller Neueste nutzen wollen.
C wie C++ bieten doch beide die Möglichkeit Quellcode so zu schreiben das er einfacher oder schwieriger nachzuvollziehen ist.
Schwer zu durchschauender Code zeugt vom "Können" des Programmierers?
-
Keins ist besser. Es kommt auf die Phantasie des Programmautors und den Algorythmus
an. Erfahrungen in der gewählten Sprache vorrausgesetzt. Man kann Pfusch mit jeder
Programmiersprache anstellen - am einfachsten geht das mit C++.Für mich brächte C++ keine Vorteile, ich müßte mich da auch monatelang reinwühlen -
die Zeit habe ich nicht. In der Zeit kann ich besser Geld verdienen als eine Sache
mit ungewissem Ausgang einzugehen.Wenn schon OO dann etwas, das weiterentwickelt ist. Der Entwurf ist von 1979 (!),
das als Hype zu bezeichnen ist lächerlich. In 30 (!) Jahren hätte sich das entwickeln
können. So ist das eine Schutthalde die sich in 30 Jahren organsisch entwickelt hat
(so wie der Mock im Abfallkasten. Irgendwann riecht der streng und moddert).
-
_jsb schrieb:
Mal davon abgesehen das OOP nur in ganz wenigen großen Projekten wirklich Sinn macht.
Das musst du mir mal erklaeren. In wieweit ist ein gutes OOP Design nur in "wenigen großen Projekten" sinnvoll und wieso ist es in der Mehrzahl an Projekten nicht angebracht?