Autor Wątek: Java nie optymalna? (było: Co myslicie o Java jako platformie do pisania gier?)  (Przeczytany 8335 razy)

Offline g[R]eK

  • Użytkownik

# Styczeń 15, 2006, 18:45:11
Według mnie java nie nadaje się na żaden poważniejszy projekt growy. Przykład: Eclipse :) To tylko IDE a jak się ślimaczy na szybkim kompie. Jeszcze dwa lata i wypadnie z obiegu nawet w midletach, bo komórki będą na tyle szybkie że kazda cos ala symbian będzie miała...
Sam c# to też niby 'taka java' ale ma większe wsparcie w akceleracji (managed d3d). Co z tego skoro to i tak na razie kpina - żeby napisać coś sensownego nie obejdzie się bez segmentów unsafe i imporu natywnych bibliotek windowsa - czyli zero przenośności...

Więc jeżeli chcesz pisać grę, to java wydaje mi się najmniej sensownym podejściem. Co się uzyska? Więcej platform uruchomieniowych? SDL jeżeli coś i tak je pokrywa i jako c++ jest szybszy. A java naprawde zarzyna słabsze komputery... Jeżeli nie - to programik praktycznie nie ma kodu...

Eclipse to nie IDE, a napewno nie w klasycznym tego slowa znaczeniu. Same Eclipse (precyzyjniej to Eclipse Platform) to jedynie framework ktory definiuje uslugi, i specyfikacje wspolne dla wszystkich integrowanych projektow. Dopiero JDT jest konkretna realizacja IDE, podobnie jak CDT. Eclipse 3.1 na najnowszej Javie dziala mi b. dobrze, a moja maszyna nie nalezy do szczegolnie szybkich (512mb ddr, athlon 1.7), oczywiscie troche bawilem sie z konfiguracja maszyny wirtualnej. Eclipse to platforma na ktorej mozna zbudowac aplikacje RCP, wtyczki do konkretnego jezyka, czy nawet do edycji WIKI. Wewnetrzna architektura oparta na OSGI pozwala na integracje tych samych bibliotek o roznych wersjach bez ryzyka destabilizacji jakiejkolwiek czesci poprzez realizacje postulatu pelnej izolacji.

Eclipse to zaawansowana platforma, ktorej wlasciwosci sa okupione wyzszymi wymaganiami, jednak niektorzy uwazaja ze warto zaplacic taka cene. Czy jest inna platforma, np napisana w C++/Delphi ktora realizuje tak bardzo rozproszony model jak Eclipse?

Java moze zarznac komputer tak samo jak moze to zrobic zle napisany program w C++ (o co latwiej niz w javie), mysle ze wazniejsza jest kwestia wlasnej wiedzy niz wyboru pomiedzy C++ a Java, jak zwykle zreszta.
« Ostatnia zmiana: Styczeń 15, 2006, 23:18:27 wysłana przez g[R]eK »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Gloggie

  • Użytkownik

# Styczeń 15, 2006, 19:14:46
Bede brzydko cytował :)

> moja maszyna nie nalezy do szczegolnie szybkich (512mb ddr, athlon 1.7),
lol, to co ty uważasz za szybką maszynę? Ja 3 miesiące temu mialem jeszcze PII 350....

>Eclipse to platforma na ktorej mozna zbudowac aplikacje RCP, wtyczki do konkretnego jezyka, czy nawet do edycji WIKI. Wewnetrzna
>architektura oparta na OSGI pozwala na integracje tych samych bibliotek o roznych wersjach bez ryzyka destabilizacji jakiejkolwiek czesci
>poprzez realizacje postulatu pelnej izolacji.

Co mnie obchodzi co to może? I tak jeżeli piszę coś w c++ to aktywowany jest widok dla c++ i raczej nie chodzą w tle parsery z javy, wiki, etc? Zresztą po co by miały? Zatem logicznie myśląc, jeżeli widok c++ ładuje tylko wtyczki i rozszerzenia dla c++, to dlaczego mimo to całość jest taka wolna? Bo wszystko chodzi w javie...


