ランキングに戻る

goplus/xgo

Goxgo.dev

XGo is a programming language that reads like plain English. But it's also incredibly powerful — it lets you leverage assets from C/C++, Go, Python, and JavaScript/TypeScript, creating a unified software engineering ecosystem. Our vision is to enable everyone to become a builder of the world.

data-sciencegoplusscientific-computingstem-educationgolanglow-codeprogramming-languagestemxgoai-native
スター成長
スター
9.4k
フォーク
565
週間成長
Issue
28
5k
2015年12月2019年6月2023年1月2026年7月
成果物Go Modulesgo get github.com/goplus/xgo
README

Build Status Coverage Status GitHub release Discord

XGo is a programming language that reads like plain English. But it's also incredibly powerful — it lets you leverage assets from C/C++, Go, Python, and JavaScript/TypeScript, creating a unified software engineering ecosystem.

XGo := C * Go * Python * JavaScript + Scratch

Our vision is to enable everyone to become a builder of the world.

Easy to learn

  • Simple and easy to understand
  • Smaller syntax set than Go and Python in best practices

Ready for large projects

  • Integrate C/C++, Go, Python, and JavaScript/TypeScript into a unified ecosystem
  • Derived from Go and easy to build large projects from its good engineering foundation

The XGo programming language is designed for engineering, STEM education, and data science.

  • For engineering: working in the simplest language that can be mastered by children.
  • For STEM education: studying an engineering language that can be used for work in the future.
  • For data science: communicating with engineers in the same language.

For more details, see Quick Start.

Key Features of XGo

How XGo simplifies Go's expressions

Different from the function call style of most languages, XGo recommends command style code:

println "Hello world"

To emphasize our preference for command style, we introduce echo as an alias for println:

echo "Hello world"

For more discussion on coding style, see https://tutorial.xgo.dev/hello-world.

Code style is just the first step. We have made many efforts to make the code more intuitive and closer to natural language expression. These include:

Go code XGo code Note
package main

import "fmt"

func main() {
    fmt.Println("Hi")
}
import "fmt"

fmt.Println("Hi")
Program structure: XGo allows omitting package main and func main
fmt.Println("Hi") echo("Hi") More builtin functions: It simplifies the expression of the most common tasks
fmt.Println("Hi") echo "Hi" Command-line style code: It reduces the number of parentheses in the code as much as possible, making it closer to natural language
name := "Ken"
fmt.Printf(
  "Hi %s\n", name)
name := "Ken"
echo "Hi ${name}"
Goodbye printf, use ${expr} in string literals
a := []int{1, 2, 3} a := [1, 2, 3] List/Slice literals
a = append(a, 4)
a = append(a, 5, 6, 7)
a <- 4
a <- 5, 6, 7
Append values to a list
a := map[string]int{
    "Monday": 1,
    "Tuesday": 2,
}
a := {
    "Monday": 1,
    "Tuesday": 2,
}
Map literals
OnStart(func() {
    ...
})
onStart => {
    ...
}
Lambda expressions
Play("1.mp3", &Options{Loop: true}) play "1.mp3", loop = true Python-like keyword arguments (kwargs)
type LogLevel string

const (
    Info   LogLevel = "info"
    Warn LogLevel = "warn"
    Error LogLevel = "error"
)
type LogLevel const (
    Info   = "info"
    Warn = "warn"
    Error = "error"
)
Simplified enum type declaration
type Rect struct {
    Width  float64
    Height float64
}
type Rect (width, height float64) Tuples vs. Structs: We encourage using tuples to implement UDTs instead of structs.
type Rect struct {
    Width  float64
    Height float64
}

func (this *Rect) Area() float64 {
    return this.Width * this.Height
}
var (
    Width  float64
    Height float64
)

func Area() float64 {
    return Width * Height
}
XGo Classfiles: We can express OOP with global variables and functions.

For more details, see The XGo Mini Specification.

Importing C/C++ and Python libraries

