Skip to content

wspace/censoredusername-whitespacers

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A whitespace JIT compiler, written in Rust

Features

  • Provides both a library for embedding and a command-line tool.
  • Implements the whole whitespace standard, including arbitrary precision integers.
  • Extremely fast. Whitespace code can be compiled to near-native speed levels. Executing over a billion whitespace instructions per second is common.
  • Provides options for interpretation for unclear parts of the standard.
  • Can convert whitespace code to/from a readable assembly language.

Why

  • I needed a project to learn Rust with.
  • Every language needs a whitespace interpreter!
  • I ended up overdoing it a bit.

Benchmarks:

Whitespacers offers several interpretation methods. These benchmarks show the difference between the techniques and fallbacks. These benchmarks were created by executing wsinterws.ws (a whitespace interpreter written in whitespace) on this whitespace program. Correct execution requires the execution of 3.329.985.013 whitespace instructions. Executing this program requires --unchecked-heap.

The time mentioned is purely the execution time. Other operations are very insignificant compared to it as the second largest time consumer is parsing at approximately 0.001 s.

The used machine for benchmarking is a 2.6 GHz i7-4720HQ.

Execution tactic Time [s] whitespace instructions per second
The fallback bignum interpreter 193.514444790 17.207.940
The reference interpreter 35.265381255 94.426.457
Optimized interpretation 12.077388375 275.720.620
JIT-compilation 3.311839939 1.005.478.849

It should however be noted that this benchmark is heap-heavy code. In pure stack code speeds in excess of 3.000.000.000 instructions per second have been reached.

Documentation

Documentation is available here.

Build instructions

Just run cargo run --release to run the interpreter. The library can also be downloaded directly from crates.io.

License

MPL-2.0, see LICENSE