//EDIT: (za szybko wysłałem :)

>Java moze zarznac komputer tak samo jak moze to zrobic zle napisany program w C++ (o co latwiej niz w javie), mysle ze wazniejsza
>jest kwestia wlasnej wiedzy niz wyboru pomiedzy C++ a Java, jak zwykle zreszta.

Dobrze napisany program w javie może zarżnąć komputer. Dobrze napisany program w c++ tego nie zrobi (na tym samym komputerze)

>Eclipse to zaawansowana platforma, ktorej wlasciwosci sa okupione wyzszymi wymaganiami, jednak niektorzy uwazaja ze warto
>zaplacic taka cene. Czy jest inna platforma, np napisana w C++/Delphi ktora realizuje tak bardzo rozproszony model jak Eclipse?

Nie wiem. Najbliżej będzie VS, ale ono wspiera wyłącznie jedynie słuszne jęzki ;)
« Ostatnia zmiana: Styczeń 15, 2006, 19:33:16 wysłana przez Gloggie »

Offline g[R]eK

  • Użytkownik

# Styczeń 15, 2006, 19:46:57
Bede brzydko cytował :)

> moja maszyna nie nalezy do szczegolnie szybkich (512mb ddr, athlon 1.7),
lol, to co ty uważasz za szybką maszynę? Ja 3 miesiące temu mialem jeszcze PII 350....

>Eclipse to platforma na ktorej mozna zbudowac aplikacje RCP, wtyczki do konkretnego jezyka, czy nawet do edycji WIKI. Wewnetrzna
>architektura oparta na OSGI pozwala na integracje tych samych bibliotek o roznych wersjach bez ryzyka destabilizacji jakiejkolwiek czesci
>poprzez realizacje postulatu pelnej izolacji.

Co mnie obchodzi co to może? I tak jeżeli piszę coś w c++ to aktywowany jest widok dla c++ i raczej nie chodzą w tle parsery z javy, wiki, etc? Zresztą po co by miały? Zatem logicznie myśląc, jeżeli widok c++ ładuje tylko wtyczki i rozszerzenia dla c++, to dlaczego mimo to całość jest taka wolna? Bo wszystko chodzi w javie...

1. Czy wolno Ci dziala na poczatku? Tzn gdy uzywasz jakiejs funkcji 2 raz to tez wolno? Bo jesli tylko za pierwszym razem to wynika z tego, ze java obsluguje lazy-loading
2. Czy masz najnowsza maszyne wirtualna javy, ODPOWIEDNIO SKONFIGUROWANA?
3. Ty chyba nie rozumiesz za bardzo budowy Eclipse, cala architektura, uslugi pozwalajace na wykorzystywanie wielu wtyczek sa zaladowane nawet wtedy gdy korzystasz z jednej. Eclipse ma wlasne biblioteki od GUI itd. To wszystko po, zeby bylo przenosne i ladnie wygladalo na kazdej platformie. Przenosnosc zawsze powoduje gorsze wykorzystanie specyficznych dla danego systemu wlasciwosci, dlatego rowniez np Firefox pozera troche za duzo RAM-u, ale to cena jaka placimy za to, ze mozna go swobodnie uruchamiac na Linuxie. Dla Ciebie byc moze to nie jest potrzebne, dlatego uzyj VS. Dla mnie okazuje sie to b. pomocne i dlatego uzywam Eclipse.

Wracajac do glownego tematu, w programowaniu gier mozna darowac sobie tak rozproszony model programowania, mozna sobie darowac RCP i nagle sie okaze, ze narzut nie jest juz tak wielki.

Offline Gloggie

  • Użytkownik

# Styczeń 15, 2006, 20:43:29
Żeby zakończyć ten radosny :) offtopic:

1) każdy obecny system operacyjny nie ładuje żadnej binarki exe 10MB na jeden raz tylko fragment i uruchamia, a jak potrzeba resztę to sobie doładowuje w locie. Java do tego dodaje jeszcze kompilację.

