All Projects → mna → specter

mna / specter

Licence: BSD-3-Clause license
a (tiny) VM project built with Go

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects
shell
77523 projects

Projects that are alternatives of or similar to specter

Footloose
Container Machines - Containers that look like Virtual Machines
Stars: ✭ 1,289 (+2161.4%)
Mutual labels:  vm, virtual-machine
Quickjs
QuickJS是一个小型并且可嵌入的Javascript引擎,它支持ES2020规范,包括模块,异步生成器和代理器。
Stars: ✭ 2,199 (+3757.89%)
Mutual labels:  vm, virtual-machine
Redtamarin
AS3 running on the command line / server side
Stars: ✭ 105 (+84.21%)
Mutual labels:  vm, virtual-machine
Enigma
An Erlang VM implementation in Rust
Stars: ✭ 877 (+1438.6%)
Mutual labels:  vm, virtual-machine
Macos Virtualbox Vm
Instructions and script to help you create a VirtualBox VM running macOS.
Stars: ✭ 2,385 (+4084.21%)
Mutual labels:  vm, virtual-machine
Ebcvm
EFI Byte Code Virtual Machine in userspace
Stars: ✭ 34 (-40.35%)
Mutual labels:  vm, virtual-machine
E4vm
A small portable virtual machine that would run Erlang on embedded systems
Stars: ✭ 124 (+117.54%)
Mutual labels:  vm, virtual-machine
Vmcli
A set of utilities (vmcli + vmctl) for macOS Virtualization.framework
Stars: ✭ 571 (+901.75%)
Mutual labels:  vm, virtual-machine
Tagha
Minimal, low-level, fast, and self-contained register-based bytecode virtual machine/runtime environment.
Stars: ✭ 101 (+77.19%)
Mutual labels:  vm, virtual-machine
Box
[DEPRECATED] Official, pre-packaged Vagrant Box
Stars: ✭ 197 (+245.61%)
Mutual labels:  vm, virtual-machine
Ethereumjs Monorepo
Monorepo for the Ethereum VM TypeScript Implementation
Stars: ✭ 813 (+1326.32%)
Mutual labels:  vm, virtual-machine
Linux Unattended Installation
This project provides all you need to create an unattended installation of a minimal setup of Linux.
Stars: ✭ 215 (+277.19%)
Mutual labels:  vm, virtual-machine
Lc3 Vm
Write your own virtual machine for the LC-3 computer!
Stars: ✭ 631 (+1007.02%)
Mutual labels:  vm, virtual-machine
Dockerpi
A Virtualised Raspberry Pi inside a Docker image
Stars: ✭ 1,064 (+1766.67%)
Mutual labels:  vm, virtual-machine
Mac
bytecode interpreter in c (blog post)
Stars: ✭ 628 (+1001.75%)
Mutual labels:  vm, virtual-machine
Quickjs
The official repo is at bellard/quickjs.
Stars: ✭ 1,429 (+2407.02%)
Mutual labels:  vm, virtual-machine
Embiggen Disk
embiggden-disk live-resizes a filesystem after first live-resizing any necessary layers below it: an optional LVM LV and PV, and an MBR or GPT partition table
Stars: ✭ 440 (+671.93%)
Mutual labels:  vm, virtual-machine
Awesome Wasm Runtimes
A list of webassemby runtimes
Stars: ✭ 490 (+759.65%)
Mutual labels:  vm, virtual-machine
Lam
🚀 a lightweight, universal actor-model vm for writing scalable and reliable applications that run natively and on WebAssembly
Stars: ✭ 176 (+208.77%)
Mutual labels:  vm, virtual-machine
Customasm
💻 An assembler for custom, user-defined instruction sets! https://hlorenzi.github.io/customasm/web/
Stars: ✭ 211 (+270.18%)
Mutual labels:  vm, virtual-machine

Specter

Specter is an implementation of GenTiradentes' TinyVM in Go (the original is written in C).

This is very much to learn about virtual machines (this is my first attempt at a VM, so huge thanks to GenTiradentes for making a minimal one, easy to grasp).

The whole implementation takes about 500 lines of Go code.

Performance

It runs all examples available in TinyVM's repository, at roughly 30% slower than C, and at 7% slower with bounds-checking disabled. See more about the benchmarks in the bench subfolder.

Memory

Specter runs at a higher (but stable) memory footprint than its C counterpart, however note the following (copied from the mailing list, thanks to Carlos Castillo, edited):

BTW: The memory use [...] hovers at a high-ish number (70Mb in my case) because the garbage collection code doesn't run until memory use exceeds a given threshold. When it does, all the generated intermediate strings/slices are found but the memory is not returned to the OS, it is instead re-used for any following allocations, so the memory usage stat according to the OS stays at that threshold. If you set the environment variable GOGCTRACE=1 before running your code you can see when the garbage collector runs, and what happened during the run.

Thanks

The great Go community on the mailing list.

License

The BSD 3-Clause license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].