ein object auf die festplatte 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.
-
Es gibt keine VM-Hardware.
-
hahaha. schrieb:
Es gibt keine VM-Hardware.
Habe ich auch nicht geschrieben.
Es gibt auch kein "mibrot" .... wohl aber "Salamibrot". :p

BTW: War das jetzt schon die Antwort wuf meine Frage?
Gruß,
Simn2.
-
Simon2 schrieb:
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++.
Fängst Du jetzt auch noch an, persönlich zu werden. Mein Bild ist eingeschränkt, aber Deins ist es nicht
. Zufälligerweise programmiere ich normalerweise noch nicht mal auf x86.Es ist nun mal so, dass ich mit C++ einfacher auf die Hardware zugreifen kann als mit Java. Und das definiere ich als Maschinennah. Nenn es von mir aus Hardwarenah oder wie auch immer.
Wenn ich für die Ausführung eines Programmes eine Abstraktionsschicht brauche (die VM), dann ist das Programm nicht mehr so nah an der Hardware sondern es sieht eben ein abstrahiertes Modell der Hardware. Dadurch kann ich nicht so einfach direkt auf die Hardware zugreifen.
-
tntnet schrieb:
[...]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.
Und wie soll das alles mit C++ gehen?
-
tntnet schrieb:
...Fängst Du jetzt auch noch an, persönlich zu werden. ...
Entschuldige ... ich meinte "eingeschränkt" nicht im Sinne von "beschränkt/dämlich", sondern wirklich nur im wörtlichen Sinne von "reduziert auf einen bestimmten Spezialfall".
Tut mir leid, wenn ich Dir da zu nahe getreten bin.
Interessanterweise habe ich jetzt gerade hier einen Kollegen getroffen, der spontan Eure Ansicht teilte und so in der Kaffeecke und face2face kann man einfach etwas besser diskutieren.
Wir sind eigentlich zu folgendem Schluss gekommen:
Die Trennung zwischen Hardware und Software bzw. "Maschine" und "Emulation/Abstraktion" ist nicht wirklich konsequent aufzulösen (jedenfalls sobald man mit Hardware mehr meint als die Kondensatorebene). Er selbst erwähnte noch Prozessoren, die selbst intern mehrere Abstraktionslevel implementierenn (die tw. sogar updatebar sind) .... dementsprechend zerfällt der Begriff "maschinennah", sobald man versucht, ihn konsequent zu definieren.
Bestenfalls kann man noch die "Schichten" bis zu Kondensator zählen und danach "maschinennäher als" definieren .... aber da tun sich dann Java und C++ nicht mehr viel.Gruß,
Simon2.