XGo can choose different Go compilers as its underlying support. Currently known supported Go compilers include:

  • go (The official Go compiler supported by Google)
  • llgo (The Go compiler supported by the XGo team)
  • tinygo (A Go compiler for small places)

Currently, XGo defaults to using go as its underlying support, but in the future, it will be llgo.

LLGo is a Go compiler based on LLVM in order to better integrate Go with the C ecosystem including Python and JavaScript. It aims to expand the boundaries of Go/XGo, providing limitless possibilities such as:

  • Game development
  • AI and data science
  • WebAssembly
  • Embedded development
  • ...

If you wish to use llgo, specify the -llgo flag when initializing an XGo module:

xgo mod init -llgo YourModulePath

This will generate a go.mod file with the following contents (It may vary slightly depending on the versions of local XGo and LLGo):

module YourModulePath

go 1.21 // llgo 1.0

require github.com/goplus/lib v0.2.0

Based on LLGo, XGo can import libraries written in C/C++ and Python.

Here is an example (see chello) of printing Hello world using C's printf:

import "c"

c.printf c"Hello world\n"

Here, c"Hello world\n" is a syntax supported by XGo, representing a null-terminated C-style string.

To run this example, you can:

cd YourModulePath  # set work directory to your module
xgo mod tidy       # for generating go.sum file
xgo run .

And here is an example (see pyhello) of printing Hello world using Python's print:

import "py/std"

std.print py"Hello world"

Here, py"Hello world" is a syntax supported by XGo, representing a Python string.

Here are more examples of XGo calling C/C++ and Python libraries:

To find out more about LLGo/XGo's support for C/C++ and Python in detail, please refer to homepage of llgo.

XGo Classfiles

One language can change the whole world.
XGo is a "DSL" for all domains.

Rob Pike once said that if he could only introduce one feature to Go, he would choose interface instead of goroutine. classfile (and class framework) is as important to XGo as interface is to Go.

In the design philosophy of XGo, we do not recommend DSL (Domain Specific Language). But SDF (Specific Domain Friendliness) is very important. The XGo philosophy about SDF is:

Don't define a language for specific domain.
Abstract domain knowledge for it.

XGo introduces classfile and class framework to abstract domain knowledge.

Sound a bit abstract? Let's see some XGo class frameworks.

yap: Yet Another HTTP Web Framework

This classfile has the file suffix .yap.

Create a file named get.yap with the following content:

html `<html><body>Hello, YAP!</body></html>`

Execute the following commands:

xgo mod init hello
xgo get github.com/goplus/yap@latest
xgo mod tidy
xgo run .

A simplest web program is running now. At this time, if you visit http://localhost:8080, you will get:

Hello, YAP!

YAP uses filenames to define routes. get.yap's route is get "/" (GET homepage), and get_p_#id.yap's route is get "/p/:id" (In fact, the filename can also be get_p_:id.yap, but it is not recommended because : is not allowed to exist in filenames under Windows).

Let's create a file named get_p_#id.yap with the following content:

json {
	"id": ${id},
}

Execute xgo run . and visit http://localhost:8080/p/123, you will get:

{"id": "123"}

See yap: Yet Another HTTP Web Framework for more details.

spx: A Scratch Compatible 2D Game Engine

Screen Shot1 Screen Shot2

Through this example you can learn how to implement dialogues between multiple actors.

Here are some codes in Kai.spx:

onStart => {
	say "Where do you come from?", 2
	broadcast "1"
}

onMsg "2", => {
	say "What's the climate like in your country?", 3
	broadcast "3"
}

We call onStart and onMsg to listen events. onStart is called when the program is started. And onMsg is called when someone calls broadcast to broadcast a message.

When the program starts, Kai says Where do you come from?, and then broadcasts the message 1. Who will receive this message? Let's see codes in Jaime.spx:

onMsg "1", => {
	say "I come from England.", 2
	broadcast "2"
}

Yes, Jaime receives the message 1 and says I come from England.. Then he broadcasts the message 2. Kai receives it and says What's the climate like in your country?.

The following procedures are very similar. In this way you can implement dialogues between multiple actors.

