文档章节

关于lua你应该知道的

gaojiefeng
 gaojiefeng
发布于 2016/04/01 16:14
字数 1339
阅读 13
收藏 0

我将向你解释为什么要使用Lua。我写这篇文章最初的动机是由于Lua邮件列表中的一则消息 “why isn’t Lua more widely used?” 。针对这个消息的回复各种各样,有的说是因为缺少类库,而我更赞同另外一个观点,那就是大部分人都不喜欢自己动手 (do it yourself)的方式来解决问题。我常常把Lua比作Arch Linux。这也就注定了Lua是一个小众产品。下面我将列出几条为什么我要使用Lua的理由:

1. 可以和 C/C++ 集成我的编程经历不长,但是我已经使用过很多种语言了,包括Lisp,Scheme,Python,Perl,Bash,VBA,SQL等等。但是它们没有一个可以像Lua那样可以和C混着使用。C语言的API非常的干净和直观,你花一个下午的时间就可以上手了。如果你对这个感兴趣的话,你可以看看“PIL’s section on the C API” 。为什么这个特性很重要呢?首先,如果你有现成的C/C++类库的话,你可以很容易的在Lua中调用这些API。或者你也可以写一个脚本让Lua在C中执行。这也意味着Lua的程序不会有速度问题。如果你还是觉得Lua不够快的话,你可以用C完全重写这段代码。虽然别的语言的程序也可以用C重写,但是我还没有发现谁能比Lua更方便的做到这一点。


2. 快速、简洁相比于其他语言,Lua的实现是非常高效的。也许是因为Lua使用的是“基于寄存器的虚拟机”  而不是基于堆栈的虚拟机。或者说使用Lua的开发者都非常的牛逼。不管怎样,你几乎不需要顾虑Lua代码的性能问题。但是如果你对性能还是不满意的话,你可以尝试使用LuaJIT:

“LuaJIT是公认的运行最快的动态语言的实现,并且对内存的使用少,虚拟机占用低于125K,JIT编译器占用不到85K (在x86环境中)。”

LuaJIT可以几乎和C代码饿速度媲美。不管怎样,如果你还是对速度不满意的话,你可以试试我在第一点中提出的建议。

3. 教育作用虽然这不是一个编程语言的功能,但是我发现使用Lua让我对计算机科学的整体了解有所提高。比如说,这篇文章是关于 Lua 5.0 的实现的,让我对虚拟机是如何实现的有了一个了解。阅读源代码让我大开眼界。我认为这一切都得益于Lua有条不紊的改进

4. 函数式编程Lua提供了函数式编程的架构,让编程更加的有趣。例如 anonymous functions, higher order functions, lexical closures,proper tail calls等等。这些特性不是语言的一些语法糖,而是Lua从底层就整合了这些特性。比如说,Lua的每一个方法都是一个值(比如数字2,或者字符串“ktr”),也就意味着每一个方法都是匿名的。你只要给它取个名字,然后你就可以调用它了。你可以给 print 重新赋值: print  = math.sin你可以利用这个功能创建沙箱。如果 print 是一个危险的操作,你可以替换成你自己的 print 方法或者从全局中删除这个方法。

5. 任何东西都是一张表在Lua中,任何一个变量类型都是一张表,例如Array,Hash,“module”或者全局变量等等。也就是说你可以“require”一些模块(类似Python的import语句)并且把结果当错table来处理。在Python中,你可以__import__(‘…’) 一些模块,然后返回值的变量就可以通过类似 var(module) 的方式来访问。在Lua中,你可以通过 module[var] 的方式来访问模块中的变量。我这里提到Python是为了强调不同之处,说明Lua更容易使用。这也让你学习Lua的语法更加快速。你不用担心list和dictionary、package有什么不同。

6. 一致性不知你是否意识到,Lua是非常一致的语言。它的很多功能都是做的恰到好处。比如说,Lua没有“for”循环直到Lua 4.0,也就是Lua语言发布7年以后。这是因为while循环更为通用,而且语法更简洁。Lua的开发团队相对来说比较保守,他们不接受patch,所以Lua的进化比较缓慢,但是比较平稳。你知道所有的功能都是有规划的在进行,也就意味着你不能指望你所期待的功能可以被很快的实现。7. 可移植性关于这一点我不会讲很多细节,但是Lua基本上可以在任何环境中运行。Lua的代码是按照“Clean ANSI C”的标准编写的,所以如果你有一个C的运行环境,你就可以运行Lua。总结:Lua是一门非常简单但是强大的语言。 


本文转载自:http://qqbbs.luaer.cn/g-37010689-622.html

gaojiefeng
粉丝 0
博文 5
码字总数 983
作品 0
朝阳
私信 提问
【步兵 cocos2dx】教你搭建一个嗖嗖的lua项目

【步兵 cocos2dx】教你搭建一个嗖嗖的lua项目 By EOS. 最开始,我决定要吐槽,吐一个大大的槽~ 用cocos new 新建一个lua项目竟然运行不起来~ 就服cocos,我怀疑这不是一个引擎公司,而是一个...

id___e_o_s___
2017/04/23
0
0
1-STM32嵌入LUA开发(控制小灯闪耀)

今天因为想让STM32完美的处理字符串,所以就想着让STM32嵌入lua,本来想用f103c8t6,但是一编译就提示内存不足...... 所以单片机的型号选择的 我下载到了RBT6的芯片上测试的 先说一下最终实现的...

杨奉武
2018/07/16
0
0
Lua5.0 示例程序抽样

Lua5.0 的 test 目录里是一些 Lua 示例程序,有些挺有意思的,这里拿出来看看。 简单的介绍在 README 文件里有描述。 这些程序应该就是原作者的团队写的,有的程序的含金量很高,也很有意思。...

晓寒
2015/09/08
147
0
Lua脚本在C++下的舞步(一)

现在,越来越多的C++服务器和客户端融入了脚本的支持,尤其在网游领域,脚本语言已经渗透到了方方面面,比如你可以在你的客户端增加一个脚本,这个脚本将会帮你在界面上显示新的数据,亦或帮...

长平狐
2012/08/13
342
0
C++ 封装的 Lua 扩展库--fflua

在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特点,今...

EvanZhaoOwn
2014/12/11
9.5K
4

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部