Ich hasse Java

Hier kann über allgemeine Themen diskutiert werden, die sonst in kein Forum passen.
Insbesondere über Szene, Games, Kultur, Weltgeschehen, Persönliches, Recht, Hard- und Software.
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

Code: Alles auswählen

	private <DataType extends Page> PageLock<DataType> lockAndFetch(DataType data)
	{
		PageLock<DataType> lock = new PageLock<DataType>(data);
		PageLock<DataType> cleanUpLock = lock;
		
		try
		{
			m_scheduler.fetchPage(data);
			cleanUpLock = null;
			return lock;
		}
		finally
		{
			if (cleanUpLock != null)
				cleanUpLock.release();
		}
	}
Warum? Weil das nicht geht:

Code: Alles auswählen

	private <DataType extends Page> PageLock<DataType> lockAndFetch(DataType data)
	{
		PageLock<DataType> lock = new PageLock<DataType>(data);
			
		try
		{
			m_scheduler.fetchPage(data);
			return lock;
		}
		catch(Exception e)
		{
			lock.release();
			throw e; // Error: Exception ist checked.
		}
	}
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

OK, ich bin gerade darauf gekommen, dass fetchPage ja praktisch auch keine checked Exception werfen kann, sonst müsste sie explizit angegeben sein. Damit bleiben nach der aktuellen Spezifikation wohl nur RuntimeExceptions und Errors übrig, die ich auch weiterwerfen könnte. Wenn ich jetzt nicht selbst miterlebt hätte, wie MappedByteBuffer.force (checked) IOExceptions wirft, ohne diese explizit zu spezifizieren... ich bleibe bei meinem finally...
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ich hasse Java

Beitrag von Chromanoid »

Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

OK, ich gebs auf. Ich habe heute nochmal mit PhantomReferences dafür gesorgt, dass beim Memory-Mapped IO wirklich alle gemappten Bereiche ungemappt werden, bevor irgendein überlappender Bereich auch nur wieder gemappt werden könnte. Das gab am Ende richtig komplizierten Code, ich hab mich gefreut, weils in meinem mit Zuckerwatte gepolsterten Test Bed endlich bei gigantischen Dateigrößen super lief, aber als ich dann die bösen Real-World-Daten in all ihrer Zufälligkeit und Inkohärenz in meine Mega-Hash-Tabelle geworfen habe, wars wieder aus und vorbei: der Cleaner stürzt, jetzt immerhin da wo ich kontrolliert und deterministisch die gemappten Bereiche aufräume, mit Blitz und Donner ab, weil sich angeblich überlappende Bereiche gegenseitig vom Freigeben ausschließen.

Ich habe dann noch weiter nachgeforscht, um zu sehen, dass der Absturz selbst dann, wenn sich über die gesamte Testlaufzeit hinweg kein einziger gemappter Bereich je überlappt hat, immer wieder auftritt. Der Schluss, den ich daraus ziehe, ist, dass es wohl gar nicht möglich ist, mittels Java MMIO an verschiedenen Stellen derselben Datei auszuführen.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

Tja, wie das so ist, kaum hat man aufgegeben, kommt der entscheidende Einfall. Da der Cleaner offenbar durch eine IOException wegen Zugriffsverletzung bei Zugriff auf einen gesperrten Dateibereich abstürzt, und das in einem Thread bzw. einer Java-Sphäre irgendwo dort passiert, wo man als armseliges Java-Coder-Würstchen nicht mal im Traum hingelangt, hilft es, diesen potentiell illegalen Zugriff vorzuverlegen, indem man nach der letzten Schreiboperation in einen freizugebenden Bereich erstmal MappedByteBuffer.force() aufruft.

Wie in vorangegangen Posts bereits erwähnt, ist das diese Methode, die IOExceptions wirft, obwohl sie das laut Spezifikation gar nicht darf. Der Trick ist nun, dem Java Compiler klar zu machen, dass da tatsächlich Exceptions fliegen, diese dann abzufangen, zu ignorieren, und so lange in einer Endlosschleife via force() die Daten reinzuwürgen, bis keine Exception mehr fliegt.

