.[ ČeskéHry.cz ].
Cpp vs Lua - Dilema

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Game Design
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Crypton



Založen: 14. 05. 2009
Příspěvky: 306
Bydliště: The Void

PříspěvekZaslal: 30. květen 2011, 16:12:59    Předmět: Cpp vs Lua - Dilema Odpovědět s citátem

Zdravím ve spolek,

před nějakým časem jsem začal rozšiřovat svůj engine o skriptovací jazyk Lua, takže jsem nabindoval některé třídy a funkce abych je mohl používat přímo ve skriptech.

To bindování je pro mě až neúnosně časově náročné, i když mám na to napsané šablony a třídy pro všechny aspekty tohoto jazyka (stack, state, table, object, etc.), jakékoliv změny v tom enginu musím hned promítnout i do skriptů, takže musím upravovat všechno dvakrát. Všimnul jsem si taky že ten kód co jsem napsal v cpp, jsem pak "musel" stejně přepsat do lua...

Takže nastává otázka, proč to vůbec bindovat, proč to rovnou nenapsat v lua? a co napsat v lua a co v cpp? jak se při tom rozhodovat? co brát v uvahu?

Nechtěl bych jít do extrémů, takže bych nechtěl celou hru napsat v lua, tak jak to udělali u UO klienta Iris2, ale zase nechci aby to bylo nějak omezené pro případné modifikace.

Chci aby ta hra byla hodně modder-friendly, ale zase nechci aby jí to nějak šíleně zpomalilo, tím že bych dělal zbytečně některé věci na vysoké úrovni (jako např. volání OpenGL přes Lua).

Má s tím tady někdo nějaké zkušenosti? Pokud ano, byl bych rád za vaše rady a připomínky.

Mějte se fajn Wink
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 30. květen 2011, 19:35:52    Předmět: Odpovědět s citátem

co takto skusil tolua++. to berie ako vstup nomalny hlavickovy .h subor a vypluje cpp kod na bindovanie do Lua.

nezerie to samozrejme uplne vsetko z C++ ako su napr template. takze treba bud napisat zjednoduseny hlavickovy subor pre tolua alebo dat do normalneho komentare
// tolua_start
// tolua_end
// tolua_export

napriklad treba vystrihnut vsetky private/protected metody pretoze tolua automaticky vytvory bind na tieto premenne a metody a clovek potom dostane pri kompilacii hlasku a pristupe k private metode. ukazka takeho hlavickoveho suboru.
kód:
#include <iostream>

using namespace std;

class ToLua{//tolua_export
    int a;
    float b;

    public://tolua_begin
    ToLua();
    ToLua(int i, float f);
    virtual ~ToLua();
    int geta();
    float getb();
    void extra();
    virtual void virtualna();
    ToLua operator+(ToLua &d);
};

class ToLua2 : public ToLua
{
    public:
    ToLua2(){}
    void virtualna();
};
//tolua_end

podporuje to normalne aj virtualne metody. Lua kod potom vyzera asi takto
kód:

brb = ToLua:new();
n = brb:geta();
a = n+brb:getb();
brb:delete();

_________________
Najjednoduchšie chyby sa najtažšie hľadajú.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 31. květen 2011, 10:04:12    Předmět: Re: Cpp vs Lua - Dilema Odpovědět s citátem

Nouma napsal:
Zdravím ve spolek,

před nějakým časem jsem začal rozšiřovat svůj engine o skriptovací jazyk Lua, takže jsem nabindoval některé třídy a funkce abych je mohl používat přímo ve skriptech.

To bindování je pro mě až neúnosně časově náročné, i když mám na to napsané šablony a třídy pro všechny aspekty tohoto jazyka (stack, state, table, object, etc.), jakékoliv změny v tom enginu musím hned promítnout i do skriptů, takže musím upravovat všechno dvakrát. Všimnul jsem si taky že ten kód co jsem napsal v cpp, jsem pak "musel" stejně přepsat do lua...

Takže nastává otázka, proč to vůbec bindovat, proč to rovnou nenapsat v lua? a co napsat v lua a co v cpp? jak se při tom rozhodovat? co brát v uvahu?


jasne. potykal jsem se se stejnymy dilematy. Pro zacatek si zkus tuto uvahu otocit ve smyslu psat aplikaci/hru jen ve skriptovacim jazyce a do cpp presouvat jen veci ktere si to hlavne z duvodu rychlosti vyzadaji. Usetris spoustu casu nedulezitym psanim bindings namisto tvoreni hry/aplikace.

To me mimojine naucilo nepsat v c++ silene template hruzy ale jit primocareji k problemu konkretni funkcionality. V praxi mam tedy jednu binarku (run / run.exe) ktera za parametr vyzaduje skript (v nem a dalsich je aplikace napsana). Binarka embedduje interpreter + bindings na (core) funkce. Funkce ktere mam v c se tykaji hlavne prace s meshem, opengl, resource management, apod. - muzu kdyztak hloubeji rozebrat.

