GoPlus - The Go+ language for data science

GoPlus - The Go+ language for data science

Build Status Go Report Card GitHub release Coverage Status REPL Playground VSCode GoDoc

NOTE: Go+ is still under heavy developement. Please don't use it in production environment.

Summary about Go+

What are mainly impressions about Go+?

  • A static typed language.
  • Fully compatible with the Go language.
  • Script-like style, and more readable code for data science than Go.

For example, the following is legal Go+ source code:

a := [1, 2, 3.4]
println(a)

How do we do this in the Go language?

package main

func main() {
    a := []float64{1, 2, 3.4}
    println(a)
}

Of course, we don't only do less-typing things.

For example, we support list comprehension, which makes data processing easier.

a := [1, 3, 5, 7, 11]
b := [x*x for x <- a, x > 3]
println(b) // output: [25 49 121]

mapData := {"Hi": 1, "Hello": 2, "Go+": 3}
reverseMap := {v: k for k, v <- mapData}
println(reverseMap) // output: map[1:Hi 2:Hello 3:Go+]

We will keep Go+ simple. This is why we call it Go+, not Go++.

Less is exponentially more.

It's for Go, and it's also for Go+.

Compatibility with Go

All Go features will be supported (including partially support cgo, see below).

All Go packages (even these packages use cgo) can be imported by Go+.

import (
    "fmt"
    "strings"
)

x := strings.NewReplacer("?", "!").Replace("hello, world???")
fmt.Println("x:", x)

Be interested in how it works? See Import Go packages in Go+ programs.

Also, all Go+ packages can be converted into Go packages and imported in Go programs.

First, let's make a directory named tutorial/14-Using-goplus-in-Go.

Then write a Go+ package named foo in it:

package foo

func ReverseMap(m map[string]int) map[int]string {
    return {v: k for k, v <- m}
}

Then use it in a Go package:

package main

import (
	"fmt"

	"github.com/goplus/gop/tutorial/14-Using-goplus-in-Go/foo"
)

func main() {
	rmap := foo.ReverseMap(map[string]int{"Hi": 1, "Hello": 2})
	fmt.Println(rmap)
}

How to compile this example?

gop go tutorial/ # Convert all Go+ packages in tutorial/ into Go packages
go install ./...

Or:

gop install ./... # Convert Go+ packages and go install ./...

Go tutorial/14-Using-goplus-in-Go to get the source code.

Playground/REPL

Go+ REPL based on GopherJS/WASM:

Go+ Playground based on Docker:

Go+ Playground based on GopherJS:

Go+ Jupyter kernel:

Tutorials

See https://github.com/goplus/gop/tree/master/tutorial

How to build

git clone [email protected]:goplus/gop.git
cd gop
go install -v ./...

Go+ features

Bytecode vs. Go code

Go+ supports bytecode backend and Go code generation.

When we use gop go or gop install command, it generates Go code to covert Go+ package into Go packages.

When we use gop run command, it doesn't call go run command. It generates bytecode to execute.

In bytecode mode, Go+ doesn't support cgo. However, in Go-code-generation mode, Go+ fully supports cgo.

Commands

gop run         # Run a Go+ program
gop repl        # Run Go+ in REPL/Console mode
gop go [-test]  # Convert Go+ packages into Go packages. If -test specified, it tests related packages.
gop fmt         # Format Go+ packages
gop export      # Export Go packages for Go+ programs

See https://github.com/goplus/gop/wiki/Commands for details.

Note:

  • gop go -test <gopSrcDir> converts Go+ packages into Go packages, and for every package, it call go run <gopPkgDir>/gop_autogen.go and gop run -quiet <gopPkgDir> to compare their outputs. If their outputs aren't equal, the test case fails.

Rational number: bigint, bigrat, bigfloat

We introduce the rational number as native Go+ types. We use suffix r to denote rational literals. For example, (1r << 200) means a big int whose value is equal to 2200. And 4/5r means the rational constant 4/5.

a := 1r << 65   // bigint, large than int64
b := 4/5r       // bigrat
c := b - 1/3r + 3 * 1/2r
println(a, b, c)

Map literal

x := {"Hello": 1, "xsw": 3.4} // map[string]float64
y := {"Hello": 1, "xsw": "Go+"} // map[string]interface{}
z := {"Hello": 1, "xsw": 3} // map[string]int
empty := {} // map[string]interface{}

Slice literal

