This articles was published on 2013-05-01
What happened on the mruby front in April 2013?
The gemification is still proceeding. This month the following GEMs were created:
The two last ones are interesting due to the reason that we can now also extract tools like mruby and mirb into an own GEM.
When I created the first version of mrbgems last year I didn’t expect that we will end up with so many GEMs inside of the core. I’m not totally convinced that these GEMs will evolve easily inside of the core but on the other side Ruby was always so powerful due to his powerful and rich standard library. So we have to accept this growing trend and have to deal with it. Maybe even finding a way to simplify it. I worked on a first simplification approach by introducing GemBox into the mruby core this month. With GemBoxes you can define a collection of GEMs and include them easily via the new method gembox inside of a MRuby::Build. A documentation about this new feature was created by Andrew Nordman.
The next step to simplify the usage of many GEMs is quite obviously a dependency system. Lets think about a lightweight way to interconnect GEMs.
Lots of improvements of the standard library are taking place now inside of the GEMs. For example String got some new methods by improving the mruby-string-ext GEM:
Based on issue 1068, h2so5 took the initiative and implemented Proc#arity. Masaki Muranaka fixed NameError.new and implemented NameError.name at the same time. Matz on the other side implemented Module#constants.
A big portion of all commits this month and last month was consisting of refactoring the current code base. Mainly Matz and Masaki Muranaka renamed, removed and reduced existing code.
Here a list with all commits during this month.
Adds documentation for MRuby::GemBox usage
fix gembox rake tasks to support Ruby 1.8
IMPROVE: Move GemBox to more logical source location
FIX: Default build should use default GEMs and not all Core GEMs
Use gembox for travis build
Use gembox for default build
Add gembox which contains all default GEMs
Add gembox which contains all core GEMs
Add gembox feature
Move regression test as String#dump is not in ther core but the mrbgems.
Add tests to make sure. As we do not use standard library for formatting.
Add Symbol#to_proc, Symbol.all_symbols
Add mruby-proc-ext
Update doc/compile/README.md about mruby and mirb
Add mruby-range-ext
rename mruby,mirb gems to mruby-bin-{mruby,mirb}
Add verbose mode to mirb
Move mirb and mruby to mrbgems.
Change mruby-random License to MIT
Add comments: some methods is defined in mrbgems.
Add comments: eval method is defined in mrbgems.
Add a comment. Kernel#require is defined in the mrbgem.
Add implementation for respond_to_missing?
Add a test for respond_to_missing?
detect cyclic-include in Module#include
Add String#swapcase,swapcase!,concat,casecmp,start_with,end_with
Add Proc#arity
fix Module#ancestors and update test
Add NotImplementedError for Kernel.` and Kernel#`
fix test to check class variables in superclasses
Module#class_variables should check superclasses
Add one more test for NameError#initialize. As we support NameError#name.
Add test for NameError#name
Add `NameError#name`. Fix `NameError.new` and `NameError.initialize`. Enable 2nd argument for `NameError.new` in C API.
raise NotImplementedError from Module.constants (15.2.2.3.1); close #1125
Module#constants should include constants defined in superclass; close #1126
add Module#constants (15.2.2.4.24)
bugfix: Kernel#!=, and add #!= testcase.
rename mrb_to_id to mrb_obj_to_sym since symbol is nothing to do with identifier in mruby
use uint8_t for mrb_bool instead of unsigned int; close #1222
always use unsigned int as mrb_bool even in C++
change return value of mrb_free from void* to void
rename hash related gc functions
move mrb_shared_string definition to src/string.c
Add void to function parameters. This is for compatibility with C++
small cosmetic refactoring
rename mrb_interned API functions
remove unnecessary local variable
Remove redundant whitespaces. Just cosmetic.
rename every ARGS_XXX to MRB_ARGS_XXX; ref #1206
put MRB_ prefix before ARGS_XXX macros; ref #1206
rename MRB_ARGS_XXX to MRB_ASPEC_XXX; ref #1206
rename ARGS_GETXXX macros to avoid potential name conflict; close #1206
Simplify load.c. Remove code clones. Suppress return paths.
Use mrb_bool for the ‘b’ format specifier of mrb_get_args
Remove unused variable
Remove things that look done.
Use mrb_aspec instead of int32_t. As it will clarify what is doing.
Define mrb_code, mrb_aspec as uint32_t. They are always positive.
Clean up variable types and type casts.
Remove useless comments.
put spaces after if/while
small consmetic fix
Refactor kernel.c and class.c
use ISXDIGIT instead isxdigit on parser.y:3485
Replace malloc with mrb_malloc in mrbc
factor out redundant Regexp check into functions
Use mrb_name_error() as possible.
Move mrb_name_error() declaration to mruby.h As it is requred by struct mrbgem.
rename DATA API: mrb_get_datatype -> mrb_data_get_ptr; mrb_check_datatype -> mrb_data_check_and_get
remove unnecessary intern; access to non-member cause IndexError
remove our own prototype for sprintf(); ref #1223
Revert file access mode to 0644.
use mrb_free to free random state
fix memory leaks in mruby-random
fix mrb_string_shared memory leaks
add extern funcs declaration and casts for cimpiling C++ compiler
mrb_str_new_static(): zero copy string creation
quote error message in mrbconf.h to stop warning
Add a descrption of MRB_INT16.
Avoid defining MRB_INT16 adn MRB_INT64 at the same time. This is a poka-yoke.
Remove macro ANYARGS. It is not used in the core and bundled mrbgems. And it is possible to conflict an application’s macro.
Add comments why there is no need to put the SIZE_ERROR check. It is for reviews in the future.
Add error checks for small environments which pointer is less than 32bit. These code will be removed by optimizer if the target runs on 32bit or above.
More strict NULL checks.
Fix underlying memory leaks. When realloc is failed, memories are leaked.
suppress intern inside of ‘respond_to?’.
Remove sprintf().
remove calling sprintf(); ref #1210
a string may have a lot of non-printable chars.
aspec bits should be packed in Ax; ref #1209
remove too many paren; ref #1209
add new macro MRB_ARGS_ARG(n1,n2) to specify required and optional arugments at once
modify functions to suppress symbol registration into intern pool.
modify the type of return value (mrb_bool => mrb_value).
add new functions to check if symbols are interned without registration.
Fix wrong comment
Set ENV before loading Rakefile in minirake
Fix segfault on loading binary RITE files.
Pass verbose flag to each gem test
fix unnecessary irep_free
ensure clause should be executed only once; close #1185
should call ensure before popping callinfo; cancel 8ce1ea84
Use memcmp instead of strcmp if it is possible.
Remove a comment.
wrong type cast
Make str_modify public
Fix typo.
Minor code format changes.
catching NameError here is not desirable.
rollback stack before executing ensure clause.
Add Visual Studio 2010 subsection to Toolchains section of README.md
Fix “implementaion” to “implementation”
Add closing double-quotes
move no block check to mrb_yield_internal
Add vs2010.rake
add no block check; based on patch from h2so5; close #1174
Fixed irep index overflows, when defining new closure.
Don’t ignore host when adding libmruby.a to deps.
string interpolation (#{foo}) does stringify implicitly; no need to call #to_s
Fix TypeError messages
Move apps in gems to #{MRUBY_ROOT}/bin/ when apps is built for “host”.
Use not tool/ but tools/. This is for naming consistency.
Cosmetic changes.
Refactor mrb_str_dump
Fix mirb to use readline
Add validation for C language symbol name
preparation for tail call optimization (still has bugs)
Show version only once with ‘-v’ option in mruby/mrbc
although I understand the intntion of 039679f1, consuming all memory in the test program is not a good idea
target_class should not be TT_ICLASS; close #1152
nregs size was too big (off by one); close #1137
Fix a memory leak in mirb
Fix checking for heredoc in mirb
Add ARGV constant. It is not required by ISO. Compatibility with CRuby.
Support $0 variable.
Add “test runner” support for cross builds. “test runner” means target simulator like QEmu, GDB sim, and so on. Also “test runner” might be debug agents for real targets. If you do not setup test_runner, Rake will work same as before.
stdint header seems required on osx for uint8_t
Define isascii for C99
Improve checking for unterminated string in mirb
Add some tests.
comment E_* macros to address concerns in #1143
parse_args should return either EXIT_SUCCESS or EXIT_FAILURE
use EXIT_SUCCESS and EXIT_FAILURE for exit status; close #1142
Fix exit
Improve CRuby rake compatible
Add syntax error for incomplete global variables
sort mrblib/*.rb files to compile (class.rb comes before error.rb); close #1132; close #1134
Add syntax error for incomplete instance/class variables
method function should return mrb_value
make Data_Make_Struct a statement to make it C99 compatible
Adjust ci->nregs to prevent heap corruption
Add “Comparable” to labels.
Add test cases.
revert 79ebdb5 for the time being #1110
mrb_any_to_s: add separator
Add fib39.rb to benchmark/
Use mrb_raise() as possible instead of mrb_raisef().
Fix typos.
Fix to fit new raisef format.
Add the care for malloc failed. At the first time, mrb_realloc raise RuntimeError. At the time fails twice in a row, it causes panic.
Add out_of_memory field to mrb_state.