Osobne jsem si vybral python a javascript (spidermonkey) protoze lua mi z nekolika duvodu nesedi. Na druhou stranu python muze jen zavidet rychlost luaJit [ luajit.org ]. spidermonkey je ale od verze 1.8.5 pekelne rychly a celkove mi vyhovuji prototypovaci vlastnosti javascriptu.

Doporucuju se vyhnout ruznym xxx++ bindovacim nastrojum typu tolua++, boost::python apod. kazde z nich ma sve vady na ktere clovek narazi a aby je vyresil tak stejne musi proniknout do api konkretniho jazyka a kdyz uz se v nem orientuje tak zjisti ze spis bindovaci knihovny pridavaji problemy (boost::python je jednoznacnym prikladem. rozlustit napriklad chybovou hlasku kompilatoru je nadlidsky ukol).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FLVjek



Založen: 21. 09. 2007
Příspěvky: 125
Bydliště: Brno

PříspěvekZaslal: 31. květen 2011, 12:28:39    Předmět: Odpovědět s citátem

@quas4: Taky prozkoumavam moznosti skriptovani JavaScriptem. Zvazoval jsi V8? Proc jsi dal prednost SpiderMonkey?
_________________
Martin Al!eN Procházka
ředitel závodu Hammerware, s.r.o.
následuj nás: http://twitter.com/hammerware/
příspívám na twitter CH: http://twitter.com/ceskehry/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 31. květen 2011, 12:48:31    Předmět: Odpovědět s citátem

FLVjek napsal:
@quas4: Taky prozkoumavam moznosti skriptovani JavaScriptem. Zvazoval jsi V8? Proc jsi dal prednost SpiderMonkey?


V8 jsem zvazoval. Je sice v benchmarcich rychlejsi, ale ma prakticky nulovou dokumentaci. API spidermonkey mi pripadalo blizsi pythonu se kterym mam nejvetsi zkusenosti.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FLVjek



Založen: 21. 09. 2007
Příspěvky: 125
Bydliště: Brno

PříspěvekZaslal: 31. květen 2011, 15:09:21    Předmět: Odpovědět s citátem

@quas4: Rozumim, nekoho na tu dokumentaci v Googlu priradit mohli. API pro integraci V8 me ale prijde velmi solidni. Problem je spis nutnost mit povoleny JIT za behu, coz znamena ze na iOS ma utrum. SpiderMonkey neni JIT?
_________________
Martin Al!eN Procházka
ředitel závodu Hammerware, s.r.o.
následuj nás: http://twitter.com/hammerware/
příspívám na twitter CH: http://twitter.com/ceskehry/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 31. květen 2011, 16:55:19    Předmět: Odpovědět s citátem

FLVjek napsal:
@quas4: Rozumim, nekoho na tu dokumentaci v Googlu priradit mohli. API pro integraci V8 me ale prijde velmi solidni. Problem je spis nutnost mit povoleny JIT za behu, coz znamena ze na iOS ma utrum. SpiderMonkey neni JIT?


me prave misty prislo zmatene, holt mam radeji klasicke c api nez template systemy. Nad v8 toho vznika taky dost - napr. aktualni hype kolem nodejs.org . Spidermonkey ma hned nekolik jit kompilatoru - posledni Jagermonkey dava velmi pekne vysledky, ale interpreter muze bezet i "normalne" bez jit (jit je mozne kompletne vyradit uz pri kompilaci knihovny).
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FLVjek



Založen: 21. 09. 2007
Příspěvky: 125
Bydliště: Brno

PříspěvekZaslal: 1. červen 2011, 09:19:50    Předmět: Odpovědět s citátem

@quas4: To zni jako zajimava alternativa prave kvuli tomu iOS. A jak to ladis? Jde k tomu pripojit debugger jako k V8?
_________________
Martin Al!eN Procházka
ředitel závodu Hammerware, s.r.o.
následuj nás: http://twitter.com/hammerware/
příspívám na twitter CH: http://twitter.com/ceskehry/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 1. červen 2011, 11:48:55    Předmět: Odpovědět s citátem

FLVjek napsal:
@quas4: To zni jako zajimava alternativa prave kvuli tomu iOS. A jak to ladis? Jde k tomu pripojit debugger jako k V8?


z projektu http://code.google.com/p/piston/ jsem obslehl jak spravne pouzit jsdbgapi (soucast spidermonkey) a napsal jsem si jednoduchy built-in debugger.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FLVjek



Založen: 21. 09. 2007
Příspěvky: 125
Bydliště: Brno

PříspěvekZaslal: 6. červen 2011, 16:28:30    Předmět: Odpovědět s citátem

No teda SpiderMonkey ma daleko horsi API jako V8, to se neda ani srovnavat. Uz jsem se tam ale rozkoukal a jde zkompilovat na iOS takze bezva.
_________________
Martin Al!eN Procházka
ředitel závodu Hammerware, s.r.o.
následuj nás: http://twitter.com/hammerware/
příspívám na twitter CH: http://twitter.com/ceskehry/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Game Design Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna