看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/C_and_CPP/M.1484745230.A.918.html
Neisseria: 感謝大大說明,現在比較有概念了 01/18 21:34
CoNsTaR: 對C來講,或許包給Lua做事的部分可以在函式名稱上有區別 01/19 03:54
CoNsTaR: 沒有人規定給C呼叫的函式一定要和C一樣快 01/19 03:54
CoNsTaR: 但是當你的系統裡面存在越來越多這種和表面上看起來有一 01/19 03:54
CoNsTaR: 點點不一樣的東西 01/19 03:54
CoNsTaR: 我想累積下來一定也不是什麼好事吧~ 01/19 03:54
hichcock: 這篇寫的很棒ㄚ~ 01/19 09:02
hichcock: 重點在於 C + Lua 可以把效能 + 彈性的效果最大化 01/19 09:17
shadow0326: 推 01/19 10:51
eye5002003: 補個優點,lua語法簡單,有機會開放讓非程式人員修改 01/22 22:46
alex70266: 重點是彈性阿,C call lua script 包 C module很常用 01/26 21:57