mruby is an open-source project which is looking forward to each contribution.
To make it easy to review and understand your change please keep the following things in mind before submitting your pull request:
Work on the latest possible state of mruby/master Create
a branch which is dedicated to your change Test your changes before
creating a pull request (./minirake test
) If possible write a
test case which confirms your change Don't mix several features or
bug-fixes in one pull request Create a meaningful commit message Explain
your change (i.e. with a link to the issue you are fixing) Use mrbgem to
provide non ISO features (classes, modules and methods) unless you have a
special reason to implement them in the core
How to style your C and Ruby code which you want to submit.
The core part (parser, bytecode-interpreter, core-lib, etc.) of mruby is written in the C programming language. Please note the following hints for your C code:
mruby should be highly portable to other systems and compilers. For this it is recommended to keep your code as close as possible to the C99 standard (www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf).
Although we target C99, we've heard some compilers in the embedded environment still requires declarations of local variables to be at the beginning of a scope. Until we confirm the situation has changed, we use the old-style variable declaration.
Visual C++ is also an important target for mruby (supported version is 2013
or later). For this reason features that are not supported by Visual C++
may not be used (e.g. %z
of strftime()
).
NOTE: Old GCC requires -std=gnu99
option to enable C99
support.
The dependencies to libraries should be kept to an absolute minimum. This increases the portability but makes it also easier to cut away parts of mruby on-demand.
This is the preferred comment style
Use C++ style comments only for temporary comment e.g. commenting out some code lines.
int main(void) { ... }
Parts of the standard library of mruby are written in the Ruby programming language itself. Please note the following hints for your Ruby code:
mruby is currently targeting to execute Ruby code which complies to ISO/IEC 30170:2012 (www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=59579).