Skip to content
This repository has been archived by the owner. It is now read-only.
a dynamically typed, garbage collected, embeddable programming language built with Go
Go Other
  1. Go 99.7%
  2. Other 0.3%
Branch: master
Clone or download
Latest commit fc5914d Jan 25, 2015
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
bytecode update build Oct 8, 2013
cmd/agora remove go build info from build file Oct 5, 2013
compiler fix doc, clean-up some TODOs that are now open issues Oct 5, 2013
doc fix doc, clean-up some TODOs that are now open issues Oct 5, 2013
runtime small fix Oct 8, 2013
testdata small fix Oct 8, 2013
.gitignore refactor compiler interface to return *bytecode.File Aug 24, 2013
CONTRIBUTING.md make an Object interface, more stdlib func Sep 8, 2013
LICENSE
Makefile remove go build info from build file Oct 5, 2013
README.md update changelog Oct 8, 2013
agora_test.go rename funcs from PR Jan 25, 2015
doc.go review bytecode and runtime, close #33 Oct 6, 2013

README.md

The agora programming language

Agora is a dynamically typed, garbage collected, embeddable programming language. It is built with the Go programming language, and is meant to provide a syntactically similar, loose and dynamic companion to the statically typed, machine compiled Go language - somewhat like Lua is to C.

Installation

go get -t github.com/PuerkitoBio/agora/...

This will install the agora packages as well as the agora command-line tool. See agora -h for help, provided the $GOPATH/bin path is in your exported path. The -t flag installs the test dependencies, it works only on Go 1.2 and later, omit it otherwise.

Example

Much more examples are available in the wiki and the source code under /testdata/src, but to give a taste of the syntax, here is the mandatory hello world:

// Output: Hello, Agora !
fmt := import("fmt")
func greet(name) {
	fmt.Println("Hello,", name, "!")
}
greet("Agora")

A few things to note:

  • It looks very similar to Go, minus the types.
  • import is a built-in function, not a keyword. This is important with dynamically-loaded modules, it gives you control of where this overhead of loading and compiling the code is done. It returns the value exported by the module - in this case, an object that exposes methods like Println.
  • Obviously, since this is a dynamically-typed language, arguments have no types.
  • := introduces a new variable. Using an undefined variable is an error, so this statement could not have been =.
  • Statements are valid in the top-level (module) scope. That's because a module (the name for an agora file) is an implicit (top-level) function.
  • Semicolons are managed just like in Go, so although they are inserted in the scanning stage, they are optional (and usually omitted) in the source code.

Resources

Changelog

v0.2.0 / 2013-10-08

v0.1.0 / 2013-09-17

License

Agora is licensed under the BSD 3-Clause License, the same as the Go programming language. The full text of the license is available in the LICENSE file at the root of the repository.

You can’t perform that action at this time.