Categorygithub.com/rasky/gojit
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.

# Packages

Package amd64 implements a simple amd64 assembler.
Package bf implements a JIT compiler for the Brainfuck programming language.
No description provided by the author

# 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