2) na moim starym p350 niewazne jak dobrze skonfigurowana maszyna wirtualna byłaby za wolna....

3) to że wtyczki są załadowane nie oznacza że są uruchomione i zajmują procesor.

Konkludując: ja nie polecam javy do pisania gier.

A dyskusję na temat Eclipse można przenieść na nowy wąek :)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 15, 2006, 21:06:48
Cytuj
Przykład: Eclipse To tylko IDE a jak się ślimaczy na szybkim kompie.
Mam szybkiego kompa i mi się nie ślimaczy ani trochę (chyba że masz nieco przestarzałą definicję "szybkiego kompa"). :)

Cytuj
Sam c# to też niby 'taka java' ale ma większe wsparcie w akceleracji (managed d3d).
W Javie morzesz korzystać z OpenGL.

Cytuj
Co z tego skoro to i tak na razie kpina - żeby napisać coś sensownego nie obejdzie się bez segmentów unsafe i imporu natywnych bibliotek windowsa - czyli zero przenośności...
Tutaj musiałbyś już z Ayufanem pogadać, ale wątpię, żeby musiał używać jakichś segmentów unsafe. No, chyba że uważasz, że to, co zaprezentował na TGK2 nie było sensowne. :)

Cytuj
c++ jest szybszy
Szybkość działania ma coraz mniejsze znaczenie. Najważniejsza jest wygoda użytkowania, a te 10% wydajności to naprawdę mały koszt.

Cytuj
> moja maszyna nie nalezy do szczegolnie szybkich (512mb ddr, athlon 1.7),
lol, to co ty uważasz za szybką maszynę? Ja 3 miesiące temu mialem jeszcze PII 350....
To potwierdza moją tezę o Twojej definicji "szybkiej maszyny". ;)

Cytuj
Dobrze napisany program w javie może zarżnąć komputer.
Żaden program, który jest dobrze napisany nie zarżnie komputera, niezależnie od użytego języka.

Cytuj
1) każdy obecny system operacyjny nie ładuje żadnej binarki exe 10MB na jeden raz tylko fragment i uruchamia, a jak potrzeba resztę to sobie doładowuje w locie. Java do tego dodaje jeszcze kompilację.
Java jest kompilowana do bytecode'u, więc nie wymaga żadnej kompilacji, a jedynie załadowania runtime'u. W zasadzie to gdy używam Eclipse to wygląda to tak, jakby Java nie wymagała kompilacji wogóle - wciskam Run i po prostu się uruchamia (kompiluje w tle, a wszystkie błędy po prostu podkreśla na czerwono w edytorze).

Cytuj
2) na moim starym p350 niewazne jak dobrze skonfigurowana maszyna wirtualna byłaby za wolna....
Bo nikt dzisiaj nie myśli o tym, żeby to działało na takich maszynach.

Offline Gloggie

  • Użytkownik

# Styczeń 15, 2006, 22:28:49
Nie traćmy z oczu głównego zagadnienia: java w pisaniu gier.

>Szybkość działania ma coraz mniejsze znaczenie. Najważniejsza jest wygoda użytkowania, a te 10% wydajności to naprawdę mały koszt.

buaha - powiedz to komuś kto kupił rok temu komputer i nie może sobie dzisiaj pograć w cośtam (np. FEAR) bo mu wolno działa... No ale programiście się łatwiej pisało....

>Żaden program, który jest dobrze napisany nie zarżnie komputera, niezależnie od użytego języka.

Bzdura. Uruchom te cośtam ( FEAR ) na 3GHz i chodzi... Uruchom na 1GHz i... nie chodzi... Źle napisany? Dlaczego - u mnie działa płynnie... Teraz takie cośtam napisane w javie: 3GHz: nie chodzi... 4GHz: nie chodzi... (zmyślam dla przykładu :P )

>Java jest kompilowana do bytecode'u, więc nie wymaga żadnej kompilacji, a jedynie załadowania runtime'u. W zasadzie to gdy używam
>Eclipse to wygląda to tak, jakby Java nie wymagała kompilacji wogóle - wciskam Run i po prostu się uruchamia (kompiluje w tle, a
>wszystkie błędy po prostu podkreśla na czerwono w edytorze).

