Skip to content
A marshal gem for Mruby written in C
C Ruby
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

A C version of the marshalling code for Mruby

Here is my humble contribution to Mruby, marshalling code written in C.

The current marshalling code for Mruby is written in c++. I am in the process of creating a small-footprint linux environment. One of its prerequisites is that the c++ compiler is not even generated.

The current marshalling code is the only part of Mruby that I use that is written in c++. Furthermore, I had problems with the code in the past, and deeply regretted not being able to easily see what was going on, due to the well-known opaqueness of many c++ colloquialisms.

Having bounced on this problem again yesterday morning, I decided to see if I could write something. As what is inside here (less than 600 lines of C code) has been the result of barely one and a half days' work, I am quite satisfied. The code matches my needs.

The following are marshalled:

  • nil
  • true
  • false
  • integers
  • floating-points
  • strings
  • symbols
  • arrays
  • hashes
  • classes
  • modules
  • objects:
    • if the object defines functions marshal_dump and marshal_load, marshals whatever object is returned from marshal_dump, and restores the object passing to marshal_load that object,
    • otherwise, backs up and restores all instance variables.
  • regular expressions

About regular expressions: I only tested this when using the mruby-onig-regexp gem. If you use another gem, you have to change the class definition at L.32 of base.c, and I am not sure everything will work...

In the directory you find a quick-and-dirty exerciser, that can also be run under Ruby (MRI).


Just add a line like this one:


into your build_config.rb file.

You can’t perform that action at this time.