推荐一门 Lua 方言 Teal

2021-02-17 10:14:11 +08:00
 virusdefender

在一些领域,Lua 使用非常的广泛,比如游戏、OpenResty server 、给其他语言嵌入动态能力的场景等等。

Lua 有什么问题

但是 Lua 是一门非常灵活的语言,和常见的 Python 和 JavaScript 等比还要灵活和简单,这就造成使用成本偏高的问题,比如

我们在给 Golang 加入动态能力的时候就遇到了这些问题,代码多了写起来很痛苦,经过一些搜索,我们发现了 Teal,使用了大半年了,给大家推荐下。

Teal 介绍

Teal 和 Lua 的关系就类似 TypeScript 和 JavaScript 的关系,支持给已有的库进行类型标记,最终是翻译为 Lua 去实际使用的。

类型标记可以写在 xx.d.tl 文件中,比如

local record os
    exit: function(number)
end

return os

在 Teal 中主要新增了 recordarraymap 类型,更多的语言特性可以见文档 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

vscode 插件

Teal 有常见的编辑器插件,比如我一般是使用 vscode 进行开发,它的 vscode 插件最近经过社区大佬的努力,支持了简单的自动补全和类型提示功能,后续会逐渐的加强。详见 https://github.com/teal-language/vscode-teal

为啥选择 Teal

其实市面上还有一些 Lua 的方言,为啥选择 Teal 呢,原因如下

Teal 还存在什么问题

因为我们使用的比较早,前期存在一些检查不完善和 bug,我们就内部 fork 维护了一些 patch,希望是让 Teal 代码写起来更像是 Golang 。

随着社区的发展,有些更加严格的检查在官方版本中也逐渐支持了,我们的 patch 也越来越少。比如最近作者提了个新想法,支持 arg? 的形式传递可选参数 https://github.com/teal-language/tl/pull/366,如果这个 merge 了,那我们的 patch 就可以再去掉一部分了。

语言的基础设施比较初期,比如 vscode 插件,肯定不能和其他语言的 IDE 支持相比,但是也够用了(毕竟我们去年写 Teal 都没补全和提示的),比如格式化工具,比如文档生成工具等等。

2396 次点击
所在节点    分享发现
3 条回复
oott123
2021-02-17 10:57:22 +08:00
有考虑过 Haxe 吗
kran
2021-02-17 15:54:22 +08:00
看起来非常不错
gmywq0392
2021-02-19 13:47:21 +08:00
👍通俗易懂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/753642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX