【lua语言从青铜到王者】第一篇:lua前世今生

2,946 阅读8分钟

前言

哈喽,大家好,我是阿沐童鞋!一个喜欢钻研各种新技术的程序员,哎哎呀,就是玩!!!

前两天我开通了lua语言学习专栏,虽然在掘金社区没多少小伙伴看,但是突然在知乎上了推荐,“”了一把(一本经常胡说八道),第一次发文章在知乎上推荐的:我还是没有忍住,于是乎我开通了lua语言学习专栏!

尽管写了很多文章,没有什么浏览量、点赞量、收藏量以及上推荐都是那么奢侈;不过还是想利用业余时间写一写文章:虽然基本一篇文章需要耗费2~4天时间,真的写完之后,你会发现自己知识的巩固很有帮助;虽然待在大厂,但是你会发现你懂得跟别人比起来永远都是了那么一丢丢下面是我大致列的lua学习知识体系,也会不断的完善更新

lua学习路线.png

坚持从零到一,有什么不合理的地方,欢迎小伙们留言批评指正。

1.1 Lua语言概述

在1993年巴西里约热内卢天主教大学诞生一门小巧的编程语言,发明者分别是:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo,他们是该学校的研究人员。他们给这门语言取了一个优雅而浪漫的名字Lua,在葡萄牙语里表示是:美丽的月亮。当你真正去学习这门语言,你会发现它真的是很优雅。它简单、优雅、强大并且是很有趣的语言。

lua语言这一生真的是很坎坎坷坷,一路披荆斩麻,年过20哉,也算是略微崭露头角!

Lua于1993年出生于巴西的计算机图形技术集团Tecgraf,Tecgraf发了两门语言,分别是DELSOL,而这两门语言就是是Lua语言的前生。

在Petrobras中DEL被广泛的使用,导致Petrobras对它提出了更高的需求,需要能够提供控制处理等特性,这样就使得del看上去更像一门语言了。

就在del被创建的同时,由Roberto Ierusalimschy和Waldemar Celes带领的团队,开始在PGM上面工作;它是一个可配置的岩性剖面报告生成器,当然它也是Petrobras的专利喽。PGM生成的报告由多个列(称为“轨迹”)组成,具有很高的可靠性;用户可以选择颜色、字体、和标签;配置完成以后可以保存下来重新使用,于是这个开发团队决定为PGM开发一门语言,称为SOL(Simple Object Language)。

由于两种语言都出现自己的瓶颈问题,于是在1993年中,Luiz Henrique和Waldemar坐在一起讨论了这两门语言面对的问题和挑战,它需要满足以下在当时考虑到的需求:

  • 需要一门真正语言:保持语言的简单和小巧,易嵌入到应用程序中
  • 要像sol一样,对数据的描述提供便捷
  • 新语言的实现应该是高度可移植的,可以运行在不同的平台上,移植性和便携性要足够的ok

因为这门语言的前身之一是SOL语言,在葡萄牙语中这个单词的意思是“太阳”,他们决定给这门新的语言起名为“Lua”,葡萄牙语的意思是“月亮”。于是Lua语言就这样诞生了.......

## 版本进化史

 Lua 1.x 版本 -- 1994

 Lua 2.x 版本 -- 1995

 Lua 3.x 版本 -- 1997

 Lua 4.x 版本 -- 2000

 Lua 5.x 版本 -- 2003

冒昧的问下:各位在最后一个版本的时候几岁了?😂 😂 😂 

1.2 Lua的特性

-- 可移植性:使用clean C编写的解释器,可以在Windows、Mac、Linux等多个平台轻松编译通过

-- 尺寸小:Lua5.1版本的压缩包,仅有208K的大小,解压缩之后也不过是835K,一张软盘就可以装下。Lua解释器的源代码只有17000多行的C代码,编译之后的二进制库文件仅有143K,这些都决定了使用Lua的设备并不会因为添加了它导致非常明显的空间占用

-- 嵌入性:Lua提供了非常丰富的API,可供宿主程序与Lua脚本之间进行通信和交换数据

