mruby_cc icon indicating copy to clipboard operation
mruby_cc copied to clipboard

mruby to C parser

= What

This enables translating mruby code into C code (not necessarily human readable). The main benefit is increased performance. We cannot achieve performance of real programmer-written C code, but we can improve on performance of interpreted mruby.

Stable enough for testing, but not tested enough for production use.

= Install

https://github.com/mrbrdo/mruby_cc/wiki/Install

= Use

echo "puts 'hello world'" > test.rb ./compile test.rb

./runner test.so

= Advantages and disadvantages

Advantages

  • improved performance, obviously
  • code is shipped in binary form
    • virtually impossible to get back the original ruby code, because the binary code is compiled from mruby bytecode
    • 3rd party binary obfuscators can be used to make it virtually impossible to recover even the bytecode from which it was compiled
  • output is a C file, which can be manually optimized if necessary (this is an extreme case however)

Disadvantages

  • code is shipped in binary form
    • need to provide precompiled version for each platform, or compile on the fly (currently, this requires gcc or some compiler present on target machine)
    • it is not possible to ensure that the compiled file includes only ruby code, malicious users could include anything - solution is for vendor to oversee user-provided scripts, or to not allow user scripts, also to check CRC of binary to confirm authenticity
  • larger size of binary compared to ruby source file
    • about 300-500KB for typical script
    • compression should be very efficient, especially when compressing multiple files

= Dynamic loading of other files

Now it is possible to dynamically load other pre-compiled ruby files.

some_ruby_file.rb

load_compiled_mrb "dyn.so"

I recommend you use the full file path.

= Examples

https://github.com/mrbrdo/mruby_cc/wiki/Examples

= FAQ

https://github.com/mrbrdo/mruby_cc/wiki/FAQ

= Performance

https://github.com/mrbrdo/mruby_cc/wiki/Performance