.[ ČeskéHry.cz ].
Lua C++ Wrapper

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



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 6. listopad 2016, 13:18:53    Předmět: Lua C++ Wrapper Odpovědět s citátem

Poslední dobou jsem měl více času, takže jsem se konečně dostal na to, abych se podíval na jazyk Lua a jeho přidání do mého enginu.

Potřeboval jsem wrapper pro C++. Sice je plno existujících variant, ale

    a) Pořádně jsem nepobral jak fungují a procházet zdrojáky byl děs / běs. Většina navíc není C++11, takže plno věcí je tam dost přes ruku, když jde napsat kratším způsobem.

    b) Chtěl jsem si to zkusit napsat sám (no zabralo to jen cca. 3 týdny... ale ne soustavné práce Smile )

    c) Konečně jsem více pochopil templates v C++11

Každopádně, zatím pořád work-in-progress, ale dávám první verzi:

https://github.com/MartinPerry/LuaWrapperCpp

Byl bych rád, kdyby se někdo podíval a případně mi napsal připomínky. Určitě to není moc "hezký" kód, místy je tam dost bordel. Nicméně zatím to splňuje moje požadavky na funkčnost.

Díky

PS: Překlad zatím testován jen pod Visual Studiem 2015. S velkou pravděpodobností tam něco bude vadit pro gcc / clang, ale to zatím nemám jako prioritu Smile

PPS: Zatím jsem neřešil memory-leaky Smile A určitě tam jsou, i když se snažím uklízet Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Ladis



Založen: 18. 09. 2007
Příspěvky: 1533
Bydliště: u Prahy

PříspěvekZaslal: 6. listopad 2016, 14:45:19    Předmět: Odpovědět s citátem

Promiň za rýpnutí, ale jestli tomu rozumím:
  1. Nerozumím cizímu kódu -> napíšu si to odznova.
  2. Vyšší verze programovacího jazyka umí zpřehlednit a uspořit 10 % kódu, takže přepíšu všechen kód aplikace a knihoven (a s příští verzí znova).
  3. Výsledek je stejně jen work-in-progress, takže pro ostatní nevhodný.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 6. listopad 2016, 16:29:39    Předmět: Odpovědět s citátem

1. Nikdy jsem moc "template-heavy" kód nepsal, takže existujícím knihovnám na tomhle postaveným jsem moc nerozuměl (plus jako obvykle, nikdo pořádne nekomentuje, takže...). Občas se mi třeba úplně nelíbila struktura nebo funkčnost dané knihovny (na to nepotřebuju rozumět kódu, prostě vidím jak se používá).
Celkově pro mě bylo snažší se to naučit tím, že si to sám naprogramuju, než se vrtat v cizím kódu a snažit se tam "nacpat" co potřebuju.
Plus pro příště už to budu umět. Za mě to rozhodně ztráta času nebyla. Navíc tím že ten kód znám, tak se mi do toho snadno dopisuje nová funkcionalita, kterou např. existující knihovny nemají.

2. Nechápu... nikde o 10% nic neříkám.

3. Výsledek je pro mě. Nikdo jiný to používat nemusí. Chtěl jsem pouze případné typy ohledně kódu. Je sice fajn, že něco nakodím, ale když mi nikdy nikdo neřekne jestli je to celý blbě nebo ne, tak budu pořád kodit blbě a dělat stejné chyby. Jedna věc je "funkční" druhá věc je "jak je to naprogramovaný". Např. sorting v n^3 je taky funkční, setřídí čísla... ale pro praxi moc použitelný není...
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 7. listopad 2016, 17:21:21    Předmět: Odpovědět s citátem

Co jsem na to zběžně koukal (ty templaty jsou na mě moc hardcore), tak vzhledem mi to přijde pěkné a přehledné (jedna z mých největších slabin).

Jenom jedna drobnost: delete na nulový pointer nemusíš obalovat ifem.

A ještě pro Ladise:
- bastlením všeho z 3rd party kódu se nic nenaučíš

- ad 2) určitě ano pokud to zjednoduší/zpřehlední kód, nejen pokud se to týká nového standardu,

protože z hlediska údržby si na svých projektech nemůžeš dovolit to co velké firmy,

tj. najmout si 100 lidí co to lejno (pokud to necháš do této fáze dospět) budou za tebe udržovat
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 9. listopad 2016, 09:37:36    Předmět: Odpovědět s citátem

Každý má jiný styl a zvyklosti, ale osobně bych poladil interface. Sám jsi psal, že si nejsi jistý, zda tam nejsou memory leaky. Ani se nedivím!.

Například:
kód:
LuaScript * LuaWrapper::AddScript(const LuaString & scriptFileName);

Mám pak na LuaScript volat delete, nebo něco jinýho? Nebo nic a script se uvolní sám? V main.cpp jsi nezavolal nic! :-). Klidně bych použil std::shared_ptr. Případně nějaký menší wrapper objekt a vrátit ho hodnotou (move).
Snaž se aby věci vytvořené přes new neopustily daný kontext. Takovej kód prošpikovanej pointerama a new a delete už dneska nemáme zapotřebí. Jen tim nahráváme takovým těm věčným rejpalům s garbage collectorama.

Dále:
Musí ta LUA běžet v jedný instanci? Já bych ten singleton dal pryč. Ne že by se s tim nedalo žít, ale taky je to takový neohrabaný a svádí to k používání odkudkoliv (nepřehledný návrh). Nehledě na multithreading. Předej ten LuaWrapper referencí v nějakým kontextu a uvidíš, že to je lepší.

A ještě tohle:
kód:
void RegisterClass(const LuaClass & classBind);
void RegisterClass(const LuaClass * classBind);

Co si vybrat? :-)
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 9. listopad 2016, 18:43:44    Předmět: Odpovědět s citátem

To že je to singleton, to byl záměr abych nemohl vytvořit více instancí toho wrapperu, protože to moc nedávalo smysl s ohledem na ten binding metod / globálních proměnných. Popřemýšlím jak to případně upravit...

Ten wrapper by měl po sobě uklidit paměť při jeho "zabití". Což když z toho vytahám reference tak mi zbyde "dangling" pointer a to je blbé. Nicméně vetšinou ten wrapper zabíjím spolu s enginem, takže v mém případě to až tak nevadí.. nicméně jako obecná knihovna je to ale špatný, nějak to zkusím upravit přes shared pointery (který jsem teda nikdy npoužíval, nějak se mi líbí raw pointer Smile)

Ty dvě metody obě dělají to samé Smile Jen jsem tam dal obě varianty... můžu jednu smazat Wink
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 10. listopad 2016, 10:05:04    Předmět: Odpovědět s citátem

Ad singleton:
Já si zase celkem umím představit, že by více instancí mohlo někde dávat smysl. Napadá mě např. loading (načteš skripty pro novou misi a zahodíš všechno starý). No ale i kdyby to smysl nedávalo, tak u singletonu nikdy nevíš, který vlákno ti na něj hrábne, takže musíš do všeho cpát mutexy. Jsou ale případy, kdy se to hodí (logování).

Ad pointery:
shared nebo unique poslouží. Co se týče hlídání toho, aby se wrapper uvolnil jako poslední, na to bych použil asserty a/nebo výjimky.

Obyčejný pointery mám taky rád (kdo by neměl ;-) ), ale jak sem už psal, je vhodné je používat v rámci malého písečku (třída, metoda), ne je roztahat po celým interface.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Ostatní Č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