See spx: A Scratch Compatible 2D Game Engine for more details.

gsh: XGo DevOps Tools

Yes, now you can write shell script in XGo. It supports all shell commands.

Let's create a file named example.gsh and write the following code:

mkdir "testgsh"

Don't need a go.mod file, just enter xgo run ./example.gsh directly to run.

See gsh: XGo DevOps Tools for more details.

How to install

Note: Requires go1.19 or later

on Windows

winget install goplus.xgo

on Debian/Ubuntu

sudo bash -c ' echo "deb [trusted=yes] https://pkgs.xgo.dev/apt/ /" > /etc/apt/sources.list.d/goplus.list'
sudo apt update
sudo apt install xgo

on RedHat/CentOS/Fedora

sudo bash -c 'echo -e "[goplus]\nname=XGo Repo\nbaseurl=https://pkgs.xgo.dev/yum/\nenabled=1\ngpgcheck=0" > /etc/yum.repos.d/goplus.repo'
sudo yum install xgo

on macOS/Linux (Homebrew)

Install via brew

$ brew install xgo

from source code

git clone https://github.com/goplus/xgo.git
cd xgo

# On mac/linux run:
./all.bash
# On Windows run:
all.bat

XGo Applications

Game Programming

Web Programming

DevOps Tools

Data Processing

IDE Plugins

Contributing

The XGo project welcomes all contributors. We appreciate your help!

For more details, see Contributing & compiler design.

Give a Star! ⭐

If you like or are using XGo to learn or start your projects, please give it a star. Thanks!

関連リポジトリ
microsoft/ML-For-Beginners

12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all

Jupyter NotebookMIT Licensemldata-science
88.4k21.6k
apache/superset

Apache Superset is a Data Visualization and Data Exploration Platform

PythonPyPIApache License 2.0supersetapache
superset.apache.org
73.9k17.9k
Asabeneh/30-Days-Of-Python

The 30 Days of Python programming challenge is a step-by-step guide to learn the Python programming language in 30 days. This challenge may take more than 100 days. Follow your own pace. These videos may help too: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw

PythonPyPI30-days-of-pythonpython
68.8k12.8k
scikit-learn/scikit-learn

scikit-learn: machine learning in Python

PythonPyPIBSD 3-Clause "New" or "Revised" Licensemachine-learningpython
scikit-learn.org
66.7k27.2k
keras-team/keras

Deep Learning for humans

PythonPyPIApache License 2.0deep-learningtensorflow
keras.io
64.2k19.7k
pandas-dev/pandas

Flexible and powerful data analysis / manipulation library for Python, providing labeled data structures similar to R data.frame objects, statistical functions, and much more

PythonPyPIBSD 3-Clause "New" or "Revised" Licensedata-analysispandas
pandas.pydata.org
49.3k20.2k
GokuMohandas/Made-With-ML

Learn how to develop, deploy and iterate on production-grade ML applications.

Jupyter NotebookMIT Licensemachine-learningdeep-learning
madewithml.com
48.8k7.7k
apache/airflow

Apache Airflow - A platform to programmatically author, schedule, and monitor workflows

PythonPyPIApache License 2.0airflowapache
airflow.apache.org
46.2k17.4k
SimplifyJobs/Summer2026-Internships

Summer 2026 software engineering, data science, AI, quant, product management, and hardware internship postings. Updated daily by Simplify and Pitt CSC.

PythonPyPIinterview-preparationinternships
swelist.com
45.5k3.2k
streamlit/streamlit

Streamlit — A faster way to build and share data apps.

PythonPyPIApache License 2.0pythonmachine-learning
streamlit.io
45.3k4.3k
ray-project/ray

Ray is an AI compute engine. Ray consists of a core distributed runtime and a set of AI Libraries for accelerating ML workloads.

PythonPyPIApache License 2.0raydistributed
ray.io
43.3k7.8k
gradio-app/gradio

Build and share delightful machine learning apps, all in Python. 🌟 Star to support our work!

PythonPyPIApache License 2.0machine-learningmodels
gradio.app
43.2k3.6k