goby

command module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 8, 2017 License: MIT Imports: 12 Imported by: 0

README

goby (rooby)

Backers on Open Collective Sponsors on Open Collective

Build Status Code Climate GoDoc Go Report Card codecov BCH compliance Readme Score

Goby is a Ruby-like object oriented language written in Go. And it's not a new Ruby implementation. Instead, it should be a language that help developer create api server or microservice efficiently.

It will have Ruby's syntax (I'll try to support all common syntaxes) but without most of Ruby's meta-programming magic to make the VM simple. It will also have built in http library that is built upon Go's efficient http package. And I'm planning to do more optimization by using goroutine directly.

Supporting Goby by sending your first PR! See contribution guideline

Or support us by donation (I quit my job to develop Goby in full-time, so financial support are needed 😢)

(We'll release first beta version in August, please checkout this issue for what features Goby will support.)

Table of contents

Supported Features

  • Can be compiled into bytecode (with .gbbc extension)
  • Can evaluate bytecode directly
  • Everything is object
  • Support comment
  • Object and Class
    • Top level main object
    • Constructor
    • Support class methods
    • Support inheritance
    • Support instance variable
    • Support self
  • Module
  • Namespace
  • Variables
    • Constant
    • Local variable
    • Instance variable
  • Method
    • Support evaluation with arguments
    • Support evaluation without arguments
    • Support evaluation with block (closure)
  • BuiltIn Data Types (All of them are classes 😀)
    • Class
    • Integer
    • String
    • Boolean
    • nil
    • Hash
    • Array
  • Flow control
    • If statement
    • while statement
  • Import other files
    • require_relative
    • require (only for standard libraries now)
  • Standard Libraries (all of them are at very early stage)
    • URI
    • Net::HTTP
    • Net::SimpleServer (This is very cool and quite performante, check the sample)
    • File
  • IO
    • puts
    • ARGV

(You can open an issue for any feature request)

Something different from Ruby
Method call syntax

For now, all method call needs to use parentheses to wrap their arguments. Including methods like require, include which we normally won't do this.

It'll look like:

require("foo")

class Bar
  include(Foo)
end

There's two reason for this:

I want to make Goby's syntax more consistent than Ruby

In Ruby you can write most of things in many different ways, and that can cause some confusion so we need style guide(s) to tell programmers write code consistently.

But in some programming languages like go, the syntax is very limited which in sometimes is very verbose, but this also makes program more easy to understand and maintain.

This requires a parser generator

Since our parser is handcrafted, supporting this feature would be hard and can easily cause bugs on some edge cases.

Although we definitely will replace current parser with a parser generator, this is not our top priority now.

If you have any thought on this, please join our discussion in this issue. We would love to hear some user's feedback 😁

Install

From Source
  1. You must have Golang installed
  2. You must have set $GOPATH
  3. Add your $GOPATH/bin into $PATH
  4. Run following command
$ go get github.com/goby-lang/goby
Via homebrew

Please checkout the latest release before using this approach

brew tap goby-lang/goby
brew install goby

For now, we recommend install Goby from source directly because it evolves really quick and we don't have time to release it frequently.

Usage

$ goby ./samples/server.gb

Samples

See sample directory for sample code snippets, like:

Documentations

Check out our API Documentation.

There is still a lot of document to add. Feel free to contribute following this guide.

Contribute

See the guideline.

Maintainers

  • @st0012
  • @janczer
  • @adlerhsieh
  • @hachi8833
  • @shes50103

Support Us

Backers

Support us with a monthly donation and help us continue our activities. [Become a backer]

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]

References

I can't build this project without these resources, and I highly recommend you to check them out if you're interested in building your own languages:

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Godeps
_workspace/src/github.com/fatih/structs
Package structs contains various utilities functions to work with structs.
Package structs contains various utilities functions to work with structs.
_workspace/src/github.com/looplab/fsm
Package fsm implements a finite state machine.
Package fsm implements a finite state machine.
_workspace/src/github.com/pkg/profile
Package profile provides a simple way to manage runtime/pprof profiling of your Go application.
Package profile provides a simple way to manage runtime/pprof profiling of your Go application.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL