跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 推荐一门 Lua 方言 Teal
未分類
3 2 月 2021

推荐一门 Lua 方言 Teal

推荐一门 Lua 方言 Teal

資深大佬 : virusdefender 6

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

Lua 有什么问题

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

  • 不区分 struct 、map 、数组等数据结构,一律都是 table,使用者很难看出来这个数据到底是什么内容
  • 函数参数和返回值传递多了和少了都会默默的变成 nil 而不会报错

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

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 

vscode 插件

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

为啥选择 Teal

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

  • 主要作者 https://github.com/hishamhm 也是 htop 、luarocks 等的作者,实力很强
  • 最近半年社区发展迅速,深度用户有不少,issue 、feature 等处理的非常快
  • 其他类似的项目在这里也有分析 https://github.com/teal-language/tl/blob/master/docs/other_projects.md 要不不维护了,要不就类似 Lua 不是真正的 Lua
  • https://github.com/TypeScriptToLua/TypeScriptToLua 是一个将 TypeScript 翻译为 Lua 的项目,我没有深入使用过,这个方向可以很好的利用 ts 的生态,能省很多事情,但是我个人认为 ts 和 Lua 语法差异比较大,我更加倾向是 Lua with type 而不是变成一门新的语言

Teal 还存在什么问题

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

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

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

大佬有話說 (3)

  • 資深大佬 : oott123

    有考虑过 Haxe 吗

  • 資深大佬 : kran

    看起来非常不错

  • 資深大佬 : gmywq0392

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具