Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vkazanov/bytecode-interpreters-post
A few basic bytecode interpreters used as example code in a series of articles
https://github.com/vkazanov/bytecode-interpreters-post
Last synced: 16 days ago
JSON representation
A few basic bytecode interpreters used as example code in a series of articles
- Host: GitHub
- URL: https://github.com/vkazanov/bytecode-interpreters-post
- Owner: vkazanov
- License: gpl-3.0
- Created: 2018-10-02T14:43:12.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-16T10:34:54.000Z (over 5 years ago)
- Last Synced: 2024-10-11T14:38:12.713Z (about 1 month ago)
- Language: C
- Homepage:
- Size: 1.06 MB
- Stars: 116
- Watchers: 11
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.org
- License: LICENSE
Awesome Lists containing this project
- AwesomeInterpreter - bytecode-interpreters-post
README
* What..?
A few basic bytecode interpreters used as example code in a series of articles. Given a recent GCC
all the interpreters can be compiled in one go using a supplied Makefile:#+BEGIN_SRC shell
make all
make test
#+END_SRC* Where?
Articles:
1. Home-grown bytecode interpreters ([[file:interpreter-p1.org][source in Russian]], [[https://habr.com/company/badoo/blog/425325/][Russian]], [[https://badootech.badoo.com/home-grown-bytecode-interpreters-51e12d59b25c][English]])
2. When pigs fly: optimising bytecode interpreters ([[file:interpreter-p2-pigletvm.org][source in Russian]], [[https://habr.com/company/badoo/blog/428878/][Russian]], [[https://badootech.badoo.com/when-pigs-fly-optimising-bytecode-interpreters-f64fb6bfa20f][English]])
3. Regex bytecode interpreter: looking for needles in session haystacks ([[file:interpreter-p3-matcher.org][source in Russian]], [[https://habr.com/company/badoo/blog/433054/][Russian]], [[https://badootech.badoo.com/regex-bytecode-interpreter-looking-for-needles-in-session-haystacks-9bbff9db09bc][English]])Interpreter examples:
1. [[file:interpreter-basic-switch.c][A trival switch interpreter]].
2. Immediate [[file:interpreter-immediate-arg.c][operand instruction example]].
3. [[file:interpreter-stack-machine.c][A stack vm]].
4. [[file:interpreter-register-machine.c][A register vm]].
5. A [[file:interpreter-regexp.c][regular expression matching machine]].
6. Various main loop implementations for [[file:pigletvm.h][PigletVM]].
7. [[file:piglet-matcher.h][Regular expression matcher]] defined on event sequences.* PigletVM, a trivial stack machine
PigletVM is a simple stack machine created for testing various bytecode interpreter main loop
implementations.PigletVM examples in PVM assembly:
1. A trivial [[file:test/sum.pvm][Sum of Numbers]]
2. Naive implementation of the [[file:test/sieve.pvm][Sieve of Eratosthenes]]Base techinques implemented:
1. basic switch
2. basic switch with the switch value range check eliminated
3. token threaded code
4. trace interpreterThanks to [[https://github.com/iliazeus][@iliazeus]] we now have a second set of the same interpreters with stack top cached:
1. basic switch with stack top cache
2. switch with no range check and stack top cache
3. token threaded code with a stack cache
4. trace interpreter with a stack cacheCompiling and running PigletVM assembler examples:
#+BEGIN_EXAMPLE
> # build all vms
> make all
> # Assemble the program and run it
> ./pigletvm asm test/sieve.pvm test/sieve.bin
> ./pigletvm run test/sieve.bin > /dev/null 07:54:24
PROFILE: switch code finished took 20ms
PROFILE: switch code (no range check) finished took 16ms
PROFILE: threaded code finished took 7ms
PROFILE: trace code finished took 8ms
PROFILE: switch code (reg cache) finished took 4ms
PROFILE: switch code (reg cache) (no range check) finished took 3ms
PROFILE: threaded code (reg cache) finished took 2ms
PROFILE: trace code (reg cache) finished took 5ms
> # Run the assembled program a number of times:
> ./pigletvm runtimes test/sieve.bin 100 > /dev/null 07:54:25
PROFILE: switch code finished took 430ms
PROFILE: switch code (no range check) finished took 384ms
PROFILE: threaded code finished took 472ms
PROFILE: trace code finished took 363ms
PROFILE: switch code (reg cache) finished took 350ms
PROFILE: switch code (reg cache) (no range check) finished took 304ms
PROFILE: threaded code (reg cache) finished took 255ms
PROFILE: trace code (reg cache) finished took 301ms#+END_EXAMPLE
* Want a proper language for PigletVM? PigletC to the rescue!
Apart from assembler there's a better way to write PigletVM programs. [[https://github.com/true-grue][@true-grue]] somehow managed to
implement a proper language compiled into PigletmVM assembler: [[https://github.com/true-grue/PigletC][PigletC]]!* PigletMatcher, event sequence matcher.
PigletMatcher is a regular expression engine defined for event sequences. It comes in two pieces: the
[[file:piglet-matcher.h][virtual machine itself]] and [[file:regexp/regexp.py][a parser]] based on the same tool that was used for [[https://github.com/true-grue/PigletC][PigletC]].