V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
virusdefender
V2EX  ›  分享发现

推荐一门 Lua 方言 Teal

  •  
  •   virusdefender · 2021-02-17 10:14:11 +08:00 · 2574 次点击
    这是一个创建于 1379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在一些领域,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 中主要新增了 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 都没补全和提示的),比如格式化工具,比如文档生成工具等等。

    3 条回复    2021-02-19 13:47:21 +08:00
    oott123
        1
    oott123  
       2021-02-17 10:57:22 +08:00 via Android
    有考虑过 Haxe 吗
    kran
        2
    kran  
       2021-02-17 15:54:22 +08:00
    看起来非常不错
    gmywq0392
        3
    gmywq0392  
       2021-02-19 13:47:21 +08:00
    👍通俗易懂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5864 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:27 · PVG 14:27 · LAX 22:27 · JFK 01:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.