There are no reviews yet. Be the first to send feedback to the community and the maintainers!
== About GoLightly == GoLightly is a lightweight virtual machine library implemented in Go, designed for flexibility and reuse. Traditionally popular VMs have adopted a stack-based design as this is perceived to be easier to implement than the register-based design that real-world hardware generally uses. There are arguments both ways on which of the two approaches is 'better' and it's not our intention to mandate either: a good VM toolkit should leave that decision to those who know which suits their purpose best. However just because GoLightly adopts a careful neutrality on this issue doesn't mean that it has nothing fresh to offer. Firstly GoLightly provides support for vector instructions allowing each virtual processor to handle large data sets more efficiently than in traditional VM designs. Not only is this a boon for fast maths, it also allows complex data structures to be transferred between virtual processors with only a couple of instructions. And speaking of multiple virtual processors, once a processor has been initialised it can be cloned with a single instruction and both processors are hooked together with a communications channel. Each processor has its own dynamic instruction definition and dispatch mechanism providing a flexible model during development. However function-based dynamic dispatch is more expensive than the switch-based dispatch used in traditional VM designs so the latter is also supported via type embedding of the ProcessorCore and method hiding of InlinedInstructions(). One interesting consequence of making each virtual processor configurable in this manner is that it allows complex problems to be modelled in terms of several different processors running relatively simple programs and arranged in a pipeline. Likewise the ability to clone virtual processors can be used as a building block for transactional and speculative execution. == Tests and Benchmarks == Golightly includes a large collection of tests and benchmarks. A simple set of micro-benchmarks is available to judge the relative cost of various standard Go instructions and idioms which can be invoked from the command-line: cd go gotest -benchmarks="Benchmark" Likewise the test suite for the VM primitives can be executed with: cd vm gotest and the optional benchmarks invoked with: gotest -benchmarks="Benchmark" These include extensive micro-benchmarks focusing on individual primitive operation performance which will hopefully act as a useful guide to relative performance for those writing compilers or assemblers targeting GoLightly virtual machines.
gospeed
Go micro-benchmarks for calculating the speed of language constructsGoNotebook
All source code from my golang book A Go Developer's Notebookslices
Implementations of slice-based data types in GoGoNetworking
Example code demonstrating how the use of Go's standard networking libraries for plaintext and encrypted communications, drawn from conference talks in 2014.serendipity
A pure Go relational database system ported from and inspired by SQLite 3lists
Implementations of various linear and cyclic list data-structures for Gosequences
Generic Go iterators on steroidswendigo
An experimental translation of SQLite to Go - superseded by Serendipitychain
An implementation of the classic Lisp-style Cons list data structure, a chain of value-link pairs.sexp
An S-Expression library for Goraw
Taking a Ruby-shaped chainsaw to Go type safety in the interests of elegancegreenspun
A collection of useful lisp functionality for inclusion in complex Go programs embracing Greenspun's 10th LawGoFORTH
A primitive Forth implementation in Goatomiser
an input scanner for reading s-expressions and turning them into go data objectstypelib
A collection of container types for Go's core types providing a batteries-included experience as usually found in higher level languages such as Ruby and Python.vm-fragments
Code fragments from my talks on implementing virtual machinesGoGenericsTalk
Code from a series of talks on Generics, Reflection, Higher-Order Functions and Collections in Godice
A simple dice pool abstraction for pen-and-paper style gamesWebSocketTalk
Code from GoLab 2020 talk on WebSockets in Golangsets
Hash-based sets for goGoFigure
Trivial command-line file template tool written in GogoDB
A high-level database access library for Gointro_to_fp_in_go
Code from An Introduction to Functional Programming in Gomaps
Go generic functions for manipulating map data typeswebcryptodemo
Simple examples of writing RESTy encrypted web services in #golangRuby-Plumber-s-Toolkit
Code for interfacing Ruby with low-level OS facilitiesjittery
Go package to use panic/recover for custom flow control.feyeleanor.github.com
Profile pagesGoParanoia
Code from the Golab 2019 workshop "Adventures in Paranoia with Go and SQLite"Love Open Source and this site? Check out how you can help us