Warum hat C++ so eine aufwendige Syntax?



  • CStoll schrieb:

    Vielleicht solltest du auch darauf achten, welche Seite hier den Begriff "C/C++" verwendet. (zumindest ich kann gut zwischen beidem unterscheiden)

    du warst auch nicht gemeint. ich glaube auch nicht, dass du C/C++ in einem wort nennen würdest, denn was man von dir liest, deutet darauf hin, dass du in beiden sprachen sehr kompetent bist und die unterschiede sehr wohl kennst.

    Mr. N schrieb:

    Undertaker schrieb:

    hier mal was zu C++ auf µC's: http://www.mikrocontroller.net/articles/C_vs_C-Plusplus
    (um von Java abzulenken) 😉

    Compiliert ihr Embedded-Leute wirklich ohne Optimierung? 😮

    unsere compiler optimieren so gut, davon könnt ihr C++ weicheier nur träumen. 😉
    und wenn's der compiler mal nicht bringt, wird eben nachgeholfen.
    🙂



  • Undertaker schrieb:

    Mr. N schrieb:

    Undertaker schrieb:

    hier mal was zu C++ auf µC's: http://www.mikrocontroller.net/articles/C_vs_C-Plusplus
    (um von Java abzulenken) 😉

    Compiliert ihr Embedded-Leute wirklich ohne Optimierung? 😮

    unsere compiler optimieren so gut, davon könnt ihr C++ weicheier nur träumen. 😉

    Die üblichen C++-Optimierer sind sehr gut, aber danke der Nachfrage. 🙂

    (Ansonsten gibts ja das LLVM-Projekt, das neben einer Virtual Machine auch diverse Neuerungen im Optimierungsbereich bringt und ein C++-Frontend - das vom GCC - hat.)

    Undertaker schrieb:

    und wenn's der compiler mal nicht bringt, wird eben nachgeholfen.
    🙂

    Das macht man im heterogenen PC-Umfeld halt doch lieber nicht.



  • ich frag mich grad, ob der vergleich zwischen c++ und c überhaupt angemessen ist, immerhin compiliert der comeau afaik nach C, weshalb man fast jedes C agument auch auf C++ übertragen kann 😉

    oder anders ausgedrückt:

    "C ist schneller als C++"
    "aber der Comeau spuckt denselben C code aus"
    :p



  • otze schrieb:

    "C ist schneller als C++"
    "aber der Comeau spuckt denselben C code aus"
    :p

    Nur weil irgend nen Compiler C++ nach C transformiert, heißt das nicht, dass C und C++ gleich schnell. In der Tat kann (!) man Programme schreiben, die in C auch nicht schneller werden. In der Praxis werden C++ Programme jedoch etwas langsamer sein als vergleichbare C Programme, da man doch einige der Komfortfunktionen (Stichwort Indirektion bei Operatoren etc.) nutzt. Der Vorteil bei C++ liegt eher in der (einigermaßen) komfortablen Umsetzbarkeit von OOP und Möglichkeiten größere Projekte wartungsfreundlicher zu gestalten (Namespaces etc.). In Sachen Entwicklungs-Effizienz kommt es (leider) nicht wirklich an neuere Sprachen/Plattformen ran (was ja auch nicht weiter verwunderlich ist).



  • dsfdfg schrieb:

    Das ist es ja, was ich meine. Nehmen wir mal an, dass ein entsprechender Standard in diesem Bereich fehlt, dann kann man als Firma beim JCP einen Request einreichen und sich an der Standardisierung beteiligen.

    Kannst du auch in C++ machen. Meinst du, man kann nur Java-Libs standardisieren? Meinst du nicht, das es im C++-Bereich ähnlich läuft? Jemand entwickelt eine Library, sie wird in der Community akzeptiert, reicht sie darauf hin beim C++-komitee ein... und schwupps könnte sie im nächsten TR und somit nächsten C++-Standard drin sein, wenn die Mehrheit des Komitees diesen Proposal (entspricht deinem Request) zustimmt.

    Du erzählst der C++-Community nicht wirklich neues und spannendes. 🙄



  • Mr. N schrieb:

    Undertaker schrieb:

    und wenn's der compiler mal nicht bringt, wird eben nachgeholfen.
    🙂

    Das macht man im heterogenen PC-Umfeld halt doch lieber nicht.

    na, was glaubst du, was da für haarsträubende sachen gebastelt werden 😉

    otze schrieb:

    ich frag mich grad, ob der vergleich zwischen c++ und c überhaupt angemessen ist,

    ja, das ist nicht einfach. die meisten glauben ja, dass C++ einfach nur 'das besserere C' wäre, aber dem ist nicht so.
    C verfolgt dieses, aus der unix-welt (und da kommt es ja auch her) bekannte 'keep-it-small-and-simple' prinzip. d.h. C ist klar strukturiert und überschaubar (wenn man mal von der syntax absieht, die einsteigern ganz schön kopfzerbrechen bereiten kann). C ist ein einfaches, schnörkel- und kompromissloses werkzeug. mit etwas übung weiss man, was man damit machen kann und für was man lieber etwas anderes nehmen sollte. habt ihr schon mal einen C gegen Java flamewar gesehen? ich nicht.
    C++ dagegen versucht mit 'multi-paradigmen' (wie ich diesen begriff hasse 👎 ) und auf 'schweizer-offiziersmesser-basis' dem user möglichst viele möglichkeiten zu bieten. man hat für alles mindestens 10 verschiedene tricks auf lager, man kann OOP mit prozerural bedenkenlos mischen, sämtliche schutzmechanismen aushebeln, 20 verschiedene smart-pointer für jede gelegenheit, shift-operatoren als stream-I/O, trotz vieler balabla_cast<> einen verkrüppelten void*, teilweise C-kompatibilität usw. sowas hört sich zwar gut an (viel hilft viel :D), erfordert aber eine unglaubliche disziplin und verdammt viel wissen vom programmierer, damit er damit keinen quatsch baut und sein projekt in den abgrund stürzt.
    der grundgedanke, C sinnvoll zu erweitern, ist meiner ansicht nach, mit C++ komplett gescheitert. leider hat C++ zu seiner blütezeit einen hype erlebt, was zu einer grossen verbreitung führte, so dass C++ heute noch teilweise sehr oft genutzt wird (wie wir ja alle wissen 😉 ).
    es gibt bessere ansätze C zu erweitern, wie etwa Objective-C.
    und wenn C++ auch nur ansatzweise das zeug dazu hätte, in absehbarer zeit etwas sinnvolles zu werden, dann wären sprachen wie Java und C# nie erfunden worden...
    (ja, ich weiss, das war jetzt wieder zu polemisch, aber ihr kennt mich ja)
    🙂



  • Artchi schrieb:

    dsfdfg schrieb:

    Das ist es ja, was ich meine. Nehmen wir mal an, dass ein entsprechender Standard in diesem Bereich fehlt, dann kann man als Firma beim JCP einen Request einreichen und sich an der Standardisierung beteiligen.

    Kannst du auch in C++ machen. Meinst du, man kann nur Java-Libs standardisieren? Meinst du nicht, das es im C++-Bereich ähnlich läuft? Jemand entwickelt eine Library, sie wird in der Community akzeptiert, reicht sie darauf hin beim C++-komitee ein... und schwupps könnte sie im nächsten TR und somit nächsten C++-Standard drin sein, wenn die Mehrheit des Komitees diesen Proposal (entspricht deinem Request) zustimmt.

    Du erzählst der C++-Community nicht wirklich neues und spannendes. 🙄

    ich glaub du verstehst den JCP nich so ganz kann das sein?

    ps: @Undertaker: dein neuer nickname is voll leed jetz find ich besser als pale dog *checker handbewegung mach*



  • aszf schrieb:

    ps: @Undertaker: dein neuer nickname is voll leed jetz find ich besser als pale dog *checker handbewegung mach*

    danke, der nächste ist schon in bearbeitung 😉



  • Artchi schrieb:

    dsfdfg schrieb:

    Das ist es ja, was ich meine. Nehmen wir mal an, dass ein entsprechender Standard in diesem Bereich fehlt, dann kann man als Firma beim JCP einen Request einreichen und sich an der Standardisierung beteiligen.

    Kannst du auch in C++ machen. Meinst du, man kann nur Java-Libs standardisieren? Meinst du nicht, das es im C++-Bereich ähnlich läuft? Jemand entwickelt eine Library, sie wird in der Community akzeptiert, reicht sie darauf hin beim C++-komitee ein... und schwupps könnte sie im nächsten TR und somit nächsten C++-Standard drin sein, wenn die Mehrheit des Komitees diesen Proposal (entspricht deinem Request) zustimmt.

    Du erzählst der C++-Community nicht wirklich neues und spannendes. 🙄

    Das kann man ja nun wirklich nicht vergleichen, denn wenn man etwa 7 Jahre warten muss (2003 bis ~2010) dann ist das absolut nicht als "schwupps" einzustufen. Zusätzlich bezweifle ich auch, dass das Komitee etwas in den Standard aufnehmen würde, was nicht essentiell für eine breite Masse an Software ist. Ich würde mich beispielsweise wundern, wenn das C++ Komitee einen Request annimmt, der festlegt, welche Metadaten man für Komponenten angeben kann und wie die dann von der IDE interpretiert werden sollen. Beim JCP werden ja auch Standards aufgenommen, die nicht direkt was mit Java SE zu tun haben, sondern wieder nur als externe Bibliothek (😮!) verfügbar sind.

    Ich denke aber (nachdem du ja anscheinend beruflich auch Java-Programmierer bist), dass du das eigentlich ganz genau wissen müsstest.



  • Es wird hier immer witziger. Selbst wenn ein Normierungsprozess vorhanden ist, wird jetzt schon jedes einzelne Jahr gezählt, damit man sich aus der Peinlichkeit rauszieht. Warum sollte gerade der Rythmus des Java-Standardprozesses massgebend sein? Dann lies mal folgendes: Java ist kein Standard. Es ist höchstens ein Industriestandard, wie es auch das MS-Word-Doc-Format ist. Wäre Java Standard, würde auch Java 7 Jahre brauchen. Denn ISO ist ein ganz anderes Kaliber als ein Inhouse-Standard.

    Wir können gerne bis auf Detail runter gehen, und es kommen immer mehr Fakten ans Licht, wo bei Java zwar alle zwei Jahre was neues rauskommt, aber der Stellenwert des "Standards" nicht an ISO-C++ ran kommt.

    Java wird Inhouse von SUN bestimmt, die Firmen dürfen Requests stellen, aber SUN hat noch die Macht über den Spec. Wir können auch gerne über die Kosten für eine Java-Zertifikation reden. Wo Firmen wie IBM ordentlich Kohle an SUN abdrücken dürfen, damit sie überhaupt ein "Java" auf ihre Runtime und JVM kleben dürfen.

    Und was die 7 Jahre angeht: 2006 gabs einen TR1, der mit deinen genannten "externen" Libs vergleichbar ist. Es hat also nicht wirklich 7 Jahre gedauert, bis sich was bei C++ getan hat.

    Wir können auch Inhouse-C++ bestprechen: Borland bzw. Codegear und MS haben auch ihre eigenen C++-Compiler-Erweiterungen, die Libs und Sprache erweitern. Bei MS mit VC++ regelmäßig. Ist sehr gut mit dem von SUN definierten und abgesegneten Java vergleichbar.



  • Artchi schrieb:

    Es wird hier immer witziger. Selbst wenn ein Normierungsprozess vorhanden ist, wird jetzt schon jedes einzelne Jahr gezählt, damit man sich aus der Peinlichkeit rauszieht. Warum sollte gerade der Rythmus des Java-Standardprozesses massgebend sein? Dann lies mal folgendes: Java ist kein Standard. Es ist ein Industriestandard. Wäre Java Standard, würde auch Java 7 Jahre brauchen. Denn ISO ist ein ganz anderes Kaliber als ein Inhouse-Standard.

    Wir können gerne bis auf Detail runter gehen, und es kommen immer mehr Fakten ans Licht, wo bei Java zwar alle zwei Jahre was neues rauskommt, aber der Stellenwert des "Standards" nicht an ISO-C++ ran kommt.

    Java wird Inhouse von SUN bestimmt, die Firmen dürfen Requests stellen, aber SUN hat noch die Macht über den Spec. Wir können auch gerne über die Kosten für eine Java-Zertifikation reden. Wo Firmen wie IBM ordentlich Kohle an SUN abdrücken dürfen, damit sie überhaupt ein "Java" auf ihre Runtime und JVM kleben dürfen.

    Und was die 7 Jahre angeht: 2006 gabs einen TR1, der mit deinen genannten "externen" Libs vergleichbar ist. Es hat also nicht wirklich 7 Jahre gedauert, bis sich was bei C++ getan hat.

    Wir können auch Inhouse-C++ bestprechen: Borland bzw. Codegear und MS haben auch ihre eigenen C++-Compiler-Erweiterungen, die Libs und Sprache erweitern. Bei MS mit VC++ regelmäßig. Ist sehr gut mit dem von SUN definierten und abgesegneten Java vergleichbar.

    Was wetten dass das die Javaianer wieder ignorieren?



  • Undertaker schrieb:

    Mr. N schrieb:

    Undertaker schrieb:

    und wenn's der compiler mal nicht bringt, wird eben nachgeholfen.
    🙂

    Das macht man im heterogenen PC-Umfeld halt doch lieber nicht.

    na, was glaubst du, was da für haarsträubende sachen gebastelt werden 😉

    Na ich meine natürlich nicht deine C-Frickler-Freunde. 😃

    Undertaker schrieb:

    otze schrieb:

    ich frag mich grad, ob der vergleich zwischen c++ und c überhaupt angemessen ist,

    ja, das ist nicht einfach. die meisten glauben ja, dass C++ einfach nur 'das besserere C' wäre, aber dem ist nicht so.
    C verfolgt dieses, aus der unix-welt (und da kommt es ja auch her) bekannte 'keep-it-small-and-simple' prinzip. d.h. C ist klar strukturiert und überschaubar (wenn man mal von der syntax absieht, die einsteigern ganz schön kopfzerbrechen bereiten kann). C ist ein einfaches, schnörkel- und kompromissloses werkzeug. mit etwas übung weiss man, was man damit machen kann und für was man lieber etwas anderes nehmen sollte. habt ihr schon mal einen C gegen Java flamewar gesehen? ich nicht.
    C++ dagegen versucht mit 'multi-paradigmen' (wie ich diesen begriff hasse 👎 ) und auf 'schweizer-offiziersmesser-basis' dem user möglichst viele möglichkeiten zu bieten. man hat für alles mindestens 10 verschiedene tricks auf lager, man kann OOP mit prozerural bedenkenlos mischen, sämtliche schutzmechanismen aushebeln, 20 verschiedene smart-pointer für jede gelegenheit, shift-operatoren als stream-I/O, trotz vieler balabla_cast<> einen verkrüppelten void*, teilweise C-kompatibilität usw. sowas hört sich zwar gut an (viel hilft viel :D), erfordert aber eine unglaubliche disziplin und verdammt viel wissen vom programmierer, damit er damit keinen quatsch baut und sein projekt in den abgrund stürzt.
    der grundgedanke, C sinnvoll zu erweitern, ist meiner ansicht nach, mit C++ komplett gescheitert. leider hat C++ zu seiner blütezeit einen hype erlebt, was zu einer grossen verbreitung führte, so dass C++ heute noch teilweise sehr oft genutzt wird (wie wir ja alle wissen 😉 ).
    es gibt bessere ansätze C zu erweitern, wie etwa Objective-C.
    und wenn C++ auch nur ansatzweise das zeug dazu hätte, in absehbarer zeit etwas sinnvolles zu werden, dann wären sprachen wie Java und C# nie erfunden worden...
    (ja, ich weiss, das war jetzt wieder zu polemisch, aber ihr kennt mich ja)
    🙂

    Weißt du was? Das hab ich einfach nicht gelesen.

    Hmm aber eins kommentier ich doch: keep-it-small-and-simple ist ein Mythos, der auf Unix nicht wirklich zutrifft und für gewisse Probleme sorgt. HTTP z.B. ist ja schon irgendwie unixig, finde ich... ist aber ein verdammt komplexes Protokoll (HTTP ist trotzdem gut). Und wieviele unterschiedliche Arten von Dateien, Pseudodateisysteme und Arten, mit dem Kernel zu kommunizieren (Beispiele: Syscalls, read/write, ioctl, Zugriff auf ein Pseudodateisystem...) hat Linux? Oder die allerschlimmsten Small-and-simple-Leute sind ja die von GNOME, verwenden C, aber GNOME ist die fetteste und langsamste Desktopumgebung die man kriegen kann (übrigens würden die auch auf keinen Fall C++ einsetzen wollen, eher noch C# oder Python 🙄).

    Ich weiß, dass du Windows sowieso lieber magst, aber du hast von Unix-KISS geredet und Windows / Microsoft interessiert sich eh nen Dreck für Keep-it-small-and-simple.



  • Hier folgendes, dann weiß man, das SUN einfach seine Macht über Java nicht aufgeben wollte und es auch nicht will. Denn es würde nicht nur Verlust von Macht bedeuten, sondern auch Arbeit (7 Jahre harte Auseinandersetzung mit der Java-Welt):

    http://www.heise.de/newsticker/result.xhtml?url=/newsticker/meldung/4653&words=Java ISO ECMA&T=java iso ecma

    http://www.heise.de/newsticker/result.xhtml?url=/newsticker/meldung/4717&words=Java ISO ECMA&T=java iso ecma

    http://www.heise.de/newsticker/result.xhtml?url=/newsticker/meldung/5273&words=Java ISO ECMA&T=java iso ecma

    http://www.heise.de/newsticker/result.xhtml?url=/newsticker/meldung/7200&words=Java ISO ECMA&T=java iso ecma

    Nicht mal bei der ECMA hat man es standardisieren lassen, dabei ist ECMA nun wirklich harmloser als ISO.

    Wer jetzt die 7 Jahre bei C++ anmotzt, sollte bitte keinen Vergleich mit Java ziehen. Wenn, dann bitte erst, wenn Java auch ISO und somit ein echter weltweiter Standard ist.



  • Zu Java hab ich schon genug geflamed, das lass ich mal.
    Aber da der Thread eh nichts mehr mit dem Thema zu tun hat...

    Mr. N schrieb:

    keep-it-small-and-simple ist ein Mythos, der auf Unix nicht wirklich zutrifft und für gewisse Probleme sorgt.

    Unfug.

    Mr. N schrieb:

    HTTP z.B. ist ja schon irgendwie unixig, finde ich... ist aber ein verdammt komplexes Protokoll (HTTP ist trotzdem gut).

    Was ist denn an HTTP komplex? POST, GET und noch ein bisschen Firlefanz, das wars. Sowohl Client als auch Server kann man an einem Wochenende schreiben. In Sprachen wie Python sogar in ein paar Stunden.

    Mr. N schrieb:

    Und wieviele unterschiedliche Arten von Dateien, Pseudodateisysteme und Arten, mit dem Kernel zu kommunizieren (Beispiele: Syscalls, read/write, ioctl, Zugriff auf ein Pseudodateisystem...) hat Linux?

    Für jeden Einsatzbereich (und die von dir genannten haben verschiedene Einsatzbereiche) das richtige Mittel. Unixiger gehts nicht.
    Und außerdem gibt's meines Erachtens nur normale Dateien, Geräte und FIFOs. Und praktischerweise muss ein Programm nichtmal darüber Bescheid wissen, was es nun vor sich hat.

    Mr. N schrieb:

    Oder die allerschlimmsten Small-and-simple-Leute sind ja die von GNOME, verwenden C, aber GNOME ist die fetteste und langsamste Desktopumgebung die man kriegen kann (übrigens würden die auch auf keinen Fall C++ einsetzen wollen, eher noch C# oder Python 🙄).

    Wer C++ oder C statt einer Skriptsprache in einem Bereich einsetzen will, wo sehr oft Änderungen gemacht werden und es nicht zwingend ultra-schnell sein muss (zB die oberste Schicht von Desktopumgebungen, das womit der User tatsächlich arbeitet...) gehört gevierteilt.



  • so jetzt aber ab in bett



  • deine mutter schrieb:

    so jetzt aber ab in bett

    Nicht ohne Artikel und Satzzeichen.



  • .filmor schrieb:

    Wer C++ oder C statt einer Skriptsprache in einem Bereich einsetzen will, wo sehr oft Änderungen gemacht werden und es nicht zwingend ultra-schnell sein muss (zB die oberste Schicht von Desktopumgebungen, das womit der User tatsächlich arbeitet...) gehört gevierteilt.

    Dieser Einstellung verdanken wir es, dass sich die gefühlte Geschwindigkeit der Betriebssysteme in den letzten Jahren radiziert hat, obwohl sich die Leistungsfähigkeit der Computerkomponenten potenzierte ...



  • Shade Of Mine schrieb:

    Jester schrieb:

    Geeignet impliziert für mich die Wertung: "Das kann man damit gut machen". Bist Du dieser Meinung?

    Die Frage ist: für was?

    Muß ich das jetzt wissen? Du schriebst doch für Webentwicklung. 🙂



  • Artchi schrieb:

    Java ist kein Standard. Es ist höchstens ein Industriestandard, wie es auch das MS-Word-Doc-Format ist. Wäre Java Standard, würde auch Java 7 Jahre brauchen. Denn ISO ist ein ganz anderes Kaliber als ein Inhouse-Standard.

    ich würde darauf nicht soviel geben. ja, standards sind schon wichtig, aber im endeffekt ist es fast egal, wer den daumen drauf hält, sofern sich diese organisation oder firma als vertrauenswürdig erwiesen hat. ob sie nun ISO, Sun, IEEE, VDE, IBM oder sonstwie heissen. wichtig ist nur, dass sie in der vergangenheit bewiesen haben, dass sie's ernst meinen und ihnen an der sache an sich gelegen ist (also z.b. nicht so'n verein wie microsoft). was ISO für C++ ist eben Sun für Java. Sun achtet z.b. sehr genau darauf, dass in Java keine unsinnigen features einfliessen.

    Mr. N schrieb:

    HTTP z.B. ist ja schon irgendwie unixig, finde ich... ist aber ein verdammt komplexes Protokoll.

    du als C++ fan solltest mit hoher komplexität doch sehr vertraut sein. aber vielleicht schaust du dir mal PPP an, das ist noch etwas komplexer... 😃

    Mr. N schrieb:

    Ich weiß, dass du Windows sowieso lieber magst, aber du hast von Unix-KISS geredet und Windows / Microsoft interessiert sich eh nen Dreck für Keep-it-small-and-simple.

    immerhin hatte M$ windows-NT schon einen objektorientierten microkernel als der 'linux' kernel noch ein gewaltiger klotz war, den man am stück compilieren musste.
    🙂



  • Undertaker schrieb:

    Sun achtet z.b. sehr genau darauf, dass in Java keine unsinnigen features einfliessen.

    Falsch. Sun achtet sehr genau darauf, dass in Java keine Features einfließen, die Sun für unsinnig hält. Das ist ein kleiner aber feiner Unterschied!


Anmelden zum Antworten