x := [1, 3.4] // []float64
y := [1] // []int
z := [1+2i, "xsw"] // []interface{}
a := [1, 3.4, 3+4i] // []complex128
b := [5+6i] // []complex128
c := ["xsw", 3] // []interface{}
empty := [] // []interface{}

List comprehension

a := [x*x for x <- [1, 3, 5, 7, 11]]
b := [x*x for x <- [1, 3, 5, 7, 11], x > 3]
c := [i+v for i, v <- [1, 3, 5, 7, 11], i%2 == 1]
d := [k+","+s for k, s <- {"Hello": "xsw", "Hi": "Go+"}]

arr := [1, 2, 3, 4, 5, 6]
e := [[a, b] for a <- arr, a < b for b <- arr, b > 2]

x := {x: i for i, x <- [1, 3, 5, 7, 11]}
y := {x: i for i, x <- [1, 3, 5, 7, 11], i%2 == 1}
z := {v: k for k, v <- {1: "Hello", 3: "Hi", 5: "xsw", 7: "Go+"}, k > 3}

Select data from a collection

type student struct {
    name  string
    score int
}

students := [student{"Ken", 90}, student{"Jason", 80}, student{"Lily", 85}]

unknownScore, ok := {x.score for x <- students, x.name == "Unknown"}
jasonScore := {x.score for x <- students, x.name == "Jason"}

println(unknownScore, ok) // output: 0 false
println(jasonScore) // output: 80

For loop

sum := 0
for x <- [1, 3, 5, 7, 11, 13, 17], x > 3 {
    sum += x
}

Error handling

We reinvent the error handling specification in Go+. We call them ErrWrap expressions:

expr! // panic if err
expr? // return if err
expr?:defval // use defval if err

How to use them? Here is an example:

import (
	"strconv"
)

func add(x, y string) (int, error) {
	return strconv.Atoi(x)? + strconv.Atoi(y)?, nil
}

func addSafe(x, y string) int {
	return strconv.Atoi(x)?:0 + strconv.Atoi(y)?:0
}

println(`add("100", "23"):`, add("100", "23")!)

sum, err := add("10", "abc")
println(`add("10", "abc"):`, sum, err)

println(`addSafe("10", "abc"):`, addSafe("10", "abc"))

The output of this example is:

add("100", "23"): 123
add("10", "abc"): 0 strconv.Atoi: parsing "abc": invalid syntax

===> errors stack:
main.add("10", "abc")
	/Users/xsw/goplus/tutorial/15-ErrWrap/err_wrap.gop:6 strconv.Atoi(y)?

addSafe("10", "abc"): 10

Compared to corresponding Go code, It is clear and more readable.

And the most interesting thing is, the return error contains the full error stack. When we got an error, it is very easy to position what the root cause is.

How these ErrWrap expressions work? See Error Handling for more information.

Auto property

Let's see an example written in Go+:

import "github.com/goplus/gop/ast/goptest"

doc := goptest.New(`... Go+ code ...`)!

println(doc.Any().FuncDecl().Name())

In many languages, there is a concept named property who has get and set methods.

Suppose we have get property, the above example will be:

import "github.com/goplus/gop/ast/goptest"

doc := goptest.New(`... Go+ code ...`)!

println(doc.any.funcDecl.name)

In Go+, we introduce a concept named auto property. It is a get property, but is implemented automatically. If we have a method named Bar(), then we will have a get property named bar at the same time.

Unix shebang

You can use Go+ programs as shell scripts now. For example:

#!/usr/bin/env -S gop run

println("Hello, Go+")

println(1r << 129)
println(1/3r + 2/7r*2)

arr := [1, 3, 5, 7, 11, 13, 17, 19]
println(arr)
println([x*x for x <- arr, x > 3])

m := {"Hi": 1, "Go+": 2}
println(m)
println({v: k for k, v <- m})
println([k for k, _ <- m])
println([v for v <- m])

Go tutorial/20-Unix-Shebang/shebang to get the source code.

Go features

All Go features (not including cgo) will be supported.

IDE Plugins

Contributing

The Go+ project welcomes all contributors. We appreciate your help!

Here are list of Go+ Contributors. We award an email account ([email protected]) for every contributor. And we suggest you commit code by using this email account:

git config --global user.email [email protected]

If you did this, remember to add your [email protected] email to https://github.com/settings/emails.

