Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/goby-lang/goby
Goby - Yet another programming language written in Go
https://github.com/goby-lang/goby
api-server bytecode goby goby-codes goby-language golang interpreter object-oriented ruby
Last synced: 25 days ago
JSON representation
Goby - Yet another programming language written in Go
- Host: GitHub
- URL: https://github.com/goby-lang/goby
- Owner: goby-lang
- License: mit
- Created: 2017-02-08T09:23:33.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-02-25T04:27:37.000Z (over 1 year ago)
- Last Synced: 2024-05-22T20:24:00.406Z (6 months ago)
- Topics: api-server, bytecode, goby, goby-codes, goby-language, golang, interpreter, object-oriented, ruby
- Language: Go
- Homepage:
- Size: 7.95 MB
- Stars: 3,480
- Watchers: 85
- Forks: 171
- Open Issues: 34
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- my-awesome-github-stars - goby-lang/goby - Goby - Yet another programming language written in Go (Go)
- awesome-programming-languages - Goby - Goby is an object-oriented interpreter language deeply inspired by Ruby as well as its core implementation by 100% pure Go. Moreover, it has standard libraries to provide several features such as the Plugin system. Note that we do not intend to reproduce whole of the honorable works of Ruby syntax/implementation/libraries. (Uncategorized / Uncategorized)
- awesome-list - goby - Yet another programming language written in Go | goby-lang | 3262 | (Go)
- jimsghstars - goby-lang/goby - Goby - Yet another programming language written in Go (Go)
- awesome-list-microservice - goby - A new language helps you develop highly concurrent web application (golang)
README
![Goby](http://i.imgur.com/ElGAzRn.png?3)
=========[![](https://goby-slack-invite.herokuapp.com/badge.svg)](https://goby-slack-invite.herokuapp.com)
[![Build Status](https://travis-ci.com/goby-lang/goby.svg?branch=master)](https://travis-ci.com/goby-lang/goby)
[![GoDoc](https://godoc.org/github.com/goby-lang/goby?status.svg)](https://godoc.org/github.com/goby-lang/goby)
[![Go Report Card](https://goreportcard.com/badge/github.com/goby-lang/goby)](https://goreportcard.com/report/github.com/goby-lang/goby)
[![codecov](https://codecov.io/gh/goby-lang/goby/branch/master/graph/badge.svg)](https://codecov.io/gh/goby-lang/goby)
[![Readme Score](http://readme-score-api.herokuapp.com/score.svg?url=goby-lang/goby)](http://clayallsopp.github.io/readme-score?url=goby-lang/goby)
[![Snap Status](https://build.snapcraft.io/badge/goby-lang/goby.svg)](https://build.snapcraft.io/user/goby-lang/goby)
[![Open Source Helpers](https://www.codetriage.com/goby-lang/goby/badges/users.svg)](https://www.codetriage.com/goby-lang/goby)
[![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com)**Goby** is an object-oriented interpreter language deeply inspired by **Ruby** as well as its core implementation by 100% pure **Go**. Moreover, it has standard libraries to provide several features such as the Plugin system. Note that we do not intend to reproduce whole of the honorable works of Ruby syntax/implementation/libraries.
The expected use case for Goby would be backend development. With this goal, it equips (but not limited to) the following features:
- thread/channel mechanism powered by Go's goroutine
- Builtin database library (currently only support PostgreSQL adapter)
- JSON support
- [Plugin system](https://goby-lang.gitbooks.io/goby/content/plugin-system.html) that can load existing Go packages dynamically (Only for Linux and MacOS right now)
- Accessing Go objects from Goby directly> Note: Goby had formerly been known as "Rooby", which was renamed in May 2017.
## Table of contents
- [Demo screen and sample Goby app](#demo-screen-and-sample-goby-app)
- [Structure](#structure)
- [3D Visualization](#3d-visualization)
- [Features](#major-features)
- [Installation](#installation)
- [Usage](#verifying-goby-installation)
- [Sample codes](#sample-codes)
- [Documentation](https://goby-lang.org/docs/introduction.html)
- [Joining to Goby](#joining-to-goby)
- [Maintainers](#maintainers)
- [Supporters](#supporters)
- [References](#references)## Demo screen and sample Goby app
Click to see the demo below (powered by [asciinema](https://asciinema.org) and [GIPHY](https://giphy.com/)).
![](https://github.com/goby-lang/animation-gif/blob/master/goby_demo_large.gif)
**New!** Check-out our [sample app](http://sample.goby-lang.org) built with Goby. Source code is also available [here](https://github.com/goby-lang/sample-web-app).
## Structure
![](https://github.com/goby-lang/goby/blob/master/wiki/goby_structure.png)
## 3D Visualization
A 3D visualization of Goby codebase, powered by [GoCity](https://go-city.github.io/)
[![Goby 3D Visualization](https://github.com/goby-lang/goby/blob/master/wiki/goby_codebase_gocity-min.png)](https://go-city.github.io/#/github.com/goby-lang/goby)
## Major Features
- Plugin system
- Allows using Go libraries (packages) dynamically
- Allows calling Go's methods from Goby directly (only on Linux for now)
- Builtin multi-threaded server and DB library
- REPL (run `goby -i`)Here's a [complete list](https://github.com/goby-lang/goby/wiki/Features) of all the features.
## Installation
Confirmed Goby runs on Mac OS and Linux for now. Try Goby on Windows and let us know the result.
### A. Via Homebrew (binary installation for Mac OS)
**Note: Please check the [latest release](https://github.com/goby-lang/goby/releases) before installing Goby via Homebrew**
```
brew tap goby-lang/goby
brew install goby
```In the case, `$GOBY_ROOT` is automatically configured.
### B. From Source
Try this if you'd like to contribute Goby! Skip 1 if you already have Golang in your environment.
1. Prepare Golang environment
- Install Golang >= 1.14
- Make sure `$GOPATH` in your shell's config file( like .bashrc) is correct
- Add your `$GOPATH/bin` to `$PATH`
- Add `export GO111MODULE=on` to your shell profile
2. Run `go get github.com/goby-lang/goby`
3. Set the Goby project's exact root path `$GOBY_ROOT` manually, which should be:```
$GOPATH/src/github.com/goby-lang/goby
```### C. Installation on a Linux system
In order to install Go, Goby and PostgreSQL on a Linux system, see the [wiki page](https://github.com/goby-lang/goby/wiki/Setup-Go,-Goby-and-PostgreSQL-on-a-Linux-system).
### Verifying Goby installation
1. Run `goby -v` to see the version.
2. Run `goby -i` to launch igb REPL.
3. Type `require "uri"` in igb.FYI: You can just run `brew test goby` to check Homebrew installation.
**If you have any issue installing Goby, please let us know via [GitHub issues](https://github.com/goby-lang/goby/issues)**
### Using Docker
Goby has official [docker image](https://hub.docker.com/r/gobylang/goby/) as well. You can try the [Plugin System](https://goby-lang.gitbooks.io/goby/content/plugin-system.html) using docker.
## Syntax highlighting
The Goby syntax is currently a subset of the Ruby one, with an exception (`get_block`), therefore, it's possible to attain syntax highlighting on any platform/editor by simply switching it to Ruby for the currently opened file.
### Sublime Text 3
Sublime Text 3 users can use the `Only Goby` package, by typing the following in a terminal:
```sh
git clone [email protected]:saveriomiroddi/only-goby-for-sublime-text "$HOME/.config/sublime-text-3/Packages/only-goby-for-sublime-text"
```this will automatically apply the Goby syntax highlighting to the `.gb` files.
### Vim
Vim users can use the `vim-goby-syntax-highlighting` definition, by typing the following in a terminal:
```sh
mkdir -p "$HOME/.vim/syntax"
wget -O "$HOME/.vim/syntax/goby.vim" https://raw.githubusercontent.com/saveriomiroddi/vim-goby-syntax-highlighting/master/goby.vim
echo 'au BufNewFile,BufRead *.gb setf goby' >> "$HOME/.vim/filetype.vim"
```this will automatically apply the Goby syntax highlighting to the `.gb` files.
### SpaceVim
SpaceVim users can load the [`lang#goby`](https://spacevim.org/layers/lang/goby/) layer by adding following configuration:
```toml
[[layers]]
name = "lang#goby"
```## Sample codes
- [Built a stack data structure using Goby](https://github.com/goby-lang/goby/blob/master/samples/stack.gb)
- [Running a "Hello World" app with built in server library](https://github.com/goby-lang/goby/blob/master/samples/server/server.gb)
- [Sending request using http library](https://github.com/goby-lang/goby/blob/master/samples/http.gb)
- [Running load test on blocking server](https://github.com/goby-lang/goby/blob/master/samples/server/blocking_server.gb) (This shows `Goby`'s simple server is very performant and can handle requests concurrently)
- [One thousand threads](https://github.com/goby-lang/goby/blob/master/samples/one_thousand_threads.gb)More sample Goby codes can be found in [sample directory](https://github.com/goby-lang/goby/tree/master/samples).
## Joining to Goby
**Join us on Slack!** [![](https://goby-slack-invite.herokuapp.com/badge.svg)](https://goby-slack-invite.herokuapp.com)
See the [guideline](https://github.com/goby-lang/goby/blob/master/CONTRIBUTING.md).
## Maintainers
- @st0012
- @hachi8833
- @saveriomiroddi## Designer
- [steward379](https://dribbble.com/steward379)## Supporters
### Sponsors
### Powered by
* JetBrains [Goland IDE](https://www.jetbrains.com/go/?from=goby)
[![JetBrains Goland](https://github.com/goby-lang/goby/blob/master/wiki/goland_logo-text.png)](https://www.jetbrains.com/go/?from=goby)
**Supporting Goby by sending your first PR! See [contribution guideline](https://github.com/goby-lang/goby/blob/master/CONTRIBUTING.md)**
## References
The followings are the essential resources to create Goby; I highly recommend you to check them first if you'd be interested in building your own languages:
- [Write An Interpreter In Go](https://interpreterbook.com)
- [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)
- [Ruby under a microscope](http://patshaughnessy.net/ruby-under-a-microscope)
- [YARV's instruction table](http://www.atdot.net/yarv/insnstbl.html)