Popularity
4.1
Growing
Activity
3.4
-
105
2
10

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.

Programming language: Go
License: MIT

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.

Do you think we are missing an alternative of The uGO Language or a related project?

Add another 'Embeddable Scripting Languages' Package

README

The uGO Language

Go Reference Go Report Card uGO Test uGO Dev Test Maintainability

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 and for in statements.
  • try catch finally statements.
  • param, global, var and const 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

repl-gif

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.