Nieprawda. Dawniej java była wyłącznie interpretowana. Dzisiaj może być również kompilowana na natywny kod maszyny na której ją uruchomiono. Czyli musi się to odbywać w momencie uruchomienia = podwójna kompilacja.
No i małe programiki piszesz skoro kompilacja nic nie trwa...

>Bo nikt dzisiaj nie myśli o tym, żeby to działało na takich maszynach.
Dzisiaj 350 to rzeczywiście archaiczny sprzęt. Ale coś poniżej 1GHz to jeszcze jakoś działa. A Eclipse raczej na czymś takim nie pójdzie (przy większym projekcie)

Swoją drogą jak ktoś ma stary sprzęt (jakies p200) to może spróbować odpalić Q2 w C oraz C#. Ciekawe czy C# pójdzie...

Offline Kamil Trzciński

  • Użytkownik

# Styczeń 15, 2006, 23:10:20
> Swoją drogą jak ktoś ma stary sprzęt (jakies p200) to może spróbować odpalić Q2 w C oraz C#. Ciekawe czy C# pójdzie...

pojdzie... z prostej przyczyny kod jest JITowany

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 16, 2006, 00:27:00
Cytuj
buaha - powiedz to komuś kto kupił rok temu komputer i nie może sobie dzisiaj pograć w cośtam (np. FEAR) bo mu wolno działa... No ale programiście się łatwiej pisało....
Powiem - niech sobie kupi lepszy komputer. Pozatym akurat tak się składa, że jakieś półtora roku temu kupiłem sobie nowy komputer (P4 HT 3.0GHz + 1GB RAM) i do tej pory wszystko chodzi mi świetnie, więc aż tak źle nie jest. Pisząc jakikolwiek program trzeba przyjąć jakieś minimalne wymagania - im one będą niższe, tym więcej użytkowników będzie w stanie korzystać z programu, ale program będzie droższy (większy nakład pracy), więc trzeba znaleźć optymalny punkt i po prostu powiedzieć "do widzenia" (albo raczej "do upgrade") pewnej grupie użytkowników. Sad but true, ale takie są prawa ekonomii.

Cytuj
Teraz takie cośtam napisane w javie: 3GHz: nie chodzi... 4GHz: nie chodzi... (zmyślam dla przykładu )
Są programy napisane w Javie, które chodzą płynnie, więc nie zmyślaj. W Javie da się napisać porządne oprogramowanie i niezależnie jak bardzo niecierpisz tego języka, musisz się z tym pogodzić.

Cytuj
Nieprawda. Dawniej java była wyłącznie interpretowana.
A czy to ważne, co było dawniej? :P

Cytuj
Dzisiaj może być również kompilowana na natywny kod maszyny na której ją uruchomiono. Czyli musi się to odbywać w momencie uruchomienia = podwójna kompilacja.
W jednym zdaniu piszesz, że może być rekompilowana, a w drugim że musi - ja tu widzę pewną sprzeczność.

Cytuj
No i małe programiki piszesz skoro kompilacja nic nie trwa...
Nie powiedziałem, że nic nie trwa. Trwa, ale odbywa się to w trakcie pisania, więc jak chcę coś uruchomić, to nie muszę wogóle czekać.

Cytuj
>Bo nikt dzisiaj nie myśli o tym, żeby to działało na takich maszynach.
Dzisiaj 350 to rzeczywiście archaiczny sprzęt. Ale coś poniżej 1GHz to jeszcze jakoś działa. A Eclipse raczej na czymś takim nie pójdzie (przy większym projekcie)
Nie wiem, jak by działało Eclipse na 1GHz, bo nie sprawdzałem. Ty pewnie też nie, więc zostawmy suche rozważania. :)

