Tengo语言:为Go打造的轻量级动态脚本语言

Tengo语言:为Go打造的轻量级动态脚本语言

tengo A fast script language for Go tengo 项目地址: https://gitcode.com/gh_mirrors/te/tengo

项目介绍

Tengo 是一款专为Go语言设计的小型、动态、快速且安全的脚本语言。它不仅具备高效的编译和执行能力,还拥有简洁易读的语法,使得开发者能够轻松编写和维护脚本代码。Tengo的核心优势在于其基于栈的虚拟机,完全由Go语言实现,无需外部依赖或cgo,确保了代码的安全性和执行效率。

/* The Tengo Language */
fmt := import("fmt")

each := func(seq, fn) {
    for x in seq { fn(x) }
}

sum := func(init, seq) {
    each(seq, func(x) { init += x })
    return init
}

fmt.println(sum(0, [1, 2, 3]))   // "6"
fmt.println(sum("", [1, 2, 3]))  // "123"

Tengo Playground 中体验上述代码

项目技术分析

Tengo语言的核心技术在于其独特的虚拟机设计。该虚拟机采用栈结构,能够高效地执行编译后的字节码,从而实现快速的脚本执行。此外,Tengo支持动态类型和类型强制转换,使得开发者能够灵活地处理不同类型的数据。高阶函数和闭包的引入,进一步增强了语言的表达能力。

项目及技术应用场景

Tengo语言的应用场景非常广泛,特别适合以下几种情况:

  1. 规则引擎:Tengo的动态特性和高效执行能力使其成为构建复杂规则引擎的理想选择。
  2. 状态机:通过Tengo脚本,可以轻松实现状态机的逻辑,简化状态管理的复杂性。
  3. 数据管道:在数据处理流程中,Tengo可以作为中间脚本语言,灵活处理数据转换和过滤。
  4. 转译器:Tengo还支持与其他语言的互操作,可以用于实现简单的转译功能。

项目特点

  • 简洁易读的语法:Tengo的语法设计简洁明了,易于理解和维护。
  • 动态类型与类型强制转换:支持动态类型和类型强制转换,使得数据处理更加灵活。
  • 高阶函数与闭包:支持高阶函数和闭包,增强了代码的复用性和表达能力。
  • 安全嵌入与扩展:Tengo可以安全地嵌入到Go应用中,并支持扩展,满足不同场景的需求。
  • 独立运行与REPL:除了嵌入到Go应用中,Tengo还可以作为独立的脚本语言运行,并提供REPL环境,方便开发者进行交互式编程。

快速开始

go get github.com/d5/tengo/v2

以下是一个简单的Go示例代码,展示了如何编译和运行Tengo脚本,并传递输入输出值:

package main

import (
	"context"
	"fmt"

	"github.com/d5/tengo/v2"
)

func main() {
	// 创建一个新的Script实例
	script := tengo.NewScript([]byte(
`each := func(seq, fn) {
    for x in seq { fn(x) }
}

sum := 0
mul := 1
each([a, b, c, d], func(x) {
    sum += x
    mul *= x
})`))

	// 设置值
	_ = script.Add("a", 1)
	_ = script.Add("b", 9)
	_ = script.Add("c", 8)
	_ = script.Add("d", 4)

	// 运行脚本
	compiled, err := script.RunContext(context.Background())
	if err != nil {
		panic(err)
	}

	// 获取值
	sum := compiled.Get("sum")
	mul := compiled.Get("mul")
	fmt.Println(sum, mul) // "22 288"
}

或者,如果你只需要评估一个简单的表达式,可以使用 Eval 函数:

res, err := tengo.Eval(ctx,
	`input ? "success" : "fail"`,
	map[string]interface{}{"input": 1})
if err != nil {
	panic(err)
}
fmt.Println(res) // "success"

参考资料

为什么叫Tengo? 这个名字来源于村上春树的小说《1Q84》。

tengo A fast script language for Go tengo 项目地址: https://gitcode.com/gh_mirrors/te/tengo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咎岭娴Homer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值