Názory k článku
Programovací jazyk Lua vestavěný do aplikací
Teď už to začíná být zjímavé, ale ...
celé vlákno2) 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....
Re: Teď už to začíná být zjímavé, ale ...
celé vláknoad 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.
Re: Teď už to začíná být zjímavé, ale ...
celé vláknoadd 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.
Dík. :)
Re: Teď už to začíná být zjímavé, ale ...
celé vláknoRe: Teď už to začíná být zjímavé, ale ...
celé vláknoCLUAConsole:SetCurrentXP("89000")
Re: Teď už to začíná být zjímavé, ale ...
celé vlákno2) 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í.
Re: Teď už to začíná být zjímavé, ale ...
celé vlákno2) " ...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.
Díky moc.
Re: Teď už to začíná být zjímavé, ale ...
celé vláknoLua ve hrách
celé vláknorozdily C vs. C++
celé vláknoS tim nemohu souhlasit, jednoduche se mi to zda jen v C.
Napr. projekt fxlua - bindigs lua pro fox-toolkit -> to nevypada tak jednoduse.
Re: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vlákno- kombinace skriptovaci jazyk + C jde jednoduseji nez skriptovaci jazyk + C++. To jsem vycetl napr. u swigu - tam myslim rikaji v manualu, co jde jednoduse a co dokonce vubec nejde. Myslim, ze tam psali, ze to je prave tou C++
- v diskuzich ( a ze uz jich bylo na netu miliony) o tom, jestli ma byt nejaka GUI v C nebo C++ se najde vzdy argument, ze C implementace my vyhodu v jednodussim spojeni s nejakym skriptovacim jazykem (typicke srovnani gtk/Qt)
Dovedu si predstavit, ze kdyz mam nejaky hotovy toolkit, ktery ma nejake mechanismy (napr. to mapovani udalosti), tak ze se musim poprat i s toto problematikou - ale ve srovnani C/C++ vychazim z toho, ze i C implementace nejakeho toolkitu by nejak mapovala udalosti - te praci se tedy nevyhnu.
Ale jak napsal i vas predrecnik, ten nazor akceptuji, ze ta slozitost u te fxlua me zmatla tim smerem, ze jsem ji kompletne pricital jen te C++.
Rad bych, kdyby to mohl nekdo fundovane vysvetlit.
Re: rozdily C vs. C++
celé vlákno1) Nevěřím tomu, že by řešení C a script bylo výhodnější než C++ a script. Možná pouze z toho hlediska, že pokud se budete snažit přenést takové řešení do prostředí C++, pravděpodobně to nebude tak obtížné jako v opačném případě. Přicházíte však o možnosti a abstrakce, které vám nabýzí C++ díky třídám a šablonám (nebo je musíte složitě nahrazovat - je-li to vůbec možné). Jinak si myslým, že obě řešení by měla být relativně rovnocenná - záleží na konkrétním projektu a programátorovy (programátorech). v případě Swinngu nevím, ale tam možná omezení můžou být daná Javou.
2) Viz úvod a bod 1. Jinak porovnávání Qt s Gtk je hloupost (ale oblíbená, to je fakt). To už možná QT s Fox Toolkitem.
Re: rozdily C vs. C++
celé vláknoPřicházíte však o možnosti a abstrakce, které vám nabýzí C++ díky třídám a šablonám
Naštěstí tím nepřichází o možnosti a abstrakce, které C++ nikdy nenabízelo, například dynamické objektové systémy, kvalitní koncept funkce (plný lexikální scoping) a podobně.
(nebo je musíte složitě nahrazovat - je-li to vůbec možné).
Leckdy se dá nahrazovat jednoduše, není třeba nahrazovat složitě. Kromě toho se mi zdá, jako byste měl dojem, že C++ templates jsou snad jakýmsi nedostižným vrcholkem všech makrosystémů, který je zapotřebí kopírovat, když je složitý makrosystém zapotřebí.
Můj názor je prostý: šroubovat šroubovákem a zatloukat kladívkem. C++ jsou bohužel kombinačky. Ano, dají se s nimi žvýkat matky a pižlat dráty, ale chce to medaili za hrdinství. :]
Re: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vláknoVetsi problem jsou treba sablony nebo pretizene metody, ktere nejdou rozlisit pri volani ze skriptovaciho jazyka (napr. se lisi typem argumentu, ktery je mapovan ve skriptovacim jazyku na tentyz typ).
Fox toolkit neznam, ale napr. pro Qt je navic potreba se vyporadat s kodem vygenerovanym pres meta-object compiler, ktery spolu s preprocesorem resi prepojovani signalu a slotu ("hack", ktery pridava reflexi, ale psat wrapper bych pro to nechtel ;-))
Re: rozdily C vs. C++
celé vláknoFox Toolkit používá trochu jiný systém pro zpětná volání - zprávy (QT používá systém slot-signal). Jinak je to podobné. Místo rozvíjení potřebných maker v oběktech (i mimo ně) externím programem, je u Foxky využit preprocesor.
Re: rozdily C vs. C++
celé vláknoRe: rozdily C vs. C++
celé vláknoVe slozitejsich pripadech to nekdy neuhodne (misto toho zahlasi neco jako "don't know which overloaded method to use"), je potreba "dovysvetlit rucne".
ach ouvej
celé vlákno* Function lua_open was replaced by lua_newstate to allow the user to set a memory-allocation function. You can use luaL_newstate from the standard library to create a state with a standard allocation function (based on realloc).
Re: ach ouvej
celé vláknoluaopen_* lze samozrejme nahradit luaL_openlibs(). To varovani je napsane proto, ze funkce s parametry se skutecne museji volat pres lua_call(), protoze zpusob ulozeni parametru na zasobniku je v tomto pripade odlisny od std. cecka - opacne poradi + je pridany pocet parametru.
Re: ach ouvej
celé vláknoRe: ach ouvej
celé vláknoRe: ach ouvej
celé vláknolapi.o
lcode.o
ldebug.o
ldo.o
ldump.o
lfunc.o
lgc.o
llex.o
lmem.o
lobject.o
lopcodes.o
lparser.o
lstate.o
lstring.o
ltable.o
ltests.o
ltm.o
lundump.o
lvm.o
lzio.o
debug
celé vláknoVidim to spravne? Budete problematiku debugu probirat?
Re: debug
celé vláknoRe: debug
celé vláknoRe: debug
celé vláknoRe: debug
celé vláknoRe: debug
celé vláknotěch debugerů je více, některé používají standardní debuging interface interpertru, jiné vyžadují úpravu zdrojáků před překladem.
z non-free je pěkný http://www.unknownworlds.com/decoda (debuger s GUI, vlastně celé IDE, ale jak říkám, not-free, non-cost free)
potom je zde cmd. line debugger http://luaforge.net/projects/clidebugger/
nad kterym je postaven http://lua-users.org/wiki/SciteDebug
taktez lze pouzit http://www.keplerproject.org/remdebug/, ktery je mimochodem i soucasti LuaEclipse (ale pro mnoho programatoru to muze byt kanon na vrabce :-)
Osobne si ale myslim (ale je to dano tim, ze me aplikace v Lua maji max. par tisic radku, zadne slozitosti), ze nejjednodussi je primo vyuzit debug interface a pres nej si vytahat vsechny relevantni informace a ty logovat (pokud tedy neni zapotrebi interaktivni debuging, potom je lepsi sahnout po hotovem nastroji nebo si nad debug interfacem udelat nejake callbacky).
V podstate problem muze nastat v pripade, ze se ma soubezne ladit jak ceckovy kod, tak i Lua kod, aby prechod mezi obema castmi byl co nejjednodussi - teoreticky SciteDebug by to resit mohl, ale nemam ho vyzkouseny. Jinak
Re: debug
celé vláknotaktez lze pouzit http://www.keplerproject.org/remdebug/, ktery je mimochodem i soucasti LuaEclipse (ale pro mnoho programatoru to muze byt kanon na vrabce :-)Remdebug je moc pěkná věc, ale LuaEclipse...skoro mi přijde, že používat Eclipse na programování v Lua je takový docela slušný váhový nepoměr. :-]
nejde mi to
celé vláknokdyz to chci zkompilovat tak to hlasi toto:
tom@tom-desktop:~/lua$ gcc -o main main.c /usr/lib/liblua50.a
/tmp/ccaYP80k.o: In function `main':
main.c:(.text+0x44): undefined reference to `luaopen_base'
main.c:(.text+0x58): undefined reference to `luaL_dostring'
collect2: ld returned 1 exit status
nevite co s tim prosim? ani hodina googleni nepomohla, tak se ptam tady.
dekuju
Re: nejde mi to
celé vláknoRe: nejde mi to
celé vláknoVolání z koprogramů?
celé vláknoZaregistrované funkce se nedají volat z coroutin.
function main()
print(getsomething())
coroutine.resume(coreroutine)
end
coreroutine = coroutine.create(
function()
repeat
print(getsomething())
coroutine.yield(mask)
until 1 == 2
end
)
Pokud getsomething() je zaregistrovaná funkce vracející třeba 15, pak výše uvedený kód vydá něco jako
15
function: 0x7f31c0
Nevíte někdo, jak získat z coroutiny hodnotu vrácenou zaregistrovanou C funkcí?

