Lua - 学习/实践

1.应用场景

主要用于学习轻量级嵌入式脚本语言,扩展学习如何通过脚本嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

2.学习/操作

1.文档阅读

Lua 教程 | 菜鸟教程  // Lua 教程

PECL :: Package :: lua // PECL lua扩展

The Programming Language Lua // 官网

Lua: getting started // 开始学习和使用

Lua: demo -- 官方在线实践

结合Redis使用

EVAL | Redis

eval 命令 -- Redis中国用户组(CRUG)

29 | 无锁的原子操作:Redis如何应对并发访问?-极客时间

结合Nginx使用

极客时间 - 145 | OpenResty中的Nginx模块与Lua模块

极客时间 - 146 | 如何在Nginx中嵌入Lua代码

14 | 答疑(一):Lua 规则和 NGINX 配置文件产生冲突怎么办?-极客时间
35 | [视频]实际项目中的性能优化:ingress-nginx中的几个PR解读-极客时间

03 | 指日可待:一步一步搭建秒杀系统(上)-极客时间

03 | 揪出隐藏在背后的那些子项目-极客时间

17 | 为什么能成为更好的Web服务器?动态处理请求和响应是关键-极客时间

扩展

Lua JIT -- Lua的JIT

DynASM  -- DynASM 是用于代码生成引擎 的动态汇编程序。

第21讲 | 如何使用脚本语言编写周边工具?-极客时间

2.整理输出

环境

Mac pro m1

或者

Windows 10

2.1 介绍

Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。

Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。

额外信息

里约热内卢, 巴西第二大城市,(葡萄牙语:Rio de Janeiro,意即“一月的河”),简称里约(Rio),曾经是巴西首都(1763-1960年)位于巴西东南部,为里约热内卢州首府,也是巴西人口第二多的城市,仅次于圣保罗。

圣保罗(葡萄牙语:São Paulo),位于巴西东南部圣保罗州,是圣保罗州的首府、巴西最大的城市,也是南美洲最大最繁华的城市、世界著名的国际大都市。圣保罗于1554年1月25日建市。截至2010年,圣保罗市内有人口1088万,是巴西乃至南半球最大的都市。

详细介绍

Lua: about

中为翻译截图

发布历史 -- php语言诞生于1994年,1995年发布php 1.0 即第一个正式版本

Lua: version history

2.2 安装

要在您的计算机上运行 Lua 程序,您需要一个独立的 Lua 解释器,可能还需要一些额外的 Lua 库。LuaBinaries提供了预编译的 Lua 库和可执行文件 。

使用你最喜欢的文本编辑器来编写你的 Lua 程序。确保将程序保存为纯文本。如果您需要 IDE,请尝试 ZeroBrane Studio

如果你使用 Linux 或 Mac OS X,Lua 要么已经安装在你的系统上,要么有一个 Lua 包。确保您获得最新版本的 Lua(当前为 5.4.4)。

Lua 也很容易从源代码构建,如下所述。

Note:

Mac 上也可以通过 homebrew 安装,便于版本管理。

brew install lua

从源头构建

Lua 非常容易构建和安装。只需下载它并按照包中的 说明进行操作 。

这是一个简单的终端会话,它下载当前版本的 Lua 并在 Linux 系统中构建它:

curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
tar zxf lua-5.4.4.tar.gz
cd lua-5.4.4
make all test
如果您没有 curl,请尝试 wget。

如果您使用 Windows 并想从源代码构建 Lua,则 wiki 中 详细说明

2.3 开始学习/开发

1). 官方在线执行环境

Lua: demo

2). 本地安装,开发工具:

Lua 5.3

 Lua 5.4.4 -- 最新版

需要用哪个版本时便用哪个即可。

IDE:ZeroBrane Studio - Lua IDE/editor/debugger for Windows, Mac OSX, and Linux

下载页面: Download - ZeroBrane Studio - Lua IDE/editor/debugger for Windows, Mac OSX, and Linux

已经安装,界面截图如下:

