Warum programmiert ihr in C?



  • Bei OOP kann man sehr schnell viel falsch machen. Es ist sehr schwierig gute OO-Programmierer zu finden, da OOP wirklich nichts für Anfänger ist. Zumal ist C++ nicht wirklich eine Objektorientierte Programmiersprache jeder der OOP ernsthaft betreibt wird einen weiten Bogen um C++ machen, wenn er denn das kann. Ich schätze mal man braucht gute 2 Jahre um C++ und OOP einigermaßen zu erlernen, das ist vielen einfach zu aufwändig da es noch weit mehr zu lernen gibt als ein Paradigma und eine Programmiersprache.



  • nichtdeinErnstoder schrieb:

    Nun komm mal runter Volkard, du willst doch hier nicht ernsthaft behaupten man brauche immer OOP um mittlere bis größere Programme zu entwickeln.

    Nicht notwendig. Nur ungemein praktisch. Für mich sogar weniger wegen der Übersicht, als für die geordnete Ressourcenverwaltung. Deswegen komme ich mit der OO von Perl supi zurecht, während die von C# mir fast nichts gibt.

    nichtdeinErnstoder schrieb:

    Das ist absoluter Unsinn, sorry. OOP kann helfen kann aber auch genauso sehr hinderlich sein.

    Da muß man einfach schlau sein, und die OOP nicht dort einsetzen, wo sie stört. Wir müssen ja nicht OO-pseudoverpflichtende Sprachen wie Java nehmen.



  • P.S.: Ich würde mir hier wünschen, daß diese Diskusion wieder in sachlichere Bahnen gelenkt wird. Es ist nicht zielführend sich gegenseitig zu beschimpfen und es bringt erst recht nichts, über die Deutschkentnisse mancher Forenteilnehmer herzufallen, wenn einem die Argumente ausgehen.

    Danke Martin - das war der erste sachliche Beitrag in diesen Thread.



  • Ich denke diese Antwort fasst es auch ganz gut zusammen:

    :Why not using C++ for GTK-G ?

    Why using it? 😉

    :I saw you were using such notation '[object]_[method]'. You widly used
    :'[object]_init' or '[object]_close' or '[object]_shutdown' and this
    :looks like objects initialisations and destruction. So why ?

    Yes, this is modularity.

    Actually, the C code of GTKG is a mix of procedural style and OO style.

    I don't like C++. It's not really an OO language. At first sight it
    might appear to be one, but it is not. And it's so easy to write a mess
    in C++ that, brrr... it's not very encouraging.

    (I can develop why I think C++ is not an OO language if you want.)

    Furthermore, it takes better engineers to do OO design properly.
    Trivial OO design is easy, good OO design is hard. It would be harder
    to find good OO programmers than it is to find good C programmers.

    Finally, I don't know how good gcc is as a C++ compiler.

    But yes, I confess re-writing in an OO language would be nice.
    Unfortunately, the only OO language I know of is Eiffel.

    Raphael



  • C++ 30mal langsamer als C bekommt jeder hin der sich nicht sehr gut mit C++ und OOP auskennt. Da kann man in C++ so viel falsch machen und hat schnell ein Programm welches von der Performance an eine Scriptsprache erinnert. Viele Anfänger denken nur weil sie in C++ programmieren ist ihr Programm automatisch schneller als Beispielsweise ein Java-Programm. Es wird aber nur wirklich schneller sein wenn man sich extrem gut in C++ und OOP auskennt und das tuhen die wenigsten.



  • Du sagst also C++ ist eine schlechte Sprache weil so viele Leute nicht damit umgehen können!?



  • Cppungleichimmerschnell schrieb:

    C++ 30mal langsamer als C bekommt jeder hin der sich nicht sehr gut mit C++ und OOP auskennt. Da kann man in C++ so viel falsch machen und hat schnell ein Programm welches von der Performance an eine Scriptsprache erinnert. Viele Anfänger denken nur weil sie in C++ programmieren ist ihr Programm automatisch schneller als Beispielsweise ein Java-Programm. Es wird aber nur wirklich schneller sein wenn man sich extrem gut in C++ und OOP auskennt und das tuhen die wenigsten.

    Falsch. Es ist genau anders herum. In C++ musst du VERDAMMT viel falsch machen, damit das Programm mal langsam wird. Ganz anders als in Java.
    Da soll mir mal einer der C "Experten" ein Beispiel zeigen, in dem C++ Code 30mal langsamer ist als vergleichbarer C Code. Wir wissen alle, dass wir so ein Beispiel nie sehen werden. 🙄



  • OOPnotfornoobs schrieb:

    Bei OOP kann man sehr schnell viel falsch machen. Es ist sehr schwierig gute OO-Programmierer zu finden, da OOP wirklich nichts für Anfänger ist.

    Das ist keine Eigenschaft von OOP. Jeder, der nicht in der Lage ist, seine Datenstrukturen vernünftig zu modelieren, wird mit jeder Sprache scheitern. Andersrum gilt, jeder, der seine Daten vernünftig modelieren kann, wird mit praktisch jeder Sprache erfolgreich sein.

    OOPnotfornoobs schrieb:

    Zumal ist C++ nicht wirklich eine Objektorientierte Programmiersprache jeder der OOP ernsthaft betreibt wird einen weiten Bogen um C++ machen, wenn er denn das kann. Ich schätze mal man braucht gute 2 Jahre um C++ und OOP einigermaßen zu erlernen, das ist vielen einfach zu aufwändig da es noch weit mehr zu lernen gibt als ein Paradigma und eine Programmiersprache.

    Das ist aber meiner Meinung nach der große Vorteil von C++ im Gegensatz zu anderen reinen OOP-Sprachen. Ich kann die Vorteile nutzen, muß aber nicht.

    mfg Martin



  • KennerDerUnfähigen schrieb:

    Da soll mir mal einer der C "Experten" ein Beispiel zeigen, in dem C++ Code 30mal langsamer ist als vergleichbarer C Code. Wir wissen alle, dass wir so ein Beispiel nie sehen werden. 🙄

    Naja, wenn man *kein* C++-Buch oder Tutorial gelesen hat, sondern sich den Code aus Beispielen zusammenschustert, dann könnte man auf die Idee verfallen, Einzelbuchstaben statt un char in std::string zu speichern. Zusammen mit einer netten Schleife, die was triviales macht, zum Beispiel eine ASCII-Tabelle in eine Datei schreibt... Nee, nicht trivial genug. Ausgabe dauert viel zu lange.
    Zum Beispiel zählt, wie oft ein bestimmter Buchstabe vorkommt, nee, wozu da die Zwischenvariable.
    Aber wenn ich mir einen ganzen Tag Zeit nehme, kann ich wohl ein hübsches Beispiel konstruieren, das auf den ersten Blick glaubwürdig aussieht, als würde ein Nube sowas schreiben, und zugleich Faktor 30 packt.
    Vielleicht was mit std::vector als By-Value-Übergabe in rekursiver Permutationen-Funktion? Zu un-noobig. Wer sowas bauen kann, macht den Fehler sicher nicht.
    Das Problem ist faszinierend.



  • Selbst Faktor 2 kann in der Praxis viel ausmachen, bei längeren
    Programmlaufzeiten bzw größeren Datenmengen zB den Unterschied
    zwischen 1 und 2 h "System nicht verfügbar".

    30 halte ich auch für übertrieben ...



  • wenn man in c++ c programmiert sollte es auch gleich schnell/langsam sein, oder?



  • __-- schrieb:

    wenn man in c++ c programmiert sollte es auch gleich schnell/langsam sein, oder?

    Ja, man kann in C++ stets nach C runter und sicher null Mehrkosten haben.
    Vorausgesetzt man hat einen Compiler mit einem vernünftigen Exception-Modell, das einem keine Mehrkosten auferlegt für Code, der mit Exceptions gar nichts zu tun hat. Was ich zum Beispiel (noch?) nicht vestehen kann, ist, daß jemand als erste Zeilen in der main das argv[] erstmal in einen vector<string> kopiert.

    Außerdem hat C++ "zero abstraction overhead". Nur, weil man aus zusammengehörenden Funktionen um eine Struktur eine Klasse bastelt, muß man noch keinen Takt mehr bezahlen.

    Man kann darüberhinaus in Teilen Geschwindigkeiten erreichen, die mit C nur sehr umständlich zu erreichen wären, sort, unordered_map, blitz++. Dadurch basteln Anfänger in C++ natürlich schnelleren Code als vergleichbare Anfänger in C. sort (z.B. Intro-Sort) und map(z.B. AVL-Baum) sind ja so nah!

    Und Compilerbauer können Exceptions so schlau implemetieren, daß sie keine Laufzeitkosten verursachen, solange sie nicht fliegen. Für Exceptions, die sehr selten fliegen (wie es sein soll), oder wo es wegen Programmabbruch oder Benutzerinterkation völlig irrelecant ist, wie lange es im Falle einer Esxception dauert, ist man also schneller als in gleich fehlerrobustem C-Code.
    Das ist ein knallharter Geschwindigkeitsvorteil für C++.

    Nee, das kann nicht sein. Dann wäre ja das Fazit, daß sowohl Anfänger als auch Profis in C++ schnelleren Code basteln. Und daß nur, wer nicht bereit ist, C++ zu lernen, in C schnelleren Code bastelt. Gell, das kann nicht wahr sein, weil es nicht wahr sein darf.



  • Och C++ bekommste als Anfänger ganz schnell langsam. Mit OOP etwas unglücklich designt dann noch Kopiekonstruktoren schlecht implementiert und schon haste einen Overhead vom feinsten. Das ganze dann noch unter Linux wo die C++ Runtime eh schon um einiges langsamer sind als jene von C und evola haste Schneckencode.

    Wir sind zwar hier in einem C++ Forum und man sollte die letzten C++ler die es noch gibt auch nicht verachten aber ein OOP-Fan sein und C++ nutzen ist schon ein wenig pervers. Noch eine allgemeine Kritik hätte ich. Mit eurem Webzeugs wird heute sicherlich viel mehr gemacht als mit dem komischen C++ also benennt das um oder ihr gebt damit zu noch in den 90igern geblieben zu sein.



  • Hugo8723 schrieb:

    Och C++ bekommste als Anfänger ganz schnell langsam. Mit OOP etwas unglücklich designt dann noch Kopiekonstruktoren schlecht implementiert und schon haste einen Overhead vom feinsten. Das ganze dann noch unter Linux wo die C++ Runtime eh schon um einiges langsamer sind als jene von C und evola haste Schneckencode.

    Wir sind zwar hier in einem C++ Forum und man sollte die letzten C++ler die es noch gibt auch nicht verachten aber ein OOP-Fan sein und C++ nutzen ist schon ein wenig pervers. Noch eine allgemeine Kritik hätte ich. Mit eurem Webzeugs wird heute sicherlich viel mehr gemacht als mit dem komischen C++ also benennt das um oder ihr gebt damit zu noch in den 90igern geblieben zu sein.



  • Hugo8723 schrieb:

    Och C++ bekommste als Anfänger ganz schnell langsam. Mit OOP etwas unglücklich designt dann noch Kopiekonstruktoren schlecht implementiert und schon haste einen Overhead vom feinsten.

    Kopierkonstruktoren KANN man nur implementieren, wenn man Referenzen benutzt. Anderenfalls kommt ein Compilerfehler. Folglich kennt man Referenzen. Folglich ruft man diese Kopierkonstruktoren nicht unnötig auf. Folglich ist das von Dir geschilderte Problem inexistent. Oder?
    Bastle doch mal Argumente, die man nachvollziehen kann.



  • volkard schrieb:

    Hugo8723 schrieb:

    Och C++ bekommste als Anfänger ganz schnell langsam. Mit OOP etwas unglücklich designt dann noch Kopiekonstruktoren schlecht implementiert und schon haste einen Overhead vom feinsten.

    Kopierkonstruktoren KANN man nur implementieren, wenn man Referenzen benutzt. Anderenfalls kommt ein Compilerfehler. Folglich kennt man Referenzen. Folglich ruft man diese Kopierkonstruktoren nicht unnötig auf. Folglich ist das von Dir geschilderte Problem inexistent. Oder?
    Bastle doch mal Argumente, die man nachvollziehen kann.

    Wieso fragst du extra nach? Du siehst doch, dass er offenbar ein weiteres C Kind ohne Ahnung von C++ ist (zeigt ja sein nicht mögliches CCtor Beispiel).

    Auffällig: C ler = Unregs, Trolle, Unstudierte
    C++er: Registriert, Sachkenntnis, fast alle studiert

    Mein Bild von C-Fricklern bestätigt sich. Sind halt doch eher ungelernte Typen/Fachinformatiker, die so vor sich hin wursteln in kleinen Betrieben und sich am Ende auch noch haxx0r vorkommen. 😃



  • hehehehe schrieb:

    Auffällig: C ler = Unregs, Trolle, Unstudierte
    C++er: Registriert, Sachkenntnis, fast alle studiert

    zum glück kenn ich ja nichts anderes als c... und muß mich hier von dir blöd anmachen lassen 😡



  • ums nochmal kurz und knapp auf den punkt zu bringen, mir gefällt die syntax nicht. das ganze referenzen geschubse mag ich auch nicht. operator überladung von shift für strings ist eine krankheit. wenn ichs schnell hinschmieren will, nehm ich was anderes. auch wenn c++ 10mal so schnell wär würds mir immer noch nicht gefallen. und selbst wenn ich studieren würde hätt ich trotzdem keinen bedarf in meiner freizeit etwas zu verwenden was mir einfach nicht gefällt. dafür muß es auch gar keine plausiblen gründe geben.



  • Auffällig: C++er: Registriert, Sachkenntnis, fast alle studiert

    Klar, alles BWLer 😃



  • __-- schrieb:

    ums nochmal kurz und knapp auf den punkt zu bringen, mir gefällt die syntax nicht.

    Ok, Deine Meinung.

    __-- schrieb:

    das ganze referenzen geschubse mag ich auch nicht.

    Ich mag auch lieber Zeiger.

    __-- schrieb:

    operator überladung von shift für strings ist eine krankheit.

    Kann sein. Aber es war 20 Jahre lang eine annehmbare Notlösung. Naja, anfangs ohne Templates, da war alles krank.
    Heute würde man es bestimmt mit variadic templates schlauer machen.

    __-- schrieb:

    würds mir immer noch nicht gefallen. und selbst wenn ich studieren würde hätt ich trotzdem keinen bedarf in meiner freizeit etwas zu verwenden was mir einfach nicht gefällt.

    Ok. So wie ich von Java krank werde. Ich nehme einfach keine Java-Jobs an. Muß ich nicht.


Anmelden zum Antworten