ein object auf die festplatte schreiben?



  • Zu welchen Maschinen passt denn C++ Deiner Meinung nach?

    hihi, streng genommen zu seiner Runtime ... also zur runtime die mit dem compiler mitgeliefert wurde. wobei es mehrere runtimes sein koennen (multithreaded, 64bit support ... etc) und es den spezialfall gibt, das die runtime in das binarie zugelinkt (statisch gelinkt) werden kann.

    Oder Meinst du die Sprache an sich ?

    die eigentliche Hirarchie ist doch :

    C-Runtime(BS spezifisch) + C - Interface zum OS (WinApi, Posix ..)
    C++ Runtime(Kompiler Spezifisch)
    C++ Binary

    Also laeuft C++ eigentlich auch in Maschine quasi, oder ?

    Gabs auch ned Java COmpiler ... also wo die Java binaries gleich mit ihrer runtime zusammen verpackt wurden ? waer aehnlich zum statisch gelinkten C++ Binary.

    Wobei die C++ Runtime sicher viel weniger macht, und den Titel VM sicher ned verdient ^^

    Ciao ...



  • RHBaum schrieb:

    Zu welchen Maschinen passt denn C++ Deiner Meinung nach?

    hihi, streng genommen zu seiner Runtime ...

    int main() {   return 3; }
    

    Welche Runtime?

    RHBaum schrieb:

    ...Oder Meinst du die Sprache an sich ? ...

    Ich spreche von der Sprache ... so wie hahaha..
    Und zu der scheint ja seiner Meinung nach ganz selbstverständlich eine "Maschine zur Sprache" zu geben (natürlich ohne, dass die Sprache mit dieser Sprache "verheiratet" sei ...).

    Gruß,

    Simon2.



  • Also ich meint nur von den abhaengigkeiten her bezogen ...

    Der hauptunterschied sollt eh klar sein ... C++ kompiler erzeugen Maschinencode, der direkt auf der CPU laufen kann ...
    Java BCode kann nur in der JVM laufen ...

    Somit stellen die runtimes (c++) nur gewisse Funktionalitaet und schnittstellen an externe sourcen bereit ...

    Welche Runtime?

    Ja zeig mir deine Compiler und linkereinstellungen den compiler, den nutzt ^^
    Wie gross ist denn dein binary geworden ?
    Soll das eigentlich nen C oder nen C++ Programm sein ? Uebersetzt das im C oder C++ Mode ?

    Und zu der scheint ja seiner Meinung nach ganz selbstverständlich eine "Maschine zur Sprache" zu geben (natürlich ohne, dass die Sprache mit dieser Sprache "verheiratet" sei ...).

    Mit der Maschine meinst Du ... ?

    IMHO so ganz unrecht hat er in der Konsequenz auch ned.
    C und C++ ham standards. Um die Gegebenheiten eines BS / Kernels an die Standards anzupassen brauchst immer so was wie eine runtime. Oder was glaubst wer Dir Stdin Stdout ... FILE ... etc zur verfuegung stellt.
    Fuer den User ist der Unterschied zwischen der VM und der Runtime gar ned so gross.... wenn man mal von der Performance und dem Handling(plattformabhaengigkeit) absieht.

    Ciao ...



  • RHBaum schrieb:

    Der hauptunterschied sollt eh klar sein ... C++ kompiler erzeugen Maschinencode, der direkt auf der CPU laufen kann ...
    Java BCode kann nur in der JVM laufen ...

    C++-Compiler könnten auch Bytecode erzeugen, Java-Bytecode kann direkt auf einem Prozessor laufen (*klick*, ist insofern auch "Maschinencode").

    Der Unterschied ist imo eher, dass die Form des Java-Bytecodes vorgegeben ist, die Form des C++-Outputs nicht.



  • @Simon2: Das ist das Konzept von Java, dass es auf einer VM läuft. Das hat aber nichts mit maschinennah zu tun, oder wo ist die Quelle die maschinennah so beschreibt wie du? (Die Frage hast du oben geschickt überlesen.) Oder ist dein "verheiratet" jetzt doch wieder nicht maschinennah?



  • Uff ... Jetzt gehts wieder um den Wissenskampf. Ich hab die Seiten nur mal eben ganz schnell überflogen und ich denke ein Compiler passt net zu dem Thema Objekte. Da ich jetzt alles nur überflogen habe und nicht weiß ob er schon seine Antwort bzw. einen Link bekommen hab, kriegt er von mir auch nochmal was.

    Ich denk mal, dass wonach du suchst, ist die Serialisation.
    http://www.codesynthesis.com/products/xsde/c++/serializer/
    http://www.osix.net/modules/article/?id=348
    Ob das gute Beispiele sind, weiß ich nicht, aber der 1. Link sieht vielversprechend aus und ist der 1. Link in Google und kenne es nur aus C#.

    mfg



  • hihi, streng genommen zu seiner Runtime

    Nö C++ gibts nicht nur hosted sondern auch freestanding. Bei letzterem gibt es zumindes keine Standardbibliothek mehr.



  • http://www.c-plusplus.net/forum/viewforum-var-f-is-3.html
    Und macht ein Diskussions Post in C++ auf.
    Am besten wird noch ein Off-Topic für so sinnlose Diskussionen erstellt. Ich dachte eigentlich immer die Mitglieder dieses Forum haben eine gewisse Reife, doch mit solchen Diskussionen und Posts die nicht zu dem Thema gehören, in denen es darum geht seine Dominanz in der Kategorie Wissen und seine allgemeine Intelligenz unter Beweiß zu stellen, zeigen dann doch das manche einfach nicht nachgeben können. Ihr seid doch alle so klug, wieso handelt ihr dann nicht nach dem guten alten Motto "der Klügere gibt nach" ? Es wird sowieso wieder ein ewig langer Thread, in dem am Ende niemand mehr weiß wie der Anfang war.



  • hahaha. schrieb:

    @Simon2: Das ist das Konzept von Java, dass es auf einer VM läuft....

    Mehr behaupte ich auch nicht.
    Dann sind wir uns im ersten Punkt schon einig.

    Nun zum 2.: Nach welchem Konzept läuft C++ auf welcher Maschine?
    Meine These: Gibt nichts Vergleichbares. Ergo: Weniger mit Maschine Verheiratet als Java.

    Zum Quellensuchen bin ich gerade zu faul ... seltsamerweise teilen aber immerhin die 10 Leute (darunter mehr Javafans als C++-Fans) aus meiner Abteilung meine Ansicht.

    Gruß,

    Simon2.



  • RHBaum schrieb:

    ...Mit der Maschine meinst Du ... ?

    Die selbstgesteuerte Instanz, die das Programm Schritt für Schritt abarbeitet.

    Da besteht IMHO schon ein gehöriger Unterschied zwischen einer VM und einer Runtime.
    Ich bin seeeehr sicher, dass in meinem Beispiel der Overhead durch OS-Startup-Code etc. erzeugt wird und ein (nicht ganz dämlich eingestellter) Linker da keine Runtime dazulinkt.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Zum Quellensuchen bin ich gerade zu faul ... seltsamerweise teilen aber immerhin die 10 Leute (darunter mehr Javafans als C++-Fans) aus meiner Abteilung meine Ansicht.

    Die dass Java mit der VM verheiratet ist, oder dass Java maschinennäher als C++ ist?



  • hahaha. schrieb:

    ...Die dass Java mit der VM verheiratet ist, oder dass Java maschinennäher als C++ ist?

    Die, dass Java stärker mit (s)einer Maschine verheiratet ist als C++ mit irgendeiner.

    Gruß,

    Simon2.



  • Sie hören einfach nicht auf 🙄
    Ladet euch ICQ und redet doch da weiter...



  • FreakY<3Cpp schrieb:

    Sie hören einfach nicht auf 🙄
    Ladet euch ICQ und redet doch da weiter...

    Jetzt muss ich nur wegen dir noch was schreiben... 🙄



  • Da ich ja irgendwie Auslöser zu dieser Diskussion war (ich hatte ja behauptet, dass C++ Maschinennäher sei als Java), möchte ich hier mal erklären, was ich damit meine.

    Ein int ist unter C++ in seiner Grösse nicht festgelegt, sondern er repräsentiert die "natürliche" Ganzzahl der verwendeten Maschine. Er ist also von der Maschine abhängig, für der das Programm übersetzt wurde. Das bezeichne ich als Maschinennah. Dahingegen ist in Java die Grösse festgelegt. Unabhängig davon, wo das Programm laufen soll. Es abstrahiert daher die Maschine. Es ist daher nicht so Maschinennah. Die VM ist nicht die Maschine. Wenn ich zum PC-Händler gehe um mir eine Maschine zu kaufen, kaufe ich keine VM sondern einen PC.

    Ein anderer Aspekt ist, dass ich in C++ praktisch alles machen kann, was auf dem Computer möglich ist. Mit Java kann ich nur das machen, was die VM abstrahiert hat (von JNI mal abgesehen). So kann ich beispielsweise keine named pipes erstellen, da die API das nicht hergibt. Ich kann auch nicht auf I/O-Ports oder bestimmte Speicherstellen zugreifen. All das geht mit C++. Daher bezeichne ich wieder C++ Maschinennäher als Java.



  • FreakY<3Cpp schrieb:

    Sie hören einfach nicht auf 🙄
    Ladet euch ICQ und redet doch da weiter...

    Warum sollten wir? (mal abgesehen davon, dass ich kein ICQ hab ...)

    Gruß,

    Simon2.



  • Hi tntnet,

    schau an - da habe ich Dich gar nicht mißverstanden, sondern sehe es tatsächlich einfach anders. 😉

    tntnet schrieb:

    ...Ein int ist unter C++ in seiner Grösse nicht festgelegt, sondern er repräsentiert die "natürliche" Ganzzahl der verwendeten Maschine. Er ist also von der Maschine abhängig, ....

    Du meinst vermutlich (etwas präzisiert): Der Wertebereich und die interne Darstellung sind maschinenabhängig.
    Nun ist die Frage, ob man diese Eigenschaften als Teil der Defintion eines int's betrachtet oder nicht. Der C++-Standard tut das nicht ... und umgeht gerade dadurch einen Plattformbezug. (ob das gut oder schlecht ist, will ich damit nicht sagen)

    tntnet schrieb:

    ...Die VM ist nicht die Maschine. Wenn ich zum PC-Händler gehe um mir eine Maschine zu kaufen, kaufe ich keine VM sondern einen PC....

    Ja - und wenn ich zum Motorradhändler gehe, bekomme ich noch was ganz Anderes. 😉
    Die Tatsache, dass PC-Händler keine VMs im Sortiment haben, finde ich ein sehr schwaches Argument dafür, dass etwas, was "Maschine" heißt, keine sei.
    Gegenbeispiel: Wenn ich zu einem Chipkkartenhersteller gehe und eine "Maschine" verlange, bekomme ich eine Java-VM in Chipkartenform - also sogar in Hardware.

    Ich habe den Eindruck, dass Du (und hahaha.) einfach Dein sehr eingeschränktes Bild von "maschine(nnah)" pflegst und zum Standard erhebst. Es gibt so unglaublich viel mehr Maschinen, die man programmieren kann als nur x86er-PCs ... und das tut man auch in C++.
    Auch C++ definiert sich einen "Maschinenbegriff" (was da z.B. "Speicher" genannt wird, ist im realen Leben ein sehr komplexes und hochgradig plattformabhängiges Zusammenspiel verschiedener Hard- und Softwarekomponenten und -Schichten), nur macht er sehr viel weniger Vorgaben an eine konkrete Plattform.
    Grenzen hat diese Definition natürlich trotzdem (z.B. auf Maschinen, die kein Random-Access-Memory anbieten, wird sich ein Compiler mächtig die Finger brechen müssen), aber deutlich weniger als Java, das seine Maschinendefintion explizit mitliefert.
    Deswegen kann man auch in Java "...praktisch alles machen kann, was auf dem Computer möglich ist. ..." - der Computer (="Berechner") ist eben die VM.

    ... und deswegen (weil Java eine konkrete Maschinendefintion mitliefert) nenne ich Java "maschinennäher".

    Wir können uns natürlich darauf einigen: Da Binary jeder Sprache ist näher auf der Maschine, auf der es weniger Emulationsschichten benötigt.

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Die Tatsache, dass PC-Händler keine VMs im Sortiment haben, finde ich ein sehr schwaches Argument dafür, dass etwas, was "Maschine" heißt, keine sei.
    Gegenbeispiel: Wenn ich zu einem Chipkkartenhersteller gehe und eine "Maschine" verlange, bekomme ich eine Java-VM in Chipkartenform - also sogar in Hardware.

    Nur ist es dann halt keine virtuelle Maschien mehr, sondern echte Hardware. Und das konzept von Java ist halt, dass es auf einer VM läuft und nicht auf einer Hardware die das gleiche tut. Beim C++ Standard bestehst du auf strikte Einhaltung des theoretischen Konzepts, aber bei Java ignorierst du die Konzepte.

    Ich habe den Eindruck, dass Du (und hahaha.) einfach Dein sehr eingeschränktes Bild von "maschine(nnah)" pflegst und zum Standard erhebst.

    Und wahrscheinlich hat auch so gut wie alle anderen. Wenn man beim Programmieren von maschinennah redet meint man die Hardware und nicht VMs. Quellen zu deiner Interpretation lieferst du ja auch nicht.



  • das "hat" im Absatz muss weg.



  • hahaha. schrieb:

    Simon2 schrieb:

    ......eine Java-VM in Chipkartenform - also sogar in Hardware.

    Nur ist es dann halt keine virtuelle Maschien mehr, sondern echte Hardware. Und das konzept von Java ist halt, dass es auf einer VM läuft und nicht auf einer Hardware die das gleiche tut...

    Das ist mir neu (und da fände ich eine Bestätigung durch eine Quelle oder Jemand Anderes auch gut), dass Java-programme nicht mehr Standardkonform sind, wenn sie auf einer "JavaVM-Hardware" laufen.

    Übrigens: Ein C++-Programm bleibt auch dann standardkonform, wenn man es für x86 kompiliert und sie in einer x86-Emulation auf einer PPC-Hardware (oder JavaVM-Hardware) laufen lässt.
    Was ist dann unter "maschinennah" zu verstehen?

    Gruß,

    Simon2.


Anmelden zum Antworten