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:
-
gojit
Contains the basic JIT support -- allocate executable chunks of memory, and convert them into callable golang functions.
-
amd64
Contains a simplistic amd64 assembler designed for use with
gojit
-
bf
Contains a just-in-time compiler for Brainfuck that demos the above packages
-
gobf
Contains 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.