Cytuj
Swoją drogą jak ktoś ma stary sprzęt (jakies p200) to może spróbować odpalić Q2 w C oraz C#. Ciekawe czy C# pójdzie...
Pewnie nie pójdzie, ale to wina starego sprzętu, nie C#. C# ma w założeniu ułatwiać życie programiście, a nie działać na starym sprzęcie (znowu przyczyny ekonomiczne).


Ogólnie mówiąc, dzisiaj po prostu nie opłaca się pisać optymalnie (poza zastosowaniami medycznymi, wojskowymi, itp.). Im lepszy software ma powstać, tym więcej czasu programista musi nad nim spędzić i tym więcej to kosztuje.

Offline Kamil Trzciński

  • Użytkownik

# Styczeń 16, 2006, 01:11:15
buaha - powiedz to komuś kto kupił rok temu komputer i nie może sobie dzisiaj pograć w cośtam (np. FEAR) bo mu wolno działa... No ale programiście się łatwiej pisało...

Jesli chodzi o FEARa ta gra nawet na najlepszych maszynach na wyzszych detalach potrafii sie przyciac, ja kupilem komputer 3lata temu i jakos nie narzekam na jego szybkosc :)

Nieprawda. Dawniej java była wyłącznie interpretowana. Dzisiaj może być również kompilowana na natywny kod maszyny na której ją uruchomiono. Czyli musi się to odbywać w momencie uruchomienia = podwójna kompilacja.
No i małe programiki piszesz skoro kompilacja nic nie trwa...

Tylko zauwaz ze zarowno w przypadku C# i Javy, kompilacja duzych projektow trwa doslownie chwile, czego nie mozna powiedziec o np. C++, ktora potrafi ciagnac sie godzinami, a jezeli chodzi o JIT, to rowniez trwa to niezauwazalny ulamek sekundy, a jesli naprawde Ci to przeszkadza to do platformy .NET jest odpowiednie narzedzie, ktore sie zwie "ngen", potrafi ono przekompilowac kod MSIL do assemblera, tak aby "ta pozona kompilacja" nie miała miejsca, zreszta jak juz ktos tu nadmienil w Javie jak i C# nie jest az tak wolna, jak wszyscy uwazaja, ale napewno skraca czas tworzenia aplikacji, bo powiedzmy to tak, 'nie trzeba wymyslac kola na nowo', bo bogactwo bibliotek i narzedzi dostepnych do tych jezykow jest niewyobrazalna, a ilosc problemow, ktore powstaja podczas pisania kodu jest napewno mniejsza (wycieki pamieci itd.).

Offline Kamil

  • Użytkownik
    • Homepage

# Styczeń 16, 2006, 15:11:59
To jeszcze ja powiem ze na slabym komputerku okolo 600 Mhz, z karta ktora akceleratorem graficznym nie byla, gra napisana w C++ przy uzyciu SDL (tryb czystego sdl bez uzycia OpenGL do 2D) osiagała 2 fps i NIE DALO sie grac, kamienie czy ludzik ruszaly sie laskawie po uplywie kilku sekund..  ta sama gra tylko napisana w java i ten sam komputer i gra "smiga" (niestety w wersji javowej nie mam miernika fpsow by podac konkretnie jak szybko chodzilo ale moge smialo powiedziec ze spokojnie dalo sie grac)..  wiec jesli chodzi o jave do gier to realny projekt mi pokazal ze nie jest taka zla :)

Offline santiago

  • Użytkownik

# Styczeń 16, 2006, 20:54:18
Kamil: no to wersja w C++ byla, delikatnie mowiac, kiepsko napisana:P

bo jednak Java jest wolniejsza od C++ i bardziej pamieciozerna... chociaz czasem trudno porownywac, bo troche inaczej sie pisze w jednym i drugim jezyku. Natomiast te roznice powoli przestaja miec znaczenie i pewnie niedlugo zaczna sie pojawiac gry pisane calkowicie w Javie (takie z gornej polki). Java ma sporo zalet w stosunku do C++, miedzy innymi krotszy czas pisania kodu, GC etc. a to daje duza redukcje kosztow (miesiac pracy programisty kosztuje wiecej niz wysokiej klasy komputer, nizaleznie czy przez ten czas programista szuka bugow czy robi cos konstruktywnego)


