Description
uGO is a fast, dynamic scripting language to embed in Go applications. uGO is compiled and executed as bytecode on stack-based VM that's written in native Go.
The uGO Language alternatives and similar packages
Based on the "Embeddable Scripting Languages" category.
Alternatively, view The uGO Language alternatives based on common mentions on social networks and blogs.
-
expr
DISCONTINUED. Expression language and expression evaluation for Go [Moved to: https://github.com/expr-lang/expr] -
RuleGo
⛓️RuleGo is a lightweight, high-performance, embedded, next-generation component orchestration rule engine framework for Go. -
Gentee script programming language
Gentee - script programming language for automation. It uses VM and compiler written in Go (Golang).
CodeRabbit: AI Code Reviews for Developers
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of The uGO Language or a related project?
README
The uGO Language
uGO is a fast, dynamic scripting language to embed in Go applications. uGO is compiled and executed as bytecode on stack-based VM that's written in native Go.
uGO is inspired by awesome script language Tengo by Daniel Kang. A special thanks to Tengo's creater and contributors.
To see how fast uGO is, please have a look at fibonacci benchmarks.
Play with uGO via Playground built for WebAssembly.
Fibonacci Example
param arg0
var fib
fib = func(x) {
if x == 0 {
return 0
} else if x == 1 {
return 1
}
return fib(x-1) + fib(x-2)
}
return fib(arg0)
Features
- Written in native Go (no cgo).
if else
statements.for
andfor in
statements.try catch finally
statements.param
,global
,var
andconst
declarations.- Rich builtins.
- Module support.
- Go like syntax with additions.
Why uGO
uGO
name comes from the initials of my daughter's, wife's and my name. It is
not related with Go.
I needed a faster embedded scripting language with runtime error handling.
Quick Start
go get -u github.com/ozanh/ugo
uGO has a REPL application to learn and test uGO language thanks to
github.com/c-bata/go-prompt
library.
go get -u github.com/ozanh/ugo/cmd/ugo
./ugo
This example is to show some features of uGO.
https://play.golang.org/p/1Tj6joRmLiX
package main
import (
"fmt"
"github.com/ozanh/ugo"
)
func main() {
script := `
param ...args
mapEach := func(seq, fn) {
if !isArray(seq) {
return error("want array, got " + typeName(seq))
}
var out = []
if sz := len(seq); sz > 0 {
out = repeat([0], sz)
} else {
return out
}
try {
for i, v in seq {
out[i] = fn(v)
}
} catch err {
println(err)
} finally {
return out, err
}
}
global multiplier
v, err := mapEach(args, func(x) { return x*multiplier })
if err != undefined {
return err
}
return v
`
bytecode, err := ugo.Compile([]byte(script), ugo.DefaultCompilerOptions)
if err != nil {
panic(err)
}
globals := ugo.Map{"multiplier": ugo.Int(2)}
ret, err := ugo.NewVM(bytecode).Run(
globals,
ugo.Int(1), ugo.Int(2), ugo.Int(3), ugo.Int(4),
)
if err != nil {
panic(err)
}
fmt.Println(ret) // [2, 4, 6, 8]
}
Roadmap
More standard library modules will be added.
More tests will be added.
Basic object oriented programming support.
Documentation
LICENSE
uGO is licensed under the MIT License.
See [LICENSE](LICENSE) for the full license text.
*Note that all licence references and agreements mentioned in the The uGO Language README section above
are relevant to that project's source code only.