Damit euch genauso schlecht wird wie mir, hier noch ein paar Happen Code:

Code: Alles auswählen

// MappedByteBuffer.force() in eigene Methode verpacken, die deren fehlerhafte Exceptionspezifikation um IOException ergänzt
static void throwingForce(MappedByteBuffer buffer) throws IOException
{
   buffer.force();
}

static void forceDownAllTheWayDown(MappedByteBuffer buffer)
{
   boolean success = false;
   
   while(!success)
   {
      try
      {
         throwingForce(buffer);
         success = true;
      }
      catch(IOException e) { }
   }
}
Randbemerkung: Die ID-Verteilung in den Open-Street-Map-Daten steht einem Zufallsgenerator leider nur in wenig nach, weswegen ich nun zwar eine lauffähige Lösung habe, deren Performance mit dem Konzept der Riesen-"Hash"-Map auf der Festplatte aber so unterirdisch ist, dass dieser grauenhafte Code wohl doch keinen Einzug in das Endprodukt finden wird.
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

Hammer.
(Sinnleerer Kommentar, aber irgendwas musste ich auf all die Posts antworten.)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

Hmm … nach den Statistiken der Kaspersky Labs ist Java nach Microsoft Office die zweithäufigste Quelle für Sicherheitslücken. Flash und Acrobat sind aber auch nicht schlecht dabei – wenn das so weiter geht liefern sie in ein paar Jahren zusammen so viele Lücken wie das Office-Paket heute.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

Brilliantere Momente...

Code: Alles auswählen

public static int readInt()
{
	while (true)
		try
		{
			return Integer.parseInt(readLine());
		}
		catch(NumberFormatException e) { }
}
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

Heute war mal wieder eine absolute Java Sternstunde, ich konnte meinen Algorithmus um 400% beschleunigen, indem ich Finalizers aus den beteiligten Klassen entfernt habe. Ziemlich viel, dafür dass die Finalizers nur nice-to-have waren, aber keine wichtige Aufgabe hatten...
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ich hasse Java

Beitrag von Chromanoid »

Hier mal eine interessante Meldung auf GamesMarkt (siehe Bigpoint schaltet "Poisonville" bald ab). Das Browsergame PoisonVille von BigPoint soll laut des Geschäftsführers vornehmlich aufgrund der Technologiewahl Java für den Client gescheitert sein. Ich persönlich hatte in verschiedenen Diskussionen unter Anderem auf dieses Spiel verwiesen (es wurde mit der JMonkeyEngine umgesetzt), um Java als mögliche Spieleplattform zu verteidigen. Der Geschäftsführer moniert, dass Java zwar Hardware-unabhängig sei, deshalb aber auch nicht die Hardware-Nähe, die Spiele benötigen, leisten könne und dass viele Benutzer technische Probleme hatten.
Das Kommentar muss man als Java-Liebhaber wohl erst mal so hin nehmen :D.

Aber ich möchte trotzdem erwähnen, dass
1. PoisonVille's Zielgruppe (das Spiel wurde in Kooperation mit Playboy beworben) sicherlich eher alles andere als technikaffin ist,
2. fast die gleiche Technologie (LWJGL wird auch bei der JMonkeyEngine eingesetzt) bei Minecraft zum Einsatz kommt und der Entwickler wohl recht zufrieden damit ist
und dass
3. das Gameplay des Spiels mir "minderwertig" erscheint und aus meiner Sicht damit eher Management- und Designfehler für den Misserfolg verantwortlich sind.

PS: Soweit ich das beobachtet habe, wendet sich BigPoint jetzt wohl vor allem Unity3D als Plattform für 3D-Spiele zu.
j.klugmann
Establishment
Beiträge: 201
Registriert: 07.07.2010, 13:00
Kontaktdaten:

Re: Ich hasse Java

Beitrag von j.klugmann »

@Poisenville: Das scheitern vom angeblichen "Vorreiter" Poisenville liegt auf jedenfall nicht bei der Technik, sondern an dem grässlichen Game-Design. Total verkorkst und meiner Meinung nach nicht zu gebrauchen.