bies

  • Gość
# Styczeń 16, 2006, 21:10:31
Nie zapominajcie, że są też Garbage Collectory do C/C++.

Offline Kamil

  • Użytkownik
    • Homepage

# Styczeń 16, 2006, 21:55:33
Kamil: no to wersja w C++ byla, delikatnie mowiac, kiepsko napisana:P

Z tym bym polemizowal.. wersja C++ byla pisana tak jak typowe gry 3d czyli ze petla glowna renderuje obraz ile sie da, przy srednim sprzecie z akceleracja graficzna jest to normalne podejscie dajace dobre rezutlaty, Java wymusil (przez uzycie swing'a) model oparty na zdarzeniach czyli ze odrysowywanie okna jest tylko w momecie gdy cos sie zmieni, podejrzewam ze to odciazylo znacznie system.

Offline Kamil Trzciński

  • Użytkownik

# Styczeń 16, 2006, 22:20:46
Nie zapominajcie, że są też Garbage Collectory do C/C++.

Tylko gorzej z ich szybkoscia (ja mowie o GC z prawdziwego zdarzenia, a nie zliczaniu referencji, bo to tez mozna nazwac odsmiecaniem ;]), w przypadku Javy i innych jezykow z bogatym opisem kodu, takie mechanizmy chodza znacznie, ale to znacznie szybciej, niz odpowiedniki dla C/C++ ;]

Pozdrawiam ayufan.

bies

  • Gość
# Styczeń 16, 2006, 23:25:50
Zgadza się. Tylko, że klasa problemów do których GC się przydaje jest bardzo wąska (grafy i... może jeszcze grafy). W każdym innym przypadku GC albo jest równie skuteczny jak zliczanie referencji albo wręcz przeszkadza. Ot jeśli chcesz zamknąć gniazdko sieciowe w przypadku wystąpienia wyjątku - C++ z RAII zrobi to automatycznie (destruktor) a z GC musisz to dobić mniej lub bardziej ręcznie (,,Dispose pattern'' w Javie, using w C#).

A Java najwięcej ma do zaoferowania w aplikacjach server-side i bazach danych. W zastosowaniach bardziej ogólnych Java staje się uciążliwa (np. co jest wygodniejsze biblioteka matematyczna w C++ czy w Jave (hint: przeciążanie operatorów)).

Co nie znaczy, że nie można jej użyć do gier - wspomniany Chrome jest dobrym przykładem. Kwestia gustu. A jak będzie zbyt wolna to zawsze można użyć natywnej biblioteki (tak robi Eclipse, na takiej zasadzie jest dostęp do OpenGL, javax.comm i spora liczba innych rozwiązań).

No i jeszcze .03 PLN nt. JIT i kompilacji w ogóle. JIT ma ogromny potencjał. Można bowiem wyobrazić sobie, że kompilacja jest optymalizowana wynikami konkretnych uruchomień programu (wyłapywane są najczęściej używane ścieżki w rzeczywistym użyciu) - ot taki doskonały profiler. Ale
a) jeszcze o takich zabawkach nie słychać,
b) VM daje dość spory narzut na wykonanie (a co więcej, ostatnio słyszałem opinię, że VM Javy jest raczej słabo do Javy przystosowana - raczej pasuje do Smalltalka - ciekaw jestem jak to rzeczywiście wygląda).

Kamil: czyli wersja dla C++ była kiepsko napisana. W 2D bez akceleracji używa się algorytmów uaktualniających tylko zmieniony obszar. Od początku tak było i nie wiele się w tej kwestii zmieniło.

PS. Eclipse 3.1.1-linux-motif (JDT) na Celku 1.1 GHz działało znośnie, tj. dało się pracować. Inna sprawa, że i tak wolę ViMa. :D

PS2. A propos GC dla C++ - ostatnio wyszła nowa wersja Smieciucha.
« Ostatnia zmiana: Styczeń 16, 2006, 23:27:21 wysłana przez bies »