C++ és LUA

 ( davies007 | 2016. február 22., hétfő - 20:37 )

Adok egy ötletet komolyabb C++ projektekhez, vagy akár kezdő programmereknek.

2évvel ezelőtt, összeszámoltam, hogy a projekteim (különálló, de közös lib és keretrendszer) forgatása kb. 5éven keresztül leírhatatlan időmennyiségbe tellt. Beépített webszerver és webui, ami tudjuk azért rossz mert a legkisebb css változtatásnál azt a részt újra kell fordítani (tudom, nem kellett volna beágyazni, de én úgy akartam).

Readásul std::map nálam elég sűrűn előfordult addig míg át nem álltam c++11 -re mert ott az unordered előtaggal 400% -osra gyorsult, de ezért átkellett írnom nagyjából 200 fájlt, hiába typedefeltem, aztán volt jópár bug is ebből adódóan.

Random jött egy gondolat, hogy belerakom a LUA -t és azt kell mondanom, hogy nagyon megérte.
Oké, hogy scripting, de nem egy PHP lassú, readásul Pure C, egyes funkciók a LUA -ba gyorsabbak mint a C++ -ba, ami különösen jó, hogy ha hiba van akkor nem crashel le az egész program, meg hát a scripting nyelv on-the-fly írható nincs build idő. Most ott tartok, hogy egy komolyabb szoftvert 3nap alatt megírok, jó ehhez kellett 2évnyi LUA/C++ implementáció irása, de érdemes elgondolkodni nem csak játékok terén.

Így a keretrendszer tud bővülni és tiszta marad és átlátható, a LUA állomány meg adott, ha bármit változtatok azonnal látszik és csak pár libet kell hozzá maintanelni.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Hát még ha úgy írtad volna át, hogy a szerver oldal csak egy szabvány mondjuk rest interface-t ad, amit ki tudsz mockolni, és a kliens oldal pedig külön fejlesztetted volna,
html/js/css kombóban, valami frameworkkel (angularjs pl.) :)

Hát na ... maximalista vagyok :)

De nembaj végülis csináltam egy tök használható dolgot, most van egy komplett HTTP/1.1 Threaded Webserverem, one-file-virt.fs, sqlite3, ssl built-in-
LUA meg mint worker és mint http worker futkorászik ciklusba, így 10 szál simán kiszolgál akár 1000 kapcsolatot.
A komolyabb feladatokat meg átadja C++ osztályoknak és vissza, így nem lassú.

De az abszolút pozitív, hogy amit apache+php -val nem azt ezzel meglehet, sőt..

Ez teljesen rendben van, mert kb. ez kell ahhoz, hogy legyen egy backend-ed. Én csak annyit mondtam, hogy a backend ne az egész UI-t provide-olja lua-ból, hanem
csak az adatot (pl. json formátumban) miközben a "kliens" valójában csak a browserben fut.

Szerintem sok esetben ez nagyon erőforrás igényes tud lenni sajnos. Persze meg lehet csinálni jóra, de nem jellemző. Nekem azért szimpi a szinte csak szerver oldali munka, mert nem döglik le a telefon vagy notebook akksi a weboldal használatával.

de ha jól értem akkor ő embedded fejleszt, ott meg pont hogy a szerver oldali terhelést lehetne megspórolni..

Embedded: is-is.

A project célja a cross-platform volt és a függőségek minimalizálása, raspberry-pi -n elfut.

Többnyire adatregisztráló szoftverek épültek belőle és másodpercenként több száz adatot kér be és dolgoz fel, így a webserver minimál erőforrást emészt fel a többihez képest.

Pl: Zabbix szerű: szerverek (SMART,CPU,RAM,MEM,LOG) rajzolása.
Pl: Cisco SNMP, Network Discovery, Network Analysis, ARP-Scan.

Inkább a szerver oldali részt dolgoztatom, és használok CACHE -t, amit lehet és érdemes a memóriában tartok.

@sz332:
Az angularjs és realtime weboldalakban van a jövő különben, mert egyre több olyan oldal van ahol ajax -al történnek a lapváltások is, csak én ehhez hülye vagyok :)
A Designhez meg főleg. :) De ha jól tudom, akkor egyes okostelefonok is HTML5 UI és talán pont az angularjs -re alapul, de lehet rosszúl tudom.


Még egy kis tipp LUA -ra:

Viszont amivel sok CPU időt takarítok meg a RAM hátrányára:
Felallokálja a szálakat és opcode-ba húzza a LUA -t, így sajnos a RAM az nem éppen dinamikus mert az egész programrészt ha fog kelleni ha nem kiteszi ramba, viszont megspórolom az interpreter idejét. Ha egy szál pedig elévül (beállított érték: 3600mp) (potenciális memory leak) akkor leáll és végíg fut egy cleanup, aztán újra felallokálja azt. Így a webserver 33ms alatt kiszolgál egy komolyabb adatbázis és UI-ból összerakott HTML dashboard-ot.

:)

Lattam mar olyan (eleg nagy) projectet, amiben C++ es Lua keveredett. Plusz az Android portban volt Java, az iOS-ben ObjC, es az egeszet C tartotta ossze. Egeszen jol mukodik.

Arra erdemes meg figyelni, hogy itt - sok mas nyelvvel ellentetben - egyetlen szamtipus van, ez egy soft float embedded cuccon nem jo, ha a default marad (asszem double). Viszonylag konnyen atallithato int-re, erdemes is megtenni.

Felig off: tudsz valami jo tutorialt C++ es Lua kombinalasahoz? Vagy csak siman hasznalhato Lua tutorialt?

--
Is that a banana in your pocket, or are you just happy to see me?
Neither, it's my new iPhone.

Foglalkoztál a biztonsággal is? Lásd például:: https://youtu.be/N_Q8IE17oZs

Ha jól értettem, a videóban a trükk az, hogy engedik custom modok írását, amikkel viszont trükkös dolgokat lehet csinálni. Az ő esetében erről
szó nincs.