Re: [問題] 請問有在用 Lua 的大大們...
※ 引述《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
推
01/18 21:34, , 1F
01/18 21:34, 1F
推
01/19 03:54, , 2F
01/19 03:54, 2F
→
01/19 03:54, , 3F
01/19 03:54, 3F
→
01/19 03:54, , 4F
01/19 03:54, 4F
→
01/19 03:54, , 5F
01/19 03:54, 5F
→
01/19 03:54, , 6F
01/19 03:54, 6F
→
01/19 09:02, , 7F
01/19 09:02, 7F
→
01/19 09:17, , 8F
01/19 09:17, 8F
推
01/19 10:51, , 9F
01/19 10:51, 9F
推
01/22 22:46, , 10F
01/22 22:46, 10F
→
01/26 21:57, , 11F
01/26 21:57, 11F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):