作者littleshan (我正在想要換什麼)
看板C_and_CPP
標題Re: [問題] 請問有在用 Lua 的大大們...
時間Wed Jan 18 21:13:47 2017
※ 引述《Neisseria (Neisseria)》之銘言:
: 最近朋友推坑 Lua,試了一下,語法不會太難
: 感覺有點像語法比較乾淨的 JavaScript,還蠻有意思的
Lua 超讚的啊,不只是語法乾淨,整個 runtime 也很小
後面我再講為什麼這個「runtime很小」扮演重要角色
: 後來試著將 Lua 和 C 結合,採用以下方法:
: 法 1: 分別用 dostring 將兩段 Lua code 分別死在 C 程式中
: 範例 https://pastebin.com/FQn1WZUa
: 法 2: 將 Lua code 寫在外面,C 只是用來呼叫 Lua script
: 範例 https://pastebin.com/zfviHkaK
: 但是,覺得用比較快的語言 (C) 包比較慢的語言 (Lua) 好像怪怪的
: 是不是應該先寫 C struct (as class),再用 Lua 呼叫
: 最後再用 C 將 Lua 包起來,像這樣:
: C main app --> Lua script --> C struct (as class)
: 不知道 Lua 實際上怎麼用會比較好用
: 上來問各位大大
: 感謝 C/C++ 版
C 與 Lua 會結合,就是因為沒有十全十美的程式語言
C 的優點是執行效率高,缺點是寫起來麻煩又不安全(undefined behavior)
Lua 跑起來雖然慢,但寫起來簡單,開發速度快
我們要截長補短,所以並沒有一定要讓誰呼叫誰比較好的規則,而是看需求:
* 程式規格固定、需要高效率、或是要呼叫底層函式的部份用 C 寫
* 規格時常變動,需要快速做出來驗證效果的,用 Lua 來寫
* 想要更高的彈性,因此設計 plug-in 系統,更適合用 Lua
比如說你想做個爬網頁的程式,那麼開 socket 的部份自然得用 C 寫
但是網頁抓下來後你可能想做各式各樣的動作,像是存圖片、掃瞄關鍵字等等
這部份用 Lua 寫就可以很靈活的變化,這種情況是 Lua 呼叫 C
又比如說許多遊戲引擎使用 C++ 來實作運算吃重的核心
但是會在特定位置呼叫外部的 Lua script
這麼一來就可以用 Lua 快速實做出不同玩法的遊戲
等到玩法確定後,再把需要效能改善的部份用 C++ 重寫
如果全部都用 C++ 開發,那麼開發時程是會大幅拉長的
另一個 Lua 的優勢是它的 runtime 很小,只依賴 standard c library
只要環境能跑 C 就可以把 Lua runtime 編起來跑
在 C 程式中包進一個 Lua interpreter 比起 python / ruby 是簡單許多的
而且正因為 Lua standard library 功能非常陽春
當你想要設計 plug-in 系統時,會比較容易去禁止 plug-in 做壞事
反正它真需要什麼底層功能,你再給它對應的 library 即可
沒有人規定給 C 呼叫的 function 一定要跑得和 C 一樣快
選擇適當的工具去滿足開發需求,這才是程式設計師的專業所在
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.25.243.240
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1484745230.A.918.html
1F:推 Neisseria: 感謝大大說明,現在比較有概念了 01/18 21:34
2F:推 CoNsTaR: 對C來講,或許包給Lua做事的部分可以在函式名稱上有區別 01/19 03:54
3F:→ CoNsTaR: 沒有人規定給C呼叫的函式一定要和C一樣快 01/19 03:54
4F:→ CoNsTaR: 但是當你的系統裡面存在越來越多這種和表面上看起來有一 01/19 03:54
5F:→ CoNsTaR: 點點不一樣的東西 01/19 03:54
6F:→ CoNsTaR: 我想累積下來一定也不是什麼好事吧~ 01/19 03:54
7F:→ hichcock: 這篇寫的很棒ㄚ~ 01/19 09:02
8F:→ hichcock: 重點在於 C + Lua 可以把效能 + 彈性的效果最大化 01/19 09:17
9F:推 shadow0326: 推 01/19 10:51
10F:推 eye5002003: 補個優點,lua語法簡單,有機會開放讓非程式人員修改 01/22 22:46
11F:→ alex70266: 重點是彈性阿,C call lua script 包 C module很常用 01/26 21:57