在一些领域,Lua 使用非常的广泛,比如游戏、OpenResty server 、给其他语言嵌入动态能力的场景等等。
但是 Lua 是一门非常灵活的语言,和常见的 Python 和 JavaScript 等比还要灵活和简单,这就造成使用成本偏高的问题,比如
我们在给 Golang 加入动态能力的时候就遇到了这些问题,代码多了写起来很痛苦,经过一些搜索,我们发现了 Teal,使用了大半年了,给大家推荐下。
Teal 和 Lua 的关系就类似 TypeScript 和 JavaScript 的关系,支持给已有的库进行类型标记,最终是翻译为 Lua 去实际使用的。
类型标记可以写在 xx.d.tl
文件中,比如
local record os
exit: function(number)
end
return os
在 Teal 中主要新增了 record
、array
和 map
类型,更多的语言特性可以见文档 https://github.com/teal-language/tl/blob/master/docs/tutorial.md
代码样例
-- record 类似其他语言中的结构体
local record arg_t
a: string
b: string
end
-- key 为字符串,值为数字数组的字典
local m: {string: {number}}
m["x"] = {1, 2, 3}
-- 带类型定义的函数
local function add(a: number, b: number): number
return a + b
end
Teal 有常见的编辑器插件,比如我一般是使用 vscode 进行开发,它的 vscode 插件最近经过社区大佬的努力,支持了简单的自动补全和类型提示功能,后续会逐渐的加强。详见 https://github.com/teal-language/vscode-teal
其实市面上还有一些 Lua 的方言,为啥选择 Teal 呢,原因如下
因为我们使用的比较早,前期存在一些检查不完善和 bug,我们就内部 fork 维护了一些 patch,希望是让 Teal 代码写起来更像是 Golang 。
随着社区的发展,有些更加严格的检查在官方版本中也逐渐支持了,我们的 patch 也越来越少。比如最近作者提了个新想法,支持 arg?
的形式传递可选参数 https://github.com/teal-language/tl/pull/366,如果这个 merge 了,那我们的 patch 就可以再去掉一部分了。
语言的基础设施比较初期,比如 vscode 插件,肯定不能和其他语言的 IDE 支持相比,但是也够用了(毕竟我们去年写 Teal 都没补全和提示的),比如格式化工具,比如文档生成工具等等。
1
oott123 2021-02-17 10:57:22 +08:00 via Android
有考虑过 Haxe 吗
|
2
kran 2021-02-17 15:54:22 +08:00
看起来非常不错
|
3
gmywq0392 2021-02-19 13:47:21 +08:00
👍通俗易懂
|