Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Crypton
![](images/avatars/13186152744c913c097c4f1.png)
Založen: 14. 05. 2009 Příspěvky: 306 Bydliště: The Void
|
Zaslal: 30. květen 2011, 16:12:59 Předmět: Cpp vs Lua - Dilema |
|
|
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](images/smiles/icon_wink.gif) _________________
![](http://arcanum.game-alive.com/matchmaster/overview_large.gif) |
|
Návrat nahoru |
|
![](templates/subSilver/images/spacer.gif) |
nou
![](images/avatars/7406709246ab60d263459.gif)
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 30. květen 2011, 19:35:52 Předmět: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 31. květen 2011, 10:04:12 Předmět: Re: Cpp vs Lua - Dilema |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
FLVjek
![](images/avatars/8708938984bf06053ee5f4.jpg)
Založen: 21. 09. 2007 Příspěvky: 125 Bydliště: Brno
|
Zaslal: 31. květen 2011, 12:28:39 Předmět: |
|
|
@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 |
|
![](templates/subSilver/images/spacer.gif) |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 31. květen 2011, 12:48:31 Předmět: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
FLVjek
![](images/avatars/8708938984bf06053ee5f4.jpg)
Založen: 21. 09. 2007 Příspěvky: 125 Bydliště: Brno
|
Zaslal: 31. květen 2011, 15:09:21 Předmět: |
|
|
@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 |
|
![](templates/subSilver/images/spacer.gif) |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 31. květen 2011, 16:55:19 Předmět: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
FLVjek
![](images/avatars/8708938984bf06053ee5f4.jpg)
Založen: 21. 09. 2007 Příspěvky: 125 Bydliště: Brno
|
Zaslal: 1. červen 2011, 09:19:50 Předmět: |
|
|
@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 |
|
![](templates/subSilver/images/spacer.gif) |
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 1. červen 2011, 11:48:55 Předmět: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
FLVjek
![](images/avatars/8708938984bf06053ee5f4.jpg)
Založen: 21. 09. 2007 Příspěvky: 125 Bydliště: Brno
|
Zaslal: 6. červen 2011, 16:28:30 Předmět: |
|
|
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 |
|
![](templates/subSilver/images/spacer.gif) |
|