Mi az, ami miatt nehéz Java-ról átírni a Minecraft-ot sima C-re?
Amennyire én belelátok a programozásba, a matematikai részt - ami bizonyára a játékmotor javarészét adhatja - átírni nem okozhatna fejtörést, magas szintű nyelveknél a matematikai, aritmetikai és logikai operátoroknál nem lehetnek nagy különbségek, sőt, a legtöbbnek ilyen téren minimum kompatibilisnak illene lennie, tudtommal.
Összetettebb változóelemeket, struktúrákat (nem csak string-ekre gondolok ;]) kis ügyeskedéssel szintén le lehet bontani alacsonyabbszintű C elemekre, nem? Azért is gondolom, mert C#-ról sima C-re már csináltam ilyet, úgyszintén Pascal-os programot is eddig mind kis (tényleg nem sok) gondolkodással átírtam C-re.
Az egy, ami kicsit tökölősebb lehet, az a grafika, de C-re kis túlzással egy tucat értelmes, sokmindent tudó grafikai függvénykönyvtár létezik.
Ráadásul ez a játék pont ideális lehet : nem kell semmi különösebb árnyékolás, simítás, polygonok garmada, a textúrákat - és még a formákat is - meg még talán az is ki tudná okoskodni procedurális grafikaként, aki nem ismeri a fogalmat, vagy kezdő-középhaladó programozó.
És a pláne : azt még megérteném, hogy ha csak 1-2 ember foglalkozna vele totál ingyen, indie-game formájában, 0 vagy adományozói támogatásokból, a kód terjedelme miatt nem tudnának ennek nekifutni.
De ahogy én tudom, az, aki ezt pénzé tette (Notch, ha jól írom), egy egész fejlesztői csapatnak adta át a jogdíjjakat, ott pedig csak lenne rá munkaerő, hogy egy normális kódolási platformra, ill. binárisra átvigyék a játékot, nem?
Java-n, minthogy >ez sem kivétel<, a Jó Isten memóriája se elég sokszor ennek a játéknak, kiismerhetetlen a videohardveres igénye, és még a PS3 verzió is kicsinálta a (PS3) gépünket alig pár nap alatt, amikor meg unokaöcséim hazavitték a játékot (csak pár napra jöttek fel hozzánk ezzel), nekik az osztott képernyő nem működött többet. Így alapos a gyanúm rá, hogy PS3 alatt egy beépített Java emulátort toltak alá.
Kicsivel normálisabb nyelveken megírt - és nem feltétlenül csak C, vagy C-szerű nyelven megírt játékról beszélek - videojátékok még többé-kevésbé szebb grafikával ugyanúgy 3D-s teret és aránylag összetett játéklogikát/kombinációs kézséget tudnak nyújtani, akár csak pár tucat video- és/vagy RAM-memóriából és párszáz, vagy 1GHz körüli órajelből.
Azt még megérteném, hogy a nagy tér miatt kicsivel több memóriát igényel - de amúgy erről a játékról lerí, hogy ezeregy trükkel lehetne puzzle-ezni, hogy hogyan tömörítsék, ill. generálják procedurálisan hatékonyan a pálya struktúráját -, de azt nem becsülném nagyobbra, mint 512 MB, vagy 1GB RAM használat.
Ezzel szemben a Java miatt emberek tucatjai panaszkodnak a világ nyelvén arról, hogy 4GB RAM-al is szaggat a játék.
Szóval:
Mi az, ami miatt mégiscsak nehéz, vagy hátráltatja Java-ról átírni a Minecraft-ot sima C-re?! :-/
c#-ban is megírták, úgy hívják, hogy minecraft for windows 10 beta
Egyébként állítólag a platformfüggetlenség miatt nem akarják átírni, mert így fut linuxon és macen is
"Amennyire én belelátok a programozásba..."
Szerintem innentől kezdve nincs is értelme firtatni.
Egyébként meg azért, mert a Java 2-3 fokkal magasabb szintű programozási nyelv, mint a C.
Van több tíz-százezer Java kódod, amit át kéne dolgozni több millió sornyi C kóddá, mindezt úgy, hogy nagyon sok dolog megoldása kifejezetten nehézkes lenne.
Pokoli sok munka... A semmiért igazából.
Nem ismerem a kodjat, de peldaul eleg nyomos ok lehet, hogy egy ember takolta ossze evek alatt. Emiatt lehetnek benne olyan reszek, amit mar az sem ert aki csinalta.
Amugy csak amiatt hogy Java, nem hinnem hogy sokszoros memoriat igenyelne. Inkabb az elobbi elrontott tervezesi lepeseket okolnam.
Ha igy van, akkor viszont jobb is hogy Javan fut. A GarbageCollector elvegzi nehany percenkent a takaritast, ami egy C++ memory leaknel a program vagy a teljes operacios rendszer eletebe kerulne. (Smartpointerekkel meg sokkal nem lesz gyorsabb.)
A JVM memóriafogyasztása nem egyenlő a játék memória fogyasztásával. Annak, hogy nem írják át 2 oka van:
-1: Sok idő, ami sok pénz, ami nem térül meg mert így is rengeteg a bevétel.
-2: Az összes minecrafthoz írt modot/plugint kukázni kellene.
Off: Egyértelműen ha átírnák normálisan építenék fel, ahol nem lenne memory leak.
"Lemásolva" valóban felesleges lenne átírni, ahogy te is írtad nem lenne lényegi különbség.
Egyébként itt [link] egy C++ nyelven írt Minecraft másolat. Természetesen sokkal kevesebb dolog van benne, mint az eredeti játékban így ennek a sebessége nem mérvadó, és nem csak ezen okból.
"Amugy csak amiatt hogy Java, nem hinnem hogy sokszoros memoriat igenyelne."
Hát a szemétgyűjtés miatt de igen. Ha érted a szemétgyűjtés periódikus futását, abból már egyértelműen következik a nagyobb memóriahasználat. És akkor a szinte mindent a heap-re rakunk elvről nem is beszéltem.
"Ezzel szemben a Java miatt emberek tucatjai panaszkodnak a világ nyelvén arról, hogy 4GB RAM-al is szaggat a játék."
Lásd: Garbage Collector latency.
"C++ memory leaknel a program vagy a teljes operacios rendszer eletebe kerulne. (Smartpointerekkel meg sokkal nem lesz gyorsabb.)"
Egyfelől ha egy C++ program magával rántja az oprendszert, az az oprendszer hibája (név szerint Windows). Ugyanis az az alapvető dolga, hogy elkülönítse a folyamatokat. Maximum a programod áll le, mert ez nem driver. És smartpointerekkel, de még azzal is gyorsabb lenne. Persze kevesebb pointerrel lenne a leggyorsabb.
Szerintem használjunk MineTest-et!! :D
Minetest 4ever!
Köszönet #7-esnek! ;)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!