1) ... můj problém to ještě neřeší. Já bych potřeboval vytvořit sadu funkcí ve skriptu, které bych volal v rámci C++ kódu. Umí to Lua (nebo to jen zase nogómu)?
2) Otázkou je taky, zda takové volání externího bitekódu / parsování skriptu neužírá výkon. Dejme tomu, že mám nějaké herní objekty (např. sprity), a všechny obsahují funkci update() v jejímž rámci je prováděna aktualizace hodnot struktůry daného objektu tak, aby se oběkt choval požadovaným způsobem. Abych nemusel při každém požadavku nějaké změny v chování daných oběktů zasahovat do zdrojáku aplikace, vyřeším to například tímto způsobem (popisovaným v článku). Je logické že např. u her bude takováto metoda u podobných oběktu volána dost často a velká režie na volání externího kódu by mohla být docela problém....
ad 1. Vzdyt presne k tomu je lua urcena :-)
ad 2. Vzhledem k tomu, ze lua se pouziva na skriptovani v mnoha komercnich hrach, napri i WoW, tak cena za prepina kontextu nebude dramaticky vysoka.
add 1) No, máte pravdu. nějak mi to nedocvaklo :)
add 2) Nějak ve mě hlodají pochybnosti, nebo se mi to spíš moc nechce věřit. Ale - pravda - nic mi nebrání si to sám vyzkoušet.
muzete se kouknout jak to resi framework love2d.org, ten je na lua zhusta zalozen. IMO je hloupost volat update metodu na spritech, scriptuje se vetsinou high-level logika (samotne game objekty), a i tak je asi lepsi nejaky event system.
1) pokud dokážeš získat ukazatel na tu funkci, tak není problém. Ten by nastal jen u nestatických metod, ty mají v hlavičce jeden parametr navíc, navíc mám dojem, že na tyto funkce nejde získat ukazatel. Asi Ti pomůže http://csl.sublevel3.org/lua/, ty příklady samozřejmě chodí i ve VC, BCC apod. Pokud by nevyhovoval "céčkový základ" Lua, lze použít různé C++ wrappery, například http://www.steve.org.uk/Software/lua-c++/. Ještě se o tom zmíním příště.
2) pokud se zdroják nejdříve přeloží do bajtkódu, odpadá část pro jeho parsing a překlad, nehledě na to, že bajtkód je menší a načítá se rychleji (i když u zdrojáků < 10 mega se to asi nepozná :-). Volání Lua2c nebo Lua2c++ něco stojí (nepoužívá se standardní stack frame), ale většinou to není nijak hrozné, záleží samozřejmě na způsobu použití.
1) Dík přesně něco takovýho potřebuji, hned to prozkoumám.
2) " ...záleží samozřejmě na způsobu použití." Hmm... no právě. :D O něčem podobném uvažuji už dlouho, ale právě obavy z vyšších režii a následné zpomalení aplikace mi v tom zatím brání. Zkusím - uvidím.
I na nestatickou metodu lze ziskat ukazatel pomerne bez problemu, a pote jej i volat, jediny co, tak by mela byt pokud mozno nevirtualni :) (ale i to jde obejit, struktura vtable je znama)
Je lépe koncipovat skriptování tak, aby probíhalo na vyšší úrovni a výkonnostně náročné operace byly prováděny v nativním kódu, LUA může řešit občas něco - nějaké změny stavu, změny logiky chování, ale asi bych ji nenasadil každý frame na každý objekt