C++ ist Müll!



  • Und was ist dann ein Prototyp? Na jedenfalls hat er da schon recht mit den ersten beiden Punkten. Aber der Garbage-Collector soll mal bei Java & Co bleiben.



  • DrGreenthumb schrieb:

    Und was ist dann ein Prototyp?

    C++ hat keine Prototypen. Diese wuerde ich eher in den OOD-Sektor packen - denn dort hat man welche 🙂



  • Hallo,
    Prototypen gibt es nur in C. In C++ heißen die Dinger Deklarationen. Und was lustiges:

    void func();
    

    Das ist in C++ eine Funktionsdeklaration. In C89 aber *kein* Prototyp. Denn ein C-Prototyp muss immer die Typen der Funktionsparameter enthalten.
    Ein Prototyp wäre also nur:

    void func(void);
    

    also eine Vorwertsdeklaration einer Funktion um sie der main bekannt zu geben ist für mich ein Prototyp

    Also erstmal deklariert man eine Funktion nicht ausschließlich für main. Und zweitens: auch wenn das "für dich" ein Prototyp ist, ändert das nicht den Standard und die Tatsache, dass es in C++ keine Prototypen gibt.

    Und btw: Ich habe da extra einen Smiley hinter geschrieben, da der Hinweis sehr "pedantic" und nicht so ernst gemeint war. Aber man kann natürlich auch gleich wieder krampfhaft disktutieren wollen.



  • HumeSikkins schrieb:

    Aber man kann natürlich auch gleich wieder krampfhaft disktutieren wollen.

    War doch keine Diskussion, wusste nur niemand dass man da überhaupt was unterscheiden kann 😉



  • @Hume war doch nicht böse gemeint.

    Wie dem auch sei, thx für die Antwort. Erneut eine Wissenslücke gefüllt 🙂 thx



  • @DrGreenthumb und Knuddlbaer
    Ihr wart nicht gemeint. Es ging mir nur um dieses "für mich ist das aber ein Elefant".



  • abgesehn davon sind die gar nich "notwendig"
    je nach design gehts auch ohne



  • also c++ ist ja im prinzip schon in ordnung, was mich aber zum beispiel stört sind:
    -header dateien
    -die Notwendigkeit von Funktions Prototypen
    -ein garbage-collector wär auch nicht schlecht

    gibts da nicht was besseres?

    Guck dich doch einfach um. Viele Sprachen arbeiten mit anderen Modulkonzepten, die ohne Header auskommen und GCs haben.



  • Was ist so schlimm an Headerdateien? Man kann auch (wenn man das besser findet) seine Klassen im Java-Style anlegen. Ich finde die Unterscheidung in cpp- und h-Files gerade vorteilhaft.



  • Ich überhauptnicht.

    Trennung von Schnittstelle und Implementierung ist OK, aber warum in verschiedenen Dateien (und dann auch noch inkonsequent wegen Templates?)

    Und die Synthax fürs außerhalb der Klasse definieren ist auch mehr als dämlich.



  • MaSTaH schrieb:

    Was ist so schlimm an Headerdateien?

    Dass man an 2 Stellen das gleiche schreiben und in Übereinstimmung halten muss.

    Man kann auch (wenn man das besser findet) seine Klassen im Java-Style anlegen.

    Nein. Wenn du alles im Header implementierst, werden alle Member inline, du verzichtest auf den Vorteil der getrennten Übersetzung und steigerst die Übersetzungszeit ins Unermeßliche.

    Modern wäre IMHO, wenn der Compiler die Header automatisch generiert. Das muss nicht unbedingt in Quellcode-Form sein, vielleicht auch nur als Eintrag in irgendeiner Deklarationsdatenbank. Die würde er jeweils updaten, wenn die Implementierungsdatei sich so verändert hat, dass die Schnittstelle nicht mehr stimmt. Das hätte u.a. auch den Vorteil, dass man private, nichtvirtuelle Memberfunktionen hinzufügen könnte, ohne dass alle abhängigen Implementierungsdateien neu übersetzt werden müssen.



  • Bashar schrieb:

    MaSTaH schrieb:

    Was ist so schlimm an Headerdateien?

    Dass man an 2 Stellen das gleiche schreiben und in Übereinstimmung halten muss.

    ACK

    Bashar schrieb:

    Man kann auch (wenn man das besser findet) seine Klassen im Java-Style anlegen.

    Nein. Wenn du alles im Header implementierst, werden alle Member inline, du verzichtest auf den Vorteil der getrennten Übersetzung und steigerst die Übersetzungszeit ins Unermeßliche.

    Ich sag ja nicht dass es toll ist oder irgendwelche Vorteile bringt. Die Übersetzungszeit dürfte jemandem, der so etwas macht spätestens bei einem größeren Projekt zum Verhängnis werden.



  • MaSTaH schrieb:

    Ich sag ja nicht dass es toll ist oder irgendwelche Vorteile bringt.

    Du hast es als Alternative für Leute angeführt, die die Trennung in Header und Implementation angeführt, oder? Jedenfalls lese ich das in dein Posting hinein.

    Mich würde jedenfalls mal interessieren, warum die dese Trennung für vorteilhaft hältst.



  • Bashar schrieb:

    MaSTaH schrieb:

    Ich sag ja nicht dass es toll ist oder irgendwelche Vorteile bringt.

    Du hast es als Alternative für Leute angeführt, die die Trennung in Header und Implementation angeführt, oder? Jedenfalls lese ich das in dein Posting hinein.

    Es sollte eher trotzig rüber kommen 😉 .

    Bashar schrieb:

    Mich würde jedenfalls mal interessieren, warum die dese Trennung für vorteilhaft hältst.

    1. Wenn es um Bibilotheken geht ist die Trennung unverzichtbar, es sei denn es gäbe eine Möglichkeit eine Schnittstellendatei generieren zu lassen.
    2. Wenn man (noch) keine Doku generiert hat sieht man schnell welche Funktionen in der Klasse implementiert sind.
    3. Vielleicht bin ich es einfach gewohnt... <- scheiß Argument, ich weiß 😉

    Das alles ließe sich auch mit einer intelligenteren IDE lösen. VisualStudio.NET macht IMHO einen Schritt in die richtige Richtung, da die Navigation im Code komfortabler geworden ist (im Vergleich zu VC++ <= ver 6) und es die Möglichkeit gibt Klammerblöcke wie in einem TreeCtrl auszublenden.



  • MaSTaH schrieb:

    1. Wenn es um Bibilotheken geht ist die Trennung unverzichtbar, es sei denn es gäbe eine Möglichkeit eine Schnittstellendatei generieren zu lassen.

    Stimmt. Wie macht das Java?

    1. Wenn man (noch) keine Doku generiert hat sieht man schnell welche Funktionen in der Klasse implementiert sind.

    Wär irgendwo ähnlich zu 1.

    1. Vielleicht bin ich es einfach gewohnt... <- scheiß Argument, ich weiß 😉

    Vielleicht bin ich es auch gewohnt. Vielleicht würde es mir fehlen, weiß ich nicht. Aber es geht mir regelmäßig extrem auf die Nüsse, dass sich Deklaration und Definition um ein const oder so unterscheiden (und dass ich im Editor doppelt soviele Buffer aufhaben muss sowieso).



  • Bashar schrieb:

    MaSTaH schrieb:

    1. Wenn es um Bibilotheken geht ist die Trennung unverzichtbar, es sei denn es gäbe eine Möglichkeit eine Schnittstellendatei generieren zu lassen.

    Stimmt. Wie macht das Java?

    1. Wenn man (noch) keine Doku generiert hat sieht man schnell welche Funktionen in der Klasse implementiert sind.

    Wär irgendwo ähnlich zu 1.

    In Java ist es üblich, eine Javadoc-Doku zu haben. Die ist ja auch ganz schnell generiert, wenn mal keine vorhanden ist. So eine Dokumentation ist deutlich komfortabler und besser nutzbar als irgendwelche Headerdateien. Auch die meisten IDEs zeigen mit Code-Completion gleich an, welche Methoden etc. eine Klasse besitzt. Wo ist also das Problem?



  • Es ging primär um die Schnittstelleninformationen in einer compilierten Library. Wenn Java keine Header hat, muss es diese ja irgendwie aus den .class-Files ziehen können. Darum gings eigentlich, nicht um Javadoc.



  • Bashar schrieb:

    Es ging primär um die Schnittstelleninformationen in einer compilierten Library. Wenn Java keine Header hat, muss es diese ja irgendwie aus den .class-Files ziehen können. Darum gings eigentlich, nicht um Javadoc.

    Ach so. Ja, die kannst du aus den class-Dateien ziehen. Klassennamen, Methodennamen, Konstantennamen, Methodensignaturen etc. bleiben in class-Dateien erhalten. Man kann die via Reflection herausfinden. Allerdings gehen die Parameternamen verloren.



  • allerdings benötigt die ja auch nicht, wenn man ne compilierte Lib gekauft hat.



  • Abbadon schrieb:

    C++ ist Müll!

    stimmt.

    Abbadon schrieb:

    gibts da nicht was besseres?

    ja. je nach anwendungsgebiet. so würde ich lieber in lisp symbolsich differenzieren, lieber in php die webseite machen, lieber in perl den bot, lieber in vb makros für den msvc, lieber in asm den bootsektor und für 100 weitere fälle gibts auch 100 sprachen, die besser als c++ passen.

    Abbadon schrieb:

    Ein paar dinge fangen mich langsam wirklich an zu Nerven.

    mir auch.

    aber es ist breit und weit noch keine sprache in sicht, die so allgemein gut ist. in der man zur not sogar differenzieren, bots bauen und webseiten machen könnte. und noch dazu mit viel sicher und viel schnell.


Anmelden zum Antworten