作者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/cn.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