Skip to content

datatrash/mashi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MASHI まし

A 100% no-std compatible Rust implementation of a PAQ style arithmetic coding, context mixing compressor. Its intended use case is compressing 64k demos, but whatever works for you!

Quick start

The main crate is mashi-core but I've provided a very bare-bones mashi-cli so you can test the compressor.

To build and use the CLI:

  • cargo build --release
  • target/release/mashi-cli compress tests/test.wasm
  • target/release/mashi-cli decompress tests/test.wasm.mashi

Cargo features

  • Use the encoder feature if you want to include the encoder
  • Use the std feature to enable std support (e.g. for running the unit tests)

Unscientific benchmarks

Compressing tests/test.wasm with various compressors:

Compressor % Size Command-line
mashi 34.4% 12083 mashi-cli compress
zpaq 37.0% 13004 zpaq a -m5
xz 38.5% 13522 xz --format=raw --lzma2=preset=9e
zstd 41.3% 14536 zstd --ultra -22
gzip 44.5% 15629 gzip --9
original 100% 35151

License

Since the original PAQ compressors are GPL licensed be aware that Mashi is also GPL licensed.

Credits

  • The compression model is based on the PAQ work by Matt Mahoney et al.
  • The arithmetic coder is a port of the one in Crinkler, done by Mentor and Blueberry.
  • Wrapping my head around all of this was aided by the videos of Jeff Miller and the compression seminar by Ferris at Revision 2020.
  • Some of my porting efforts were eased by the work done by aufdj.

About

A Rust no-std (de)compressor based on PAQ

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages