c++ vs. java... was hat zukunft
-
pale dog schrieb:
...
ja, flache kopien, das konnte C ohne ++ schon mit structs machen, als struppi noch die wolle aus'm teddybär'n gezupft hat.
Naja, ein bischen mehr schon. Immerhin werden auch selbstgeschriebene CopyCtoren von tief verschachtelten Klassen aufgerufen ...
IMO Vorteil ggü. selbstgeschriebenen Funktionen (Huch - wo ist dann da das OO bei Java geblieben ?): Man kann nicht vergessen, sie aufzurufen.
Letztlich finde ich den Unterschied aber eher marginal und legitimiert IMO keineswegs eine Überlegenheit der einen oder andern Sprache.Gruß,
Simon2.
-
Zum Thema "Java ist sicherer":
http://www.heise.de/newsticker/meldung/89821
-
lokos schrieb:
Beide Sprachen haben ihre Daseinsberechtigung, wobei C# durchaus eher Java das Wasser abgraben wird als C++, weil C# und Java eher auf die gleichen Zielgruppen von Anwendungsentwicklern ausgerichtet sind während C++ eher im Bereich der reinen Systementwicklung nach wie vor Puntken kann. Und wenn man sich erstmal eingehender mit C# auseinandergesetzt hat und dessen Stärken erkennt bleibt für Java als einzige daseinsberechtigung die fehlende Kompatibilität *nix basierter Systeme zu C#... (Btw, man kann ganze Webapplikationen easy in C# schreiben unter dem ASP...) Gerade im Bereich der Anwendungsentwicklung kann die Kombination C# und .Net die Entwickler enorm entlasten, wodurch Projekte schlicht schneller fertig werden und auch besser laufen. Ok, man verkauft im gegenzug seine Seele an MS, aber auch daran kann man sich gewöhnen.
Ich hab mal gehört unter den *nix gibts C# mit MONO, hab ich mich da geirrt?
-
darthdespotism schrieb:
lokos schrieb:
Beide Sprachen haben ihre Daseinsberechtigung, wobei C# durchaus eher Java das Wasser abgraben wird als C++, weil C# und Java eher auf die gleichen Zielgruppen von Anwendungsentwicklern ausgerichtet sind während C++ eher im Bereich der reinen Systementwicklung nach wie vor Puntken kann. Und wenn man sich erstmal eingehender mit C# auseinandergesetzt hat und dessen Stärken erkennt bleibt für Java als einzige daseinsberechtigung die fehlende Kompatibilität *nix basierter Systeme zu C#... (Btw, man kann ganze Webapplikationen easy in C# schreiben unter dem ASP...) Gerade im Bereich der Anwendungsentwicklung kann die Kombination C# und .Net die Entwickler enorm entlasten, wodurch Projekte schlicht schneller fertig werden und auch besser laufen. Ok, man verkauft im gegenzug seine Seele an MS, aber auch daran kann man sich gewöhnen.
Ich hab mal gehört unter den *nix gibts C# mit MONO, hab ich mich da geirrt?
Ja, es gibt Mono. Mono will dieses Jahr die Implementierung von .Net 2.0 fertigstellen... Aktuell ist .Net aber schon wieder bei 3.5 . Ich will Mono nicht schlecht reden, aber gegen den Versionswahn von Kleinweisch anzukommen ist nicht einfach...
-
lokos schrieb:
C++ kann ALLES was Java kann (naja, und vieles mehr halt).
Interessant. Ich mach mit Java folgendes:
Ich habe ein Programm, das aus einzelnen völlig unzusammenhängenden Bausteinen besteht. Es wird an keiner Stelle im Programm gesagt, welche Bausteine da sind und welche nicht. Es gibt auch keine externe Datei, in der die Bausteine eingetragen sind. Und die Bausteine haben auch keine Methoden, durch die sie sagen können, was sie sind und wie sie zu benutzen sind. Mein Programm untersucht sich beim Start dann praktisch selbst, findet heraus, was es kann, und generiert aus diesen Informationen eine grafische Benutzungsschnittstelle, um alle Bausteine inklusive ihrer Kombinationen für den Benutzer nutzbar zu machen.
Wie macht man das in reinem C++?
-
Simon2 schrieb:
pale dog schrieb:
...
ja, flache kopien, das konnte C ohne ++ schon mit structs machen, als struppi noch die wolle aus'm teddybär'n gezupft hat.
Naja, ein bischen mehr schon. Immerhin werden auch selbstgeschriebene CopyCtoren von tief verschachtelten Klassen aufgerufen ...
...die man aber erst schreiben muss und die für jede klasse anders aussehen.
Simon2 schrieb:
IMO Vorteil ggü. selbstgeschriebenen Funktionen (Huch - wo ist dann da das OO bei Java geblieben ?
): Man kann nicht vergessen, sie aufzurufen.
wieso vergessen? machste einfach 'ObjectOutputStream().writeObject(...)' und alles geht automatisch.
Simon2 schrieb:
Letztlich finde ich den Unterschied aber eher marginal und legitimiert IMO keineswegs eine Überlegenheit der einen oder andern Sprache.
sag ich ja auch immer. wer Java mit c++ vergleicht, vergleicht äpfel mit birnen.
aber auf mich hört ja keiner...
Gregor schrieb:
Wie macht man das in reinem C++?
du weisst doch selber, dass das nicht geht
-
phlox81 schrieb:
Zum Thema "Java ist sicherer":
http://www.heise.de/newsticker/meldung/89821"Java ist sicherer" ist wie folgt zu verstehen: In Java gibt es Sicherheitskonzepte. Natürlich haben die auch Lücken (Die JVM ist schließlich in C++ geschrieben). In C++ gibt es aber erst gar keine.
-
ich finde diese "diskussion" ist absolut lächerlich.
jeder der hier denkt das eine sei aus irgendwelchen gründen besser als das andere, hat imo irgendo was nicht ganz verstanden...
-
pale dog schrieb:
Gregor schrieb:
Wie macht man das in reinem C++?
du weisst doch selber, dass das nicht geht
Ich lass mich bei solchen Dingen immer gerne überraschen. Ich kann C++ nicht gut genug, um endgültig beurteilen zu können, ob es da nicht elegante Wege gibt, bestimmte Funktionalitäten von Java nachzubilden. Meistens kommt aber nur ein "Ich kann die JVM ja nachprogrammieren!". ...weiß nicht, ob man das zählen lassen sollte. ...zumal man dann ja immer noch eine andere Sprache für das eigentliche Programm nutzt.
-
@Gregor
Symbol-Tabelle des Binaries auslesen. (natürlich gibt es komfortablere Lösungen. Aber du willst ja reines C++)Gregor schrieb:
phlox81 schrieb:
Zum Thema "Java ist sicherer":
http://www.heise.de/newsticker/meldung/89821"Java ist sicherer" ist wie folgt zu verstehen: In Java gibt es Sicherheitskonzepte. Natürlich haben die auch Lücken (Die JVM ist schließlich in C++ geschrieben). In C++ gibt es aber erst gar keine.
Anders gesagt: In Java bekommt man Sicherheitslücken frei Haus. In C++ muss man sie erst selbst coden.
-
Gregor schrieb:
pale dog schrieb:
Gregor schrieb:
Wie macht man das in reinem C++?
du weisst doch selber, dass das nicht geht
Ich lass mich bei solchen Dingen immer gerne überraschen. Ich kann C++ nicht gut genug, um endgültig beurteilen zu können, ob es da nicht elegante Wege gibt, bestimmte Funktionalitäten von Java nachzubilden. Meistens kommt aber nur ein "Ich kann die JVM ja nachprogrammieren!". ...weiß nicht, ob man das zählen lassen sollte. ...zumal man dann ja immer noch eine andere Sprache für das eigentliche Programm nutzt.
Man könnte das Konzept von IDispatch
http://en.wikipedia.org/wiki/IDispatch
übernehmen. Btw. wie "rein" ist das Java das Du dazu verwendest?
Nutzt es die Laufzeitbiblithek?
Das wäre es nämlich legitim auch für C++ Bibliotheken zu verwenden.Grüsse
*this
-
Gast++ schrieb:
Btw. wie "rein" ist das Java das Du dazu verwendest?
Nutzt es die Laufzeitbiblithek?
Das wäre es nämlich legitim auch für C++ Bibliotheken zu verwenden.Du darfst die C++ Standardbibliothek selbstverständlich verwenden. IMHO gehört die zur Sprache dazu. Ich nutze auch die Java-Standardbibliothek. Allerdings nur den ganz zentralen Kern davon.
rüdiger schrieb:
@Gregor
Symbol-Tabelle des Binaries auslesen. (natürlich gibt es komfortablere Lösungen. Aber du willst ja reines C++)Elegant ist das ja nicht gerade.
...aber durchaus interessant.
-
Gast++ schrieb:
Man könnte das Konzept von IDispatch
http://en.wikipedia.org/wiki/IDispatch
übernehmen.soll man das halbe windows nachbauen
btw: Java bringt seine eigene infrastruktur schon mit, deshalb war die aufgabe von Gregor auch etwas unfair...
-
Gregor schrieb:
Du darfst die C++ Standardbibliothek selbstverständlich verwenden. IMHO gehört die zur Sprache dazu. Ich nutze auch die Java-Standardbibliothek. Allerdings nur den ganz zentralen Kern davon.
So kann man das nicht vergleichen.
Entweder wir lassen auch in Java alle Bibliotheken heraus oder wir lassen in C++ alle externen Bibliotheken zu.Dsss Java eine grössere Laufzeitbibliothek hat als ein Standard-C++ ist unbestreitbar.
Allrdings glaube ich dass eine Lösung mit dem IDispatch-Konzept, ggf RTTI und wenns ganz ganz schlimm kommt mit der Symboltabelle schon recht komplett wäre.
Statt AWT/Swing würde ich dann die MFC, Qt o.ä. einsetzen; das muss erlaubt sein.
Grüsse
*this
-
pale dog schrieb:
btw: Java bringt seine eigene infrastruktur schon mit, deshalb war die aufgabe von Gregor auch etwas unfair...
Es ist unter C++ eine bewusste Designentscheidung, so eine Standardbibliothek zu haben, wie sie existiert und es ist auch eine bewusste Designentscheidung, C++ nicht in einen Pseudocode zu kompilieren, der in einer virtuellen Maschine läuft. Natürlich hat das Auswirkungen auf die Spracheigenschaften und darauf, wie man die Sprache nutzt, was man mit Ihr macht usw..
Daran ist nichts unfaires.
-
pale dog schrieb:
soll man das halbe windows nachbauen
Nein; ich will nicht OLE nachbauen wollen, sondern nur eine Klasse mit einem Introspektionsinterface schaffen und ableiten.
Ich würde sie dann auch IMyDispatch nennen; meinetwegen auch im namespace "pale_dog_scepticism" ...
Grüsse
*this
-
Gregor schrieb:
phlox81 schrieb:
Zum Thema "Java ist sicherer":
http://www.heise.de/newsticker/meldung/89821"Java ist sicherer" ist wie folgt zu verstehen: In Java gibt es Sicherheitskonzepte. Natürlich haben die auch Lücken (Die JVM ist schließlich in C++ geschrieben). In C++ gibt es aber erst gar keine.
In C++ ist dafür das OS zuständig. Z.B. sollte ein OS ein C++-Programm daran hindern, in das OS-Verzeichnis zu schreiben. Oder ebend über Speicherschutz ein Programm zu hindern, auf fremde Speicherbereiche zu zugreifen. Und wer will, kann auch virtualisieren, was einer JVM ähnlich kommt. (mehrere JVM-Instanzen unter Windows
mehrere VirtualPC-Instanzen... als Beispiel) Das was unter Java die VM macht, macht unter C++ das Betriebssystem. Am Ende ist das Verfahren das gleiche: irgendeiner kontrolliert das Programm. Und wenn eine JVM eine Lücke hat, kann das auch ein OS haben. Die Sicherheit ist nur so gut, wie ihr Kontrolleur.
-
Artchi schrieb:
In C++ ist dafür das OS zuständig.
und woher weiss ein OS dass es ein C++ programm ist und kein TurboPascal, Assembler oder ArtchiScript?
-
Sehr witzig! Das Programm wird am Ende in Maschinencode ausgeführt. Kann auch Assembler sein. Und stell dir vor: auch Assembler-Programme unterliegen der Kontrolle des OS. Muss ich dir aber eigentlich nicht erklären, da ich mir denke, das du sowas als C-Programmierer weißt und nur stänkern willst. Du weißt aber genau was ich mit C++-Programm gemeint habe.
-
Artchi schrieb:
Gregor schrieb:
phlox81 schrieb:
Zum Thema "Java ist sicherer":
http://www.heise.de/newsticker/meldung/89821"Java ist sicherer" ist wie folgt zu verstehen: In Java gibt es Sicherheitskonzepte. Natürlich haben die auch Lücken (Die JVM ist schließlich in C++ geschrieben). In C++ gibt es aber erst gar keine.
In C++ ist dafür das OS zuständig. Z.B. sollte ein OS ein C++-Programm daran hindern, in das OS-Verzeichnis zu schreiben. Oder ebend über Speicherschutz ein Programm zu hindern, auf fremde Speicherbereiche zu zugreifen. Und wer will, kann auch virtualisieren, was einer JVM ähnlich kommt. (mehrere JVM-Instanzen unter Windows
mehrere VirtualPC-Instanzen... als Beispiel) Das was unter Java die VM macht, macht unter C++ das Betriebssystem. Am Ende ist das Verfahren das gleiche: irgendeiner kontrolliert das Programm. Und wenn eine JVM eine Lücke hat, kann das auch ein OS haben. Die Sicherheit ist nur so gut, wie ihr Kontrolleur.
Meinst Du, die Sicherheitslücke, die da in dem Artikel genannt wurde, hat Ihren Ursprung im Java-Code der Standardbibliothek? Ich denke ja eher, dass man da im C++-Code suchen müsste, der in der JVM ist oder über JNI genutzt wird. Also: Warum schützt das Betriebssystem da nicht?