What does a contributor to Go+ mean? He must meet one of the following conditions:

  • At least one pull request of a full-featured implemention.
  • At least three pull requests of feature enhancements.
  • At least ten pull requests of any kind issues.

Where can you start?

  • Issues
  • Issues
  • Issues
  • Issues
  • TODOs
Owner
GoPlus
The GoPlus (Go+) Programming Language
GoPlus
Comments
  • Feature requests

    Feature requests

    在今年 ecug 大会前(2020.12.30 日前),完成 qlang v6 (alias v1.6) 版本。

    核心变化:

    • 完全推翻重来,从动态类型转向静态类型!
    • 完全兼容 Go 语言文法。
    • 在 Go 语言兼容基础上,保留当初 qlang 动态类型版本的重要特性。比如:
    a := [1, 2, 3.4]
    // 等价于 Go 中的  a := []float64{1, 2, 3.4}
    
    b := {"a": 1, "b": 3.0}
    // 等价于  b := map[string]float64{"a": 1, "b": 3.0}
    
    c := {"a": 1, "b": "Hello"}
    // 等价于 c := map[string]interface{}{"a": 1, "b": "Hello"}
    

    当然也会放弃一些特性,比如:

    a = 1   // 需要改为 a := 1,放弃该特性是为了让编译器更好地发现变量名冲突。
    
  • Download from latest release, but fatal.

    Download from latest release, but fatal.

    What happened?

    Download and run a simple example on ubuntu (Amd64).:

    uname -v 
    #35~1630100930~21.04~ae2753e-Ubuntu SMP Mon Aug 30 18:26:54 UTC 
    
    $./gop run test.gop
    [FATAL] /github/workspace/cmd/internal/run/run.go:91: findGoModFile: no such file or directory
    
    

    What did you expect to happen?

    Not should showing any errors

  • Import package not found: github.com/goplus/gop/builtin/ng

    Import package not found: github.com/goplus/gop/builtin/ng

    The following program sample.gop triggers an unexpected result

    println [1, 2, 3.4]
    

    Expected result

    [1, 2, 3.4]
    

    Got

    (cvlab) root@7c8a9f63a67f:/dev/shm/go_projects# gop run test.gop
    2022/04/26 15:25:36 Import package not found: github.com/goplus/gop/builtin/ng
    panic: Import package not found: github.com/goplus/gop/builtin/ng
    
    
    goroutine 1 [running]:
    log.Panicln({0xc0001518d8, 0x20, 0x20})
            /usr/local/go/src/log/log.go:368 +0x65
    github.com/goplus/gox.(*PkgRef).EnsureImported(0xc00007f630)
            /root/go/pkg/mod/github.com/goplus/[email protected]/import.go:96 +0xc8
    github.com/goplus/gop/cl.initMathBig({0x0, 0x779633}, 0xc0000744e0, 0x0)
            /root/gop/cl/builtin.go:29 +0x2a
    github.com/goplus/gop/cl.newBuiltinDefault({0x7e6260, 0xc00013a200}, 0x7788fa)
            /root/gop/cl/builtin.go:64 +0xef
    github.com/goplus/gox.NewPackage({0x0, 0xc000072400}, {0x7788fa, 0x4}, 0xc00001efc0)
            /root/go/pkg/mod/github.com/goplus/[email protected]/package.go:284 +0x37d
    github.com/goplus/gop/cl.NewPackage({0x0, 0x0}, 0xc00001ef90, 0xc000151cc0)
            /root/gop/cl/compile.go:373 +0x329
    github.com/goplus/gop/x/gopproj.(*gopFiles).GenGo(0xc000072320, {0x77ba7a, 0x9e7400}, {0xc0000301a0, 0x1b})
            /root/gop/x/gopproj/gopfiles.go:131 +0x433
    github.com/goplus/gop/x/gopproj.(*Context).GoCommand(0xc00001e1a0, {0x778673, 0x3}, 0xc000122850)
            /root/gop/x/gopproj/projctx.go:94 +0x213
    github.com/goplus/gop/cmd/internal/run.gopRun({0xc00001e1a0, 0xc00001e1a0, 0x509818})
            /root/gop/cmd/internal/run/run.go:105 +0x288
    github.com/goplus/gop/cmd/internal/run.runCmd(0xc000074180, {0xc00001e1a0, 0x11, 0xc000052730})
            /root/gop/cmd/internal/run/run.go:63 +0xc5
    main.main()
            /root/gop/cmd/gop/main.go:108 +0x4df
    

    Gop Version

    Release v1.1.0-beta3

    Additional Notes

    I install Go+ from source code.

    (cvlab) root@7c8a9f63a67f:~# cd gop
    (cvlab) root@7c8a9f63a67f:~/gop# ./all.bash
    + go run cmd/make.go --install --autoproxy
    Installing Go+ tools...
    
    Start Linking.
    Link /root/gop/bin/gop to /root/go/bin/gop successfully.
    Link /root/gop/bin/gopfmt to /root/go/bin/gopfmt successfully.
    End linking.
    
    Go+ tools installed successfully!
    
  • "gop export" errir export "github.com/xx/yy" error: 25:91: expected ')', found '/'

    export "github.com/xx/vweb/yy" error: 25:91: expected ')', found '/' export "github.com/xx/vweb/yy" error: empty exported package

    occurred error:

    type ServerTLSFile struct {
        CertFile, KeyFile   string
    }
    func (T *ServerHTTP) LoadTLS(config *tls.Config, files []ServerTLSFile) error {
    	...
    }
    

    no error:

    type ServerTLSFile struct {
        CertFile, KeyFile   string
    }
    func (T *ServerHTTP) LoadTLS(config *tls.Config, files []*ServerTLSFile) error {
    	...
    }
    

    problem is []ServerTLSFile not recognized

  • Range branch with label(break/continue/goto/return)

    Range branch with label(break/continue/goto/return)

    L:
    for k, v := range [1,2,3] {
    	if k < 2 {
    		continue L
    	}
    	if k > 2{
                    println("range break")
    		break L
    	}
    	println(k, v)
    }
    
    
  • qexp: add export const and vars

    qexp: add export const and vars

    对 ConstUnboundInt 做检查,所以在 math 库中会出现 int64 和 uint64 转换。 (因为可能使用 gopherjs 32bit 编译,所以保留了 int64 转换)

    		I.Const("MaxInt32", qspec.ConstUnboundInt, math.MaxInt32),
    		I.Const("MaxInt64", qspec.Uint64, uint64(math.MaxInt64)),
    		I.Const("MaxInt8", qspec.ConstUnboundInt, math.MaxInt8),
    		I.Const("MaxUint16", qspec.ConstUnboundInt, math.MaxUint16),
    		I.Const("MaxUint32", qspec.Uint64, uint64(math.MaxUint32)),
    		I.Const("MaxUint64", qspec.Uint64, uint64(math.MaxUint64)),
    		I.Const("MaxUint8", qspec.ConstUnboundInt, math.MaxUint8),
    		I.Const("MinInt16", qspec.ConstUnboundInt, math.MinInt16),
    		I.Const("MinInt32", qspec.ConstUnboundInt, math.MinInt32),
    		I.Const("MinInt64", qspec.Int64, int64(math.MinInt64)),
    		I.Const("MinInt8", qspec.ConstUnboundInt, math.MinInt8),
    		I.Const("Phi", qspec.ConstUnboundFloat, math.Phi),
    		I.Const("Pi", qspec.ConstUnboundFloat, math.Pi),
    
  • 提一个很尖锐的问题

    提一个很尖锐的问题

    Proposal

    增加中文文档

    Background

    想安利go给基础差的同事,看到许大的文章说几岁的小朋友都会,然后过来一看,发现全是英文,这这这,让我还得给同事翻译英文。那我还是直接教go吧。 许大go+的宏远是让小孩子都会,但没有中文文档?文章说几岁的小孩子都会,我只能说那是许大教得好,你直接教go都能教会。(不喜勿喷)

    Workarounds

    增加中文文档

  • Convert Go code style to Go+ style automatically

    Convert Go code style to Go+ style automatically

    Proposal

    gop fmt --smart package ...
    

    introduce a --smart switch to do this.

    for example:

    • no package main
    • no func main
    • fmt.Println => println
    • command line style first

    See https://github.com/goplus/gop/blob/main/x/format/README.md for details.

    Background

    none

    Workarounds

    none

  • `gop run` stack overflow

    `gop run` stack overflow

    The following program triggers an unexpected result

    Repo: https://github.com/cpunion/graph
    
    * `go build` success
    * `gop build` success
    * `go run main.go` success
    * `gop run main.go` failed
    

    Expected result

    $ go run main.go
    [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
    
    [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
     - using env:	export GIN_MODE=release
     - using code:	gin.SetMode(gin.ReleaseMode)
    
    [GIN-debug] GET    /graphql/                 --> github.com/cpunion/graph/app/graph.playgroundHandler.func1 (4 handlers)
    [GIN-debug] POST   /graphql/query            --> github.com/cpunion/graph/app/graph.graphqlHandler.func1 (4 handlers)
    [GIN-debug] Listening and serving HTTP on :8080
    

    Got

    $ gop run main.go
    ==> GenGo to /Users/lijie/.gop/run/g4TKA5ZxtrERYMfUORL5kw10pqYEmain.go
    runtime: goroutine stack exceeds 1000000000-byte limit
    runtime: sp=0x1403b00e3d0 stack=[0x1403b00e000, 0x1405b00e000]
    fatal error: stack overflow
    
    runtime stack:
    runtime.throw({0x1008daa5f, 0xe})
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/panic.go:1198 +0x54
    runtime.newstack()
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/stack.go:1088 +0x56c
    runtime.morestack()
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/asm_arm64.s:303 +0x70
    
    goroutine 1 [running]:
    runtime.heapBitsSetType(0x14016f9ec50, 0x10, 0x10, 0x1009c2d40)
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/mbitmap.go:822 +0xa00 fp=0x1403b00e3d0 sp=0x1403b00e3d0 pc=0x1005e46e0
    runtime.mallocgc(0x10, 0x1009c2d40, 0x1)
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/malloc.go:1100 +0x654 fp=0x1403b00e460 sp=0x1403b00e3d0 pc=0x1005dc124
    runtime.makeslice(0x1009c2d40, 0x2, 0x2)
    	/opt/homebrew/Cellar/go/1.17.2/libexec/src/runtime/slice.go:98 +0x90 fp=0x1403b00e490 sp=0x1403b00e460 pc=0x10061d000
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:46 +0x60 fp=0x1403b00e520 sp=0x1403b00e490 pc=0x100850540
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00e5c0 sp=0x1403b00e520 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00e630 sp=0x1403b00e5c0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00e680 sp=0x1403b00e630 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00e6e0 sp=0x1403b00e680 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00e770 sp=0x1403b00e6e0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00e810 sp=0x1403b00e770 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00e880 sp=0x1403b00e810 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00e8d0 sp=0x1403b00e880 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00e930 sp=0x1403b00e8d0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00e9c0 sp=0x1403b00e930 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00ea60 sp=0x1403b00e9c0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00ead0 sp=0x1403b00ea60 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00eb20 sp=0x1403b00ead0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00eb80 sp=0x1403b00eb20 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00ec10 sp=0x1403b00eb80 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00ecb0 sp=0x1403b00ec10 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00ed20 sp=0x1403b00ecb0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00ed70 sp=0x1403b00ed20 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00edd0 sp=0x1403b00ed70 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00ee60 sp=0x1403b00edd0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00ef00 sp=0x1403b00ee60 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00ef70 sp=0x1403b00ef00 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00efc0 sp=0x1403b00ef70 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00f020 sp=0x1403b00efc0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00f0b0 sp=0x1403b00f020 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00f150 sp=0x1403b00f0b0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00f1c0 sp=0x1403b00f150 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00f210 sp=0x1403b00f1c0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00f270 sp=0x1403b00f210 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00f300 sp=0x1403b00f270 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00f3a0 sp=0x1403b00f300 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00f410 sp=0x1403b00f3a0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00f460 sp=0x1403b00f410 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00f4c0 sp=0x1403b00f460 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00f550 sp=0x1403b00f4c0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00f5f0 sp=0x1403b00f550 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00f660 sp=0x1403b00f5f0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00f6b0 sp=0x1403b00f660 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00f710 sp=0x1403b00f6b0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00f7a0 sp=0x1403b00f710 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00f840 sp=0x1403b00f7a0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00f8b0 sp=0x1403b00f840 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00f900 sp=0x1403b00f8b0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00f960 sp=0x1403b00f900 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00f9f0 sp=0x1403b00f960 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00fa90 sp=0x1403b00f9f0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00fb00 sp=0x1403b00fa90 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00fb50 sp=0x1403b00fb00 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00fbb0 sp=0x1403b00fb50 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00fc40 sp=0x1403b00fbb0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00fce0 sp=0x1403b00fc40 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00fd50 sp=0x1403b00fce0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00fda0 sp=0x1403b00fd50 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b00fe00 sp=0x1403b00fda0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b00fe90 sp=0x1403b00fe00 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b00ff30 sp=0x1403b00fe90 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b00ffa0 sp=0x1403b00ff30 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b00fff0 sp=0x1403b00ffa0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b010050 sp=0x1403b00fff0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b0100e0 sp=0x1403b010050 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010180 sp=0x1403b0100e0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b0101f0 sp=0x1403b010180 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b010240 sp=0x1403b0101f0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b0102a0 sp=0x1403b010240 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b010330 sp=0x1403b0102a0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b0103d0 sp=0x1403b010330 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b010440 sp=0x1403b0103d0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b010490 sp=0x1403b010440 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b0104f0 sp=0x1403b010490 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b010580 sp=0x1403b0104f0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010620 sp=0x1403b010580 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b010690 sp=0x1403b010620 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b0106e0 sp=0x1403b010690 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b010740 sp=0x1403b0106e0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b0107d0 sp=0x1403b010740 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010870 sp=0x1403b0107d0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b0108e0 sp=0x1403b010870 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b010930 sp=0x1403b0108e0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b010990 sp=0x1403b010930 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b010a20 sp=0x1403b010990 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010ac0 sp=0x1403b010a20 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b010b30 sp=0x1403b010ac0 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b010b80 sp=0x1403b010b30 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b010be0 sp=0x1403b010b80 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b010c70 sp=0x1403b010be0 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010d10 sp=0x1403b010c70 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b010d80 sp=0x1403b010d10 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b010dd0 sp=0x1403b010d80 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b010e30 sp=0x1403b010dd0 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b010ec0 sp=0x1403b010e30 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b010f60 sp=0x1403b010ec0 pc=0x10085104c
    github.com/goplus/gox.dedupParam(0x140001700c0, 0x14010f76640)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:163 +0x3c fp=0x1403b010fd0 sp=0x1403b010f60 pc=0x10085162c
    github.com/goplus/gox.dedupSignature(0x140001700c0, 0x14010f45b60)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:89 +0x40 fp=0x1403b011020 sp=0x1403b010fd0 pc=0x1008509b0
    github.com/goplus/gox.dedupFunc(0x140001700c0, 0x14010f76690)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:186 +0x48 fp=0x1403b011080 sp=0x1403b011020 pc=0x100851968
    github.com/goplus/gox.dedupInterface(0x140001700c0, 0x14010f5a780)
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:48 +0xc8 fp=0x1403b011110 sp=0x1403b011080 pc=0x1008505a8
    github.com/goplus/gox.dedupType(0x140001700c0, {0x1009de758, 0x14010f5a780})
    	/Users/lijie/go/pkg/mod/github.com/goplus/[email protected]/dedup.go:127 +0x4dc fp=0x1403b0111b0 sp=0x1403b011110 pc=0x10085104c
    ...additional frames elided...
    

    Gop Version

    gop devel main(276f00f276ff797a97e943ab97f80326d1759a89) 2021-11-13_18-58-37 darwin/arm64

    Additional Notes

    No response

  • gop run failed at a dir which has `go.mod` file existed.

    gop run failed at a dir which has `go.mod` file existed.

    The following program sample.gop triggers an unexpected result

    x := 123.1
    
    println(x + 1)
    

    Expected result

    124.1
    

    Got

    : no required module provides package github.com/goplus/gop/builtin; to add it:
    	go get github.com/goplus/gop/builtin
    2021/10/24 21:28:04 total 1 errors
    panic: total 1 errors
    

    Gop Version

    gop devel linux/amd64

    Additional Notes

    If i remove go.mod file at the target dir, then gop run command will successed.

    If i readd go.mod file and remove auto generated gop_autogen.go file, then gop run will failed again.

    The above experiment should not be run under gop repo dir, any other dir which has a go.mod file will get such error.

  • exec/bytecode bug: swap struct slice element

    exec/bytecode bug: swap struct slice element

    In bytecode mode (https://jsplay.goplus.org/):

    type student struct {
        name	string
        age		int
        score	int
    }
    
    a := [student{"A", 13, 90}, student{"B", 12, 72}, student{"C", 12, 85}]
    a[1], a[2] = a[2], a[1]
    
    println(a)
    

    It got:

    [{A 13 90} {B 12 72} {B 12 72}]
    

    But int slice is good:

    a := [1, 3, 2]
    a[1], a[2] = a[2], a[1]
    
    println(a)
    

    It got:

    [1 2 3]
    
Floppa programming language inspired by the brainf*ck programming language. Created just for fun and you can convert your brainf*ck code to floppa code.

Floppa Programming Language Created just for fun. But if you want to contribute, why not? Floppa p.l. inspired by the brainf*ck programming language.

Oct 20, 2022
T# Programming Language. Something like Porth, Forth but written in Go. Stack-oriented programming language.

The T# Programming Language WARNING! THIS LANGUAGE IS A WORK IN PROGRESS! ANYTHING CAN CHANGE AT ANY MOMENT WITHOUT ANY NOTICE! Something like Forth a

Jun 29, 2022
Yayx programming language is begginer friendly programming language.
Yayx programming language is begginer friendly programming language.

Yayx Yayx programming language is begginer friendly programming language. What have yayx: Easy syntax Dynamic types Can be compiled to outhers program

Dec 27, 2021
Yayx programming language is begginer friendly programming language.

Yayx Yayx programming language is begginer friendly programming language. What have yayx: Easy syntax Dynamic types Can be compiled to outhers program

May 20, 2022
a dynamically typed, garbage collected, embeddable programming language built with Go

The agora programming language Agora is a dynamically typed, garbage collected, embeddable programming language. It is built with the Go programming l

Dec 30, 2022
Gentee - script programming language for automation. It uses VM and compiler written in Go (Golang).

Gentee script programming language Gentee is a free open source script programming language. The Gentee programming language is designed to create scr

Dec 15, 2022
Golem is a general purpose, interpreted scripting language.
Golem is a general purpose, interpreted scripting language.

The Golem Programming Language Golem is a general purpose, interpreted scripting language, that brings together ideas from many other languages, inclu

Sep 28, 2022
Port of the lemon parser generator to the Go programming language

From the golang-nuts mailing list (with few modifications): --== intro ==-- Hi. I just want to announce a simple port of the lemon parser generator

Feb 17, 2022
An LL(1) parser generator for the Go programming language.

What is it? I have implemented an LL(1) parser generator for the Go programming language. I did this to build parse trees for my HAML parser. You can

Jan 18, 2022
PHP bindings for the Go programming language (Golang)

PHP bindings for Go This package implements support for executing PHP scripts, exporting Go variables for use in PHP contexts, attaching Go method rec

Dec 27, 2022
Scripting language for Go.

Minima Minima is an experimental interpreter written in Go (the language is called the same). We needed a way to massage our JSON data with a scriptin

Feb 11, 2022
The Slick programming language is an s-expression surface syntax for Go.

The Slick programming language The Slick programming language is a Lisp/Scheme-style s-expression surface syntax for the Go programming language, with

Jan 8, 2023
Pineapple Lang is a simple programming language demo implements by Go

Pineapple Lang is a simple programming language demo implements by Go. It includes a hand-written recursive descent parser and a simple interpreter, although the language is not even Turing-complete. But this repo's main goal is to give beginners of compilation principles a warm up and a simple look at how a programming language is built.

Dec 26, 2022
Compiler for a small language into x86-64 Assembly

Compiler This project is a small compiler, that compiles my own little language into X86-64 Assembly. It then uses yasm and ld to assemble and link in

Dec 13, 2022
⛳ A minimal programming language inspired by Ink, JavaScript, and Python.

⛳ Golfcart My blog post: Creating the Golfcart Programming Language Getting Started Scope Rules Usage Building and tests Contributions License Golfcar

Sep 6, 2022
Simple, safe and compiled programming language.

The X Programming Language Simple, safe and compiled programming language. Table of Contents Overview OS Support Contributing License Overview The X p

Dec 28, 2022
A interpreter of SweetLang, is writed in Go Programming language.

SweetLang ( Soon ) A interpreter of SweetLang, is writed in Go Programming language. SweetLang is made with clarity and simplicity we try to make its

Oct 31, 2021
interpreter for the basic language written in golang
interpreter for the basic language written in golang

jirachi interpreter for the basic language written in golang The plan supports the following functions: Arithmetic Operations (+, -, *, /, ^) Comparis

Sep 17, 2022
Monkey programming language project from 'Writing An Interpreter In Go'and 'Writing A Compiler In Go' Books
Monkey programming language project from 'Writing An Interpreter In Go'and 'Writing A Compiler In Go' Books

Monkey Monkey programming language ?? project from "Writing An Interpreter In Go

Dec 16, 2021