@Java: Immer wieder lustig hier zu lesen. Zum Glück wurde ich mit Java beruflich wie privat erst einmal konfrontiert, damals ging es um ein kleineres Post-Processing Framework mit JOGL. Ich bleibe da lieber bei meiner gesunden Mischung aus C++,Haskell,Python und Javascript! ;)
Imaging-Software und bald auch Middleware: http://fd-imaging.com
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
joggel

Re: Ich hasse Java

Beitrag von joggel »

j.klugmann hat geschrieben:.... mit JOGL.
Freschheit... immer wenn ich das lese, muss ich an Mich denken!
Ja, genau deswegen hasse ich auch schonmal Java.
Benutzeravatar
jrk
Beiträge: 18
Registriert: 23.10.2010, 20:46
Benutzertext: Ich mag Plankton.
Alter Benutzername: jarek
Echter Name: Plankton
Kontaktdaten:

Re: Ich hasse Java

Beitrag von jrk »

Ich hasse Java, als ihr noch alle nicht wusstet, was Java ist.

Ein Jahr J2ME Spieleewnticklung (im Jahre 2003, auf Handsets mit 32kb ram) hat mich fuer immer zum Javahater gemacht.
Benutzeravatar
jrk
Beiträge: 18
Registriert: 23.10.2010, 20:46
Benutzertext: Ich mag Plankton.
Alter Benutzername: jarek
Echter Name: Plankton
Kontaktdaten:

Re: Poker programmieren

Beitrag von jrk »

JAVA IST GEIL OMG! NOTCH BENUTZT JAVA! MINECRAFT NOTCH! DER NOTCH! OMG JAVA OMG NOTCH!
Zuletzt geändert von Chromanoid am 05.03.2011, 10:36, insgesamt 2-mal geändert.
Grund: Habe das mal in das passende Thema verschoben ;).
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

Zuletzt geändert von Chromanoid am Sa 5. Mär 2011, 10:36, insgesamt 2-mal geändert.
Grund: Habe das mal in das passende Thema verschoben ;).
Warum besudelt ihr meinen Thread mit Flammen
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ich hasse Java

Beitrag von Chromanoid »

Das ist eine strategische Vorbereitung darauf diesen Thread löschen zu dürfen :D :D
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Top-OR »

@Krishty: you made my day.

Beruflich programmiere ich (u.A.) auch Java. Mein Chef kommentiert meine zeitweiligen "Wutausrufe aus dem Nichts gegenüber Java" immer mit meiner persönlichen Unfähigkeit. Naja, vielleicht hat er ja recht, aber auch in meiner naiven nichtswissenden Sichtweise muss und möchte ich trotzdem sagen: "Java ist (oft) ein Arsch!" Hähääääää, dem hab ichs aber gezeigt. ^^

In diesem Sinne: Danke für diesen Thread!
--
Verallgemeinerungen sind IMMER falsch.
anonym
Beiträge: 79
Registriert: 15.07.2009, 07:35
Kontaktdaten:

Re: Ich hasse Java

Beitrag von anonym »

Aus der Java-Spezifikation ein C-Negativbeispiel:

Code: Alles auswählen

int q = (n+7)/8;
switch (n%8) {
case 0: do {foo();
case 7: foo();
case 6: foo();
case 5: foo();
case 4: foo();
case 3: foo();
case 2: foo();
case 1: foo();
} while (--q > 0);
}
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Aramis »

Arg, wer hat da Duff's Device so massakriert?

Ich wollte eben eine von der Funktionalitaet her aequivalente Implementierung in Java posten, aber sie ist leider ueber 12500 einzelne Klassen und Interfaces verstreut und laeuft ausserdem nur als Enterprise Java Bean :-)
Benutzeravatar
CodingCat
Establishment
Beiträge: 1857
Registriert: 02.03.2009, 21:25
Wohnort: Student @ KIT
Kontaktdaten:

Re: Ich hasse Java

Beitrag von CodingCat »