不过作为解释性脚本,同PHP相同,那么使用vscode, sublime,等文本编辑器应是也可以的,只不过功能可能没有专门的IDE强大,先用着,哪个用着顺手,用哪个。

2.4 语法学习

省略了,就跟着

Lua 教程 | 菜鸟教程 // Lua 环境安装 | 菜鸟教程 -- 还是推荐这个

Programming in Lua (first edition) //  Lua 编程(第一版)

大致看下,语法内容目录 -- 没有很多东西,语言公共的基础/必备部分

剩下的就是一个一个实践,没有很难理解的部分,如果不容易短时间掌握,大家都是如此,这需要时间去消化,理解,辩证,佐证。

2.5 开始实践项目

语法基本过一遍后,就开始写一个demo项目,并且推送到github上,供交流学习。

github 地址:TBD

2.6  生产中解决实际场景

1). Redis与Lua的结合使用

解决原子性问题

2). 嵌入到其他程序中,其实上面的1)就已经是了,

但要求嵌入到C/C++程序中// 如果C/C++不了解,其实没关系,不用写很复杂的程序

3). 游戏行业中,如何适用Lua进行开发?

TBD

4).  极客时间 - 145 | OpenResty中的Nginx模块与Lua模块

如何在Nginx中嵌入Lua代码

极客时间 - 145 | OpenResty中的Nginx模块与Lua模块

极客时间 - 当前播放: 146 | 如何在Nginx中嵌入Lua代码

TBD

后续补充

...

3.问题/补充

1. 使用LUA进行Redis原子性操作时,需要注意的点

29 | 无锁的原子操作:Redis如何应对并发访问?-极客时间

南山
请教一下,lua脚本在数据分片集群使用有没有注意事项呢?

比如访问的缓存数据不在一个分片上的情况会咋样?
2020-10-26

Kaito 回复 南山:
不在一个分片上,会直接报错,这点也需要注意。

2. 扩展 -- lua脚本的性能提升 「加入jit,即使编译」

The LuaJIT Project

3. 如何使用脚本语言编写周边工具?

第21讲 | 如何使用脚本语言编写周边工具?-极客时间

利用 C/C++ 语言和 Lua 源代码进行交互,从 Lua 代码中获取数据并且在 C 语言里面进行算法的封装和计算,最后将结果返回给 Lua。 我们在 C/C++ 语言里面进行大量的封装和算法提取,并且也利用 C/C++ 进行调用和结果的呈现,这是一种常用的方式,也就是 C 语言占比 60%~70%,Lua 代码占比 30%~40%。

另一种比较好的方式是,使用 C/C++ 编写底层实现逻辑,随后将数据传输给 Lua,让 Lua 来做逻辑运算,最终将结果返回给 C 语言并且呈现出来。这是很多人在游戏开发中都会做的事情,比如我们编写地图编辑器,先在 Lua 中编写好逻辑,用 C 语言在界面中呈现出来即可。如果反过来做的话,那就会出现大量的硬代码,是很不合适的。所以这种情况下,C 语言占比 30%~40%,Lua 代码占比 60%~70%。

Lua 可以是一种胶水语言。严谨地说,像 Python、Ruby 等脚本语言,都是合格的胶水语言。 在这种情况下,胶水语言起到的作用就是粘合系统语言(C/C++)和上层脚本逻辑。所以,使用胶水语言,就像是一种动态的配置文件。按照普通的配置文件来讲,你需要手工解析比如类似 INI、XML、JSON 等配置文件,随后按照这些文件的内容来做出一系列的配置,但是胶水语言不需要,它本身就是一种动态的语言。你也可以把它当作一种配置的文件,就像今天讲的 Makefile,它可以不需要你检测语法问题,这些问题在 Lua 虚拟机本身就已经做掉了,你需要做的就是将我们脑海里想让它做的事情,通过 C 和 Lua 的库代码进行整合,直接使用就可以了。所以,胶水语言的本身就是一个配置文件,同时它也是一个脚本语言源代码。

4.参考

参见文档阅读列表

后续补充

...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值