(Neuigkeiten...) Java ist tot!
-
Original erstellt von crass:
außerdem nur weil man Objekte mit "new" anlegt, heißt das (jedenfalls bei Java) nicht daß Objekte unbedingt auf dem Heap angelegt werden müssen. Ich hab mal gelesen, daß einer der Punkte für Performance-Steigerung bei zukünftigen HotSpot-VMs sein soll, daß die VM den Code analysiert und dynamisch entscheidet ob Objekte auf dem Stack oder Heap angelegt werden, je nachdem ob es notwendig ist, sie auf dem Heap anzulgen.wirklich geile idee.
das kann C++ schon ewig.ich glaube viele Leute hier sehen Compiler viel zu begrenzt, als etwas was den Code 1:1 von Hochsprache in Maschinensprache übersetzt. Ist doch Blödsinn eigentlich. Das Programm muss sich nur so verhalten wie man es durch den COde vorgibt. Die Form ist was ganz anderes.
wieso ist das bloedsinn? manchmal will man halt dass der compiler das macht, was man ihm sagt. und manchmal laesst man ihn machen wie er glaubt.
das koennen C++ schon ewig.
java hat alles was man für komplette objektorientierte Programmierung braucht.( abgesehen vielleicht von Mehrfachvererbung, was aber durch interface implementen ausreichend ersetzt wird, Destruktoren seh ich nicht als Vorteil).
C++ hat alles was man fuer OOP braucht + was man fuer Strukturierte Programmierung braucht.
Mal ne simple Frage zu Destruktoren:
du hast eine Verbindung zu einer Datenbank aufgebaut, irgendwann brauchst du das nicht mehr, zB weil irgendwo ne exception geflogen ist.Wann wird die verbindung gekappt? dann wenn du
Database.Release(); aufrufst?
super, da kann ich C Programmieren und
DatabaseRelease(&database);
schreiben...wozu haben wir exceptions und dtors? damit man sich nicht immer um alle einzelfaelle kuemmern muss. wenn ein objekt seinen scope verlaesst, ist es tot - es muss dann nichtmehr den speicher zumuellen.
Der Unterschied zwischen VB und Java ist imo: Java ist einfach (aber für alles geeignet), während VB simpel (leicht anzuwenden aber begrenzt) ist.
fuer alles?
schon mal grosse Programme geschrieben? ich brauch mir nur JBuilder (OK, damals noch Version 4) oder Zend Studio 2.5 ansehen. eclipse soll ja auch arg langsam sein im gegensatz zur C++ version... (und dabei gilt eclipse als schnell)nunja, irgendwie scheint mir Java nicht fuer sowas geeignet. allein die startzeit ist ein wahnsinn. also definitiv nicht dafuer geeignet.
auch wenn du es vielleicht nicht glaubst: ich hab selber schon über 5 bücher gelesen und hab in jeder programmier-arbeit im informatikkurs und auf der berufsschule-schule ne 1 gehabt (das sag ich nur um mich zu verteidigen nicht um anzugeben)
gegen volkard bist du ein anfaenger.
gegen volkard ist quasi jeder ein anfaenger.
hoer volkard zu und lerne.meines wissens gab es auch schon java-programme die schneller gelaufen sind, als C++-Programme (und nicht nur deswegen weil die C++-programme scheiße waren)
mit intelligenten VMs ist das durchaus drin
Zeig mir das Java programm und das C++ programm.
dass C++ schneller als C sein kann, ist tatsache, wenns dich interessiert dann such im forum oder frag nach. (kleiner Hint: bei functors kann der op() im gegensatz zu funktionszeigern geinlint werden)
auch für große Projekte und sogar "richtige" Spiele die ja als Hardware-Fresser gelten ist Java nicht völlig absurd. John Carmack von idSoftware meinte, Java gehört vielleicht die Zukunft bei Spiele-Entwicklung. Schon jetzt wird Java von manchen Spielen als Script-Language (zB Vampire The Masquerade) verwendet.
kannst du nen link posten wo carmack das gesagt hat?
als script sprache ist java sicher nicht schlecht. wenn man die ladezeit reduzieren koennte.ich behaupte ja nicht, dass java scheisse ist, sondern dass Java nicht fuer groessere PC anwendungen geeignet ist.
du hast mich nicht ganz verstanden..meine Idee war, daß es einen Compiler gibt, der Code logisch in die beste Form bringt, ganz egal wie der COde ausgesehen hat.
dann wuerde ich nicht in Java programmieren, sondern in deutsch.
schon, aber hier kommt was zum Tragen, was auch zB für Java vs Assembler gilt: schnelle Entwicklungszeit vs. schnelle Ausführungsgeschwindigkeit. In machnen Fällen ist 1. eben wichtiger(in den meisten behaupte ich mal ganz nubig)
und inwiefern dauert die entwicklung in c++ laenger als in java?
mal angenommen beide haetten die selbe libraryJava bietet keine Destruktoren, richtig. Aber genau, wie du in C++ beim Aufruf von delete explizit eine Stelle angibst, an der das Objekt zerstört werden soll und der Destruktor aufgerufen werden soll, kannst du in Java an dieser Stelle einfach einen Methodenaufruf setzen und die Referenz auf das Objekt anschließend auf null setzen. Die Methode wird garantiert immer ausgeführt, wo ist also das Problem?
kein vernuenftiger C++ programmierer hat irgendwo im Code ein delete stehen. (naja, es gibt n paar ausnahmen wo es schon stehen kann, aber generell kommts nicht vor)
geiles feature von C++: smart pointer
was hat java als gegenfeature zu dtoren und smart pointer: einen GC der irgendwann mal die dtors aufruft -> was wenn im dtor etwas kritischen zu schliessen ist? zB ne socket verbindung, ne datenbank, ne wass auch immer.
wann wird das aufgerufen?
-
Original erstellt von crass:
schon, aber hier kommt was zum Tragen, was auch zB für Java vs Assembler gilt: schnelle Entwicklungszeit vs. schnelle Ausführungsgeschwindigkeit. In machnen Fällen ist 1. eben wichtiger(in den meisten behaupte ich mal ganz nubig)..besonders wenn der ausführende Computer sowieso schnell genug istja, wenn du das so ausdrückst...
jetzt erkenne ich endlich, warum fast alle wichtigen IDEs in java geschrieben sind. ich höre auch nur gutes drüber. daß man kaum 400mb ram braucht, um ne datei zu editieren (hab ja 1gb, so wird das nie voll), daß fast kein aussetzer über 3 sekunden dauert (ich tippe eh langsam). und blitzschnell öffnen tun sie sich, was ja klar ist, weil bytecode geladen wird, statt ner großem maschinencode. und abstürze kanns ja nicht geben, daß java immer exceptions wirft. das ist echt ein bedeutender schritt in der informatikgeschichte.
-
Original erstellt von crass:
außerdem nur weil man Objekte mit "new" anlegt, heißt das (jedenfalls bei Java) nicht daß Objekte unbedingt auf dem Heap angelegt werden müssen. Ich hab mal gelesen, daß einer der Punkte für Performance-Steigerung bei zukünftigen HotSpot-VMs sein soll, daß die VM den Code analysiert und dynamisch entscheidet ob Objekte auf dem Stack oder Heap angelegt werden, je nachdem ob es notwendig ist, sie auf dem Heap anzulgen.wirklich geile idee.
das kann C++ schon ewig.Ist doch wurst siet wann es das kann. Im Übrigen hat das nichts mit der Sprache zu tun, sondern mit der Implementation der Virtual Machine/des Compilers.
**
Mal ne simple Frage zu Destruktoren:
du hast eine Verbindung zu einer Datenbank aufgebaut, irgendwann brauchst du das nicht mehr, zB weil irgendwo ne exception geflogen ist.Wann wird die verbindung gekappt? dann wenn du
Database.Release(); aufrufst?
super, da kann ich C Programmieren und
DatabaseRelease(&database);
schreiben...wozu haben wir exceptions und dtors? damit man sich nicht immer um alle einzelfaelle kuemmern muss. wenn ein objekt seinen scope verlaesst, ist es tot - es muss dann nichtmehr den speicher zumuellen.
**Exceptions hat Java genauso und man kann Exceptions auch so konzipieren, dass sie etwas aufräumen, wenn man will.
**schon mal grosse Programme geschrieben? ich brauch mir nur JBuilder (OK, damals noch Version 4) oder Zend Studio 2.5 ansehen. eclipse soll ja auch arg langsam sein im gegensatz zur C++ version... (und dabei gilt eclipse als schnell)
**Hm, ich wieß nicht was da für Rechner benutzt werden, bie mir läuft Eclipse astrein.
**
nunja, irgendwie scheint mir Java nicht fuer sowas geeignet. allein die startzeit ist ein wahnsinn. also definitiv nicht dafuer geeignet.
**Dann wäre die Sprache in der die meisten großen Spiele geschrieben sind auch für nichts großes geeignet. Die Dinger starten auch ewig.
**
geiles feature von C++: smart pointer
was hat java als gegenfeature zu dtoren und smart pointer: einen GC der irgendwann mal die dtors aufruft -> was wenn im dtor etwas kritischen zu schliessen ist? zB ne socket verbindung, ne datenbank, ne wass auch immer.
wann wird das aufgerufen?
**Wenn es so kritisch ist, sollte man es selbst aufrufen. Ansonsten ist es nicht wichtig dass es akut aufgetreten wird und man kann es dem GC überlassen. Destruktoren führen gerade bei fatal wichtigen Dingen IMHO eher zu spontan unverständlichem Code.
[ Dieser Beitrag wurde am 11.07.2003 um 00:56 Uhr von TriPhoenix editiert. ]
-
Original erstellt von TriPhoenix:
Exceptions hat Java genauso und man kann Exceptions auch so konzipieren, dass sie etwas aufräumen, wenn man will.[/QB]"wenn" war nicht gefragt. "wann" ist javas problem.
-
Original erstellt von volkard:
[quote]Original erstellt von TriPhoenix:
Exceptions hat Java genauso und man kann Exceptions auch so konzipieren, dass sie etwas aufräumen, wenn man will."wenn" war nicht gefragt. "wann" ist javas problem.[/QB][/QUOTE]
Man kann die Exceptions auch so konzipieren, dass sie bei ihrem Wurf Aufräumarbeiten erledigen.
-
Original erstellt von TriPhoenix:
Ist doch wurst siet wann es das kann. Im Übrigen hat das nichts mit der Sprache zu tun, sondern mit der Implementation der Virtual Machine/des Compilers.war ja nur so als anmerkung auf die feststellung, dass Java das vielleicht irgendwann auch kann.
nunja, schoen wann java das kann. aber als neue optimierung wuerde ich das nicht verkaufen...Exceptions hat Java genauso und man kann Exceptions auch so konzipieren, dass sie etwas aufräumen, wenn man will.
ein handle zu einer db will ich so schnell wie moeglich schliessen.
und JA, ich will kein database.Release() aufrufen, denn das vergesse ich vielleicht irgendwann (zB wenn irgendwo bloed ne exception fliegt)
in C++ mach ich das im dtor und gut ist.Dann wäre die Sprache in der die meisten großen Spiele geschrieben sind auch für nichts großes geeignet. Die Dinger starten auch ewig.
*lol*
vergleich: grosses Spiel in C++ ladet etwa genauso lange wie mittlere IDE in Java.
ich kann als beispiel leider nur JBuilder (4) und Zend Studio 2.5 bieten, mag sein, dass es auch wo etwas schnelleres gibt...aber vergleich mal die startzeit vom VC++ mit dem vom Zend Studio (und dann die features die beide bieten und dann den RAM den sie brauchen)
Wenn es so kritisch ist, sollte man es selbst aufrufen.
mhm... wozu dann generell destruktoren? ich kann ja, wenn ich es loeschen will
foo.release() aufrufen...
-
manche meiner Aussagen, wie zB das mit Carmack waren Sachen aus so nem kleinen Bericht über Java and Games. Ich find nur grad keinen Link, versuch den mal noch wo aufzutreiben (wurde igrngedwann schon mal hier auf dem Forum gepostet). In dem Teil stand auch drin, daß Java ev. mal generell genausoschnell laufen könnte wie C++ und warum. Absolut empfehlenswert sich das durchzulesen (falls ich den Link finde)
Daß Volkard besser programmieren kann als ich will ich btw. gar nicht bestreiten. Aber ich sag halt meine Meinung und selbst wenn sie dumm ist, find ich braucht man nicht gleich beleidigend werden oder abfällig drüber reden. Jedenfalls nicht in einem Fachforum.
dann wuerde ich nicht in Java programmieren, sondern in deutsch.
da stimm ich dir absolut zu
-
Original erstellt von TriPhoenix:
Man kann die Exceptions auch so konzipieren, dass sie bei ihrem Wurf Aufräumarbeiten erledigen.ups, die exceptions. jo, klar. hab ich überlesen.
aber das ist ja ein voll mülliger gedanke.
dann kann ich genauso mit if-orgien 50% des codes mit fehlerbehandlung durchmischen (wie damals in c).
wenn ich die vom system geworfenen exceptions in ihrer funktionalität ändern muß, werd ich unportabel.
wenn ich be jedem wurf aus dem system sofort catchen und umsetzen muß, bin ich nicht viel besser als c.
wenn ich dazu die jetzt noch verbleibenden nichrechtzeitigen destruktoren mit eigenen catch-orgien versehe, bin ich bei c.in c++ wirft man exceptions, wo sie passieren, und fängt sie erst da, wo man siew verarbeiten kann. und in java fängt man sie für jeden dazwischenliegenden scope, wo ein objekt zeitnah destruiert werden muß. ist das nicht ein wenig lachhaft?
-
Original erstellt von Shade Of Mine:
ein handle zu einer db will ich so schnell wie moeglich schliessen.
und JA, ich will kein database.Release() aufrufen, denn das vergesse ich vielleicht irgendwann (zB wenn irgendwo bloed ne exception fliegt)
in C++ mach ich das im dtor und gut ist.Nun, man muss natürlich aufpassen und alles zumachen, was man aufmacht
**
*lol*
vergleich: grosses Spiel in C++ ladet etwa genauso lange wie mittlere IDE in Java.
**Hm, wenn Eclipse eine mittlere IDE ist, was solld ann eine "große" IDE sein?
**
mhm... wozu dann generell destruktoren? ich kann ja, wenn ich es loeschen will
foo.release() aufrufen...**Das ist meine Meinung
-
Ich glaube nicht, dass man im Normalfall sehr viele Objekte hat, die Resourcen verkörpern. Wenn man nur C++ kennt, wo jede Heap-Allokation eine Resource ist, kann einem das den Blick schonmal ein wenig vernebeln.
-
Original erstellt von TriPhoenix:
Nun, man muss natürlich aufpassen und alles zumachen, was man aufmachtwillkommen in der steinzeit.
und ressourcenlöcher, synchronisationsprobleme und datenanomalien sind eine naturgegebene eigenschaft von programmen und dürfen zwar gemessen werden, aber ein bekämpfen wäre sinnlos.
-
Original erstellt von TriPhoenix:
Nun, man muss natürlich aufpassen und alles zumachen, was man aufmachtwozu brauche ich dann dtors??
Hm, wenn Eclipse eine mittlere IDE ist, was solld ann eine "große" IDE sein?
ich verwende eclipse nicht. aber wie man so hoert ist es ja eines der ersten java programme die schnell laufen. die gtk GUI soll aber um einiges schneller sein.
hab das nur gehoert. und 62MB sind mir zu gross nur um das zu testen.
also mein Visual Studio ist wesentlich schneller und umfangreicher als JBuildeer 4 und Zend Studio 2.5 -> vielleicht ist eclipse das erste java programm das gut laeuft. ich weiss es nicht.aber alleine das laden eines applets dauert lange (und nein, ich meine nicht das downloaden)
**
mhm... wozu dann generell destruktoren? ich kann ja, wenn ich es loeschen will
foo.release() aufrufen...**Das ist meine Meinung :)[/QB][/QUOTE]
wozu dann exceptions? wozu verbung? wozu OO?
-
Original erstellt von volkard:
willkommen in der steinzeit.
und ressourcenlöcher, synchronisationsprobleme und datenanomalien sind eine naturgegebene eigenschaft von programmen und dürfen zwar gemessen werden, aber ein bekämpfen wäre sinnlos.Nein. Sychroprobleme haben nichts mit Destruktoren zu tun, Datenanomalien auch nicht, wenn man vernünftig programmiert. Ressourcenlöcher bestehen ja auch nicht, wenn du in Java einen Destruktor machst, gehen die Ressourcen ja nicht auf ewig verloren. Ja, es kann sich bis zum Programmende hinziehen im worst case, aber eine vernünftige VM kann das ja durchaus so managen, dass bei Systemengpässen der GC ordnetlich was rauskloppt. Aber dafür kann die Sprache auch nichts.
-
Original erstellt von Bashar:
Ich glaube nicht, dass man im Normalfall sehr viele Objekte hat, die Resourcen verkörpern. Wenn man nur C++ kennt, wo jede Heap-Allokation eine Resource ist, kann einem das den Blick schonmal ein wenig vernebeln.man hat aber _potenziell_ dauernd welche.
nur, weil heute mal da steht:
{
Schueler* s=new Schueler("hans meiser");
...
}
und da nur speicher gebunden wird, heißtr das absolut noch nicht, daß morgen, übermorgen usw nicht die implementierung von Schueler, einer Basisklasse von Schueler oder einem Attribut von Schueler dahingehend geändert wird, daß ein sofortiges Destruieren angesagt wäre.
Daher muß doch jeder halbwegs normale Progger immer für diesen scope alle exceptions catchen, und beim catch s auf 0 setzen, en gc aufrufen und die exceptions wieterwerfen.
oder jeder, der Schueler benutzt, muß sich in die Schueler.java in nen kommentar eintragen, daß er bescheid kriegt, sobald sich dahingehend was ändert.
ich halte beides für nicht gangbar. merke: große projekte nicht in java, das wird nix.
-
**
aber alleine das laden eines applets dauert lange (und nein, ich meine nicht das downloaden)
**Bring deinem Betriebssystem bei, die Java VM permanent und abrufbereit im Speicher zu halten, dann dauert ein Applet auhc nicht mehr lange. Den Binary-Loader darf das OS hja auch im Speicher halten
wozu dann exceptions? wozu verbung? wozu OO?
Für strukturierte Fehlerbehandlung anstatt if-Orgien.
Für strukturierte Programmierung und wiederverwendbaren Code, zur Abstraktion von Schnittstelle und Implementation.
Dito.
Destruktoren braucht man nicht unbedingt dafür (IMHO ).
-
Original erstellt von volkard:
**Daher muß doch jeder halbwegs normale Progger immer für diesen scope alle exceptions catchen, und beim catch s auf 0 setzen, en gc aufrufen und die exceptions wieterwerfen.
**Nein, da reicht auch ganz außen den gc aufrufen. Sobald der Scope von s vorbei ist, landet das Objekt automatisch auf der Abschussliste und das passiert sobald irgendwo innerhalbeine Exception geworfen wird und die in dem Scope nicht gefangen wird. Mal davon abgesehen ist das Aufrufen des GC sowieso nur ein Hint und damit nicht wirklcih von belang.
-
Original erstellt von TriPhoenix:
Nein. Sychroprobleme haben nichts mit Destruktoren zu tun, Datenanomalien auch nicht, wenn man vernünftig programmiert. Ressourcenlöcher bestehen ja auch nicht, wenn du in Java einen Destruktor machst, gehen die Ressourcen ja nicht auf ewig verloren. Ja, es kann sich bis zum Programmende hinziehen im worst case, aber eine vernünftige VM kann das ja durchaus so managen, dass bei Systemengpässen der GC ordnetlich was rauskloppt. Aber dafür kann die Sprache auch nichts.syncro hat aberwohl was mit dtoren zu tun. ich mach die datenbank auf. exception fliegt. benutzer sagt: "probiers nochmal, diesmal hab ich ne diskette drin". ich mach datenbank wieder auf. schreibe sachen. alte datenbank geht zu (dtor durch gc ausgelöst). sie schreibt die alten änderungen. hurra, daten sind kaputt.
-
Original erstellt von TriPhoenix:
Nein, da reicht auch ganz außen den gc aufrufen.kommst aber doch nicht immer nach ganz außen.
-
Original erstellt von volkard:
syncro hat aberwohl was mit dtoren zu tun. ich mach die datenbank auf. exception fliegt. benutzer sagt: "probiers nochmal, diesmal hab ich ne diskette drin". ich mach datenbank wieder auf. schreibe sachen. alte datenbank geht zu (dtor durch gc ausgelöst). sie schreibt die alten änderungen. hurra, daten sind kaputt.Wieso ist die Datenbank dann kaputt? Dann ist ausschließlich die Datenbank nicht korrekt programmiert, für sowas kann man in der Datenbank genug Methodik implementieren, die transaktionen ganz oder garnicht ausführt. Eine Datenbank die z.B. nicht abkann, dass eine Verbindung von Client x aufgebaut wird, dann ein Client y Änderungen macht und dann Client x die Verbidnung einfach schließt und danndie Datenbank inkonsistent wird, hat was falsch gemacht. Ansonsten: Man muss ja nicht für jede Wurst die Datenbank zumachen.
-
Original erstellt von volkard:
Original erstellt von TriPhoenix:
Nein, da reicht auch ganz außen den gc aufrufen.
kommst aber doch nicht immer nach ganz außen.Ich meine mit außen die Äußerste Stelle, die diese Operation betrifft. Außerdem wie gesagt, ein gc-Aufruf kann man sich auch meistens sparen.
[ Dieser Beitrag wurde am 11.07.2003 um 01:31 Uhr von TriPhoenix editiert. ]