This is the result of my spending the hack day at Gophercon 2014 playing with doing JIT from golang code. This repository contains several packages:
-
gojitContains the basic JIT support -- allocate executable chunks of memory, and convert them into callable golang functions.
-
amd64Contains a simplistic amd64 assembler designed for use with
gojit -
bfContains a just-in-time compiler for Brainfuck that demos the above packages
-
gobfContains a binary that provides a command-line interface to
bf
gobf can be fetched using
go get github.com/nelhage/gojit/gobf
And then run as gobf file.bf. For some built-in examples:
$ gobf $GOPATH/src/github.com/nelhage/gojit/bf/test/hello.bf
Hello World!
$ gobf $GOPATH/src/github.com/nelhage/gojit/bf/test/hello.bf | gobf $GOPATH/src/github.com/nelhage/gojit/bf/test/rot13.bf
Uryyb Jbeyq!
This code has been tested on darwin/amd64 and linux/amd64. It is
extremely unlikely to work anywhere else.