modulepackage
0.0.0-20170619082035-3f68c53a974d
Repository: https://github.com/rasky/gojit.git
Documentation: pkg.go.dev
# README
gojit
-- pure-golang runtime code-generation
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
Using
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!
Portability
This code has been tested on darwin/amd64
and linux/amd64
. It is
extremely unlikely to work anywhere else.
# Functions
Addr returns the address in memory of a byte slice, as a uintptr.
Alloc returns a byte slice of the specified length that is marked RWX -- i.e.
Build returns a nullary golang function that will result in jumping into the specified byte slice.
BuildCgo is like Build, but the resulting provided code will be called by way of the cgo runtime.
BuildTo converts a byte-slice into an arbitrary-signatured function.
BuildToCgo is as Build, but uses cgo like BuildCGo.
Release frees a buffer allocated by Alloc.
# Constants
PageSize is the size of a memory page.
# Type aliases
No description provided by the author