-- 支持面向对象和函数式编程

-- 内存自动管理:只提供了一种通用类型的表(table),用它可以实现数组,哈希表,集合,对象

-- 效率高:几乎是脚本语言中速度最快的语言,为了提高Lua的性能,作者们将最初的使用Lex、Yacc等工具自动生成的代码都变成了自己手写的词法分析器和解析器

1.3 Lua的用途

目前,Lua主要应用在下面这些系统:

  • 游戏开发:游戏开发中主要用来做热更新;当游戏规则或者游戏规模变大导致逻辑需要修改,一般是需要升级游戏客户端,但是有lua脚本实现无需升级客户端。

  • Redis原子性:redis服务提供Lua脚本;日常开发很多业务场景需要我们保证redis操作原子性,有了lua脚本的引入,原子性轻松搞定。

  • web应用:感谢中国大哥哥章亦春章亦春是个什么样的人?,OpenResty使用Lua来扩展Nginx服务器的功能,开发者仅需要编写Lua代码就能轻松完成业务逻辑,它的出现无疑是拯救了大批开发者。

1.4 Lua的英俊帅气脸庞

上面聊了这么多,我们只知道lua语言比较厉害,效率高、轻便;但是Lua 程序到底长啥样嘞?

来来来,我们一起来看看?用hello.lua向大家打声招呼?

-- 定义一个文本
local text = 'Hello,world!'
-- 输出结果
print(text)
-- 结果
--Hello,world!

function echo_hello(tx)
    print(tx)
end

echo_hello(text)

lua的美貌

1.5 为什么我们要学习Lua语言?

古人云:“技多不压身”,lua虽小众语言,但是却凭借自身高性能、高效率撑起自己几十年的历史舞台。

因为Nginx的存在使得lua能发挥更好的优势,完美和nginx的全异步非阻塞的多阶段处理机制相结合;开发者可使用同步的模式,开发全异步的应用程序;不需要考虑异步的处理机制,这样我们能搞好的完成一个高性能的项目。

不管我们去到哪里,针对高性能都是必不可少的面试问题;我们不仅仅学会从各种方面进行性能调优,我们也就可以尝试换一种高性能语言来实现呢?① 我们可以利用新语言尝试新项目(lua go) ② lua语言在项目上的使用必然能带来不一样的成果(kpi) ③ 尝试用lua实现在nginx层限流 ④ 出去找工作是不是可以吹一吹(offer到手)

就我个人而言:无论是PHP、Go、Lua还是Py,只要对项目有用,能够提升个人的技能以及思维转变能力,我都能够接受去学习它、使用它、带着它一起上线。lua语言小巧易学,简单上手,总归有它的用武之地。

那么lua作为一门过程型动态语言,它如下的闪光之处(官方):

  • 轻量级

  • 易扩展

  • 简洁、快速、安全

  • 支持面向对象和函数式编程(同样有封装、继承、多态)

  • 内存自动管理

  • 语言内置模式匹配:① 闭包(closure) ② 函数也可看作一个值 ③ 多线程(协程)支持

  • 最开心的:openresty+lua实现web应用,让开发可以在nginx写lua,体验非常爽

总结

以上lua的前世今生大部分来源于:The Evolution of Lua小伙伴们有兴趣可以看看哦,不过全部是纯英文;我也是对着百度和谷歌翻译了一部分😒 😒 😒,各位小伙伴们英文还是非常重要的,经常查文档资料都要看国外的英文文档。太难了.....

这章节我先认识下lua语言的由来以及发展历程,这样可以更好的让我去了解它的可爱之处,不知不觉你会爱上它的!!!

最后,欢迎关注我的个人公众号「我是阿沐」,会不定期的更新后端知识点和学习笔记。也欢迎直接公众号私信或者邮箱联系我,我们可以一起学习,一起进步,文章首发在微信公众号上。

好了,我是阿沐,一个不想30岁就被淘汰的打工人 ⛽️ ⛽️ ⛽️ 。创作不易觉得「阿沐」写的有点料话:👍 关注一下,💖 分享一下,我们下期再见。