Haha, sehr schön, man braucht es zwar praktisch nie, schon gar nicht, wenn man nur Java-Performance anstrebt, aber weil es in Java nicht möglich ist, ist es ein C-Negativbeispiel. Propaganda überall....
alphanew.net (last updated 2011-07-02) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Top-OR »

Krishty hat geschrieben:http://blog.fefe.de/?ts=b36e65a8
Ist CSS was für Püppies oder blockt mein Browser das weg? Meine Augen bluten ...
--
Verallgemeinerungen sind IMMER falsch.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

Minimalauslegung, siehe FAQ. Vielleicht gefällt es dir ja so besser? :)
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Top-OR
Establishment
Beiträge: 330
Registriert: 02.03.2011, 16:32
Echter Name: Jens H.
Wohnort: Esslingen/Dessau
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Top-OR »

Oh ja schon viel besser, danke! Jetzt versteh ichs auch ... komisch. :-P

Muss wohl ein quantenmechanischer Effekt sein.
--
Verallgemeinerungen sind IMMER falsch.
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Krishty »

Java update.png
Läuft überall. Aber mit jeder Aktualisierung anders.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dv
Beiträge: 51
Registriert: 15.09.2002, 17:46
Benutzertext: Ugauga.
Alter Benutzername: dv
Wohnort: Südamerikanischer Dschungel
Kontaktdaten:

Re: Ich hasse Java

Beitrag von dv »

Wie ich höre, kriegt Java 7 endlich Lambdas (hey, selbst C++ hat die schon..)
Implementierung: http://openjdk.java.net/projects/lambda/

Dann sehe ich das: http://cr.openjdk.java.net/~briangoetz/ ... ate-3.html
Und ich denke mir:
Bild
bei den Kompromissen, die sie da nehmen müssen, weil die Sprache so fest verankert ist in der Welt der nominativen Typisierung. Man muß wieder irgendwelche Interfaces definieren/verwenden, die eine Methode beinhalten (Comparable zB). Lambdas sind also nur Syntax Sugar, um sich das explizite Erzeugen anonymer Klassen usw. zu ersparen. Funktionstypen per se existieren weiterhin nicht.

C# hat Delegates (und im übrigen kein Type Erasure, welches auch ein Riesenproblem von Java ist). C# hat auch bereits Lambda, und das betreibt keinen solchen Unsinn.

C++ hat Funktionspointer, Methodenpointer, Funktoren, sowie eine generische Kapselung dieser Drei unter dem Namen "Function Objects". Siehe boost.function bzw. tr1 function. Wenn man das mal verwendet hat, will es nicht missen. C++0x führt auch lambda-Ausdrücke ein, welche zwar ebenfalls nur Syntax Sugar für das Definieren eines Funktors, jedoch viel mächtiger sind als Java-Lambda, da es eben in C++ Function Objects gibt.

Von den dynamischen Sprachen (Python, Ruby, Javascript ..) gar nicht zu reden.
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ich hasse Java

Beitrag von Chromanoid »

Naja Sachen wie Type Erasure und das ganze nur als "Syntax Sugar" umzusetzen haben ja schon ihren Grund. Wenn man das einfach so fallen lässt, kann man gleich ne neue Sprache entwickeln.
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: Ich hasse Java

Beitrag von Aramis »

Wenn man das einfach so fallen lässt, kann man gleich ne neue Sprache entwickeln.
Stimmt, wieso hat man das nicht schon lange getan? Ach moment, ich sehe gerade, man hat es ja getan und das sogar schon ziemlich oft :-)
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4254
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: Ich hasse Java

Beitrag von Chromanoid »

Exakt. Und trotzdem ist Java noch ziemlich angesagt. Scala Evangelisten beschwören jetzt schon ziemlich lange die Entwicklergemeinschaft. Auch die C# Vertreter sind ja nicht auf den Mund gefallen. Java wird weiterhin sehr gerne eingesetzt und das trotz der Verwendbarkeit von Java Bibliotheken in Scala und ähnlichen Bemühungen.
Antworten