This articles was published on 2012-06-22
What happened this week on the mruby front?
Big work was done on the
Struct library. This class doesn’t SEGV anymore, additional test cases were added and the possibility to add or remove this library from the mruby-core was integrated.
Till now the
CFLAGS for mruby were always set to “-g -O3″. With this we had the benefit of having debug support build into every built. But most of the user out there might never use the gdb on mruby. So I decided to add the following three compile options to the Makefiles:
# compile with "-g -O3" COMPILE_MODE=debug make # compile with "-O3" COMPILE_MODE=release make # compile with "-Os" COMPILE_MODE=small make
Symbol got the spaceship method (<=>) and Module got also a lot (define_method, attr, attr_reader, attr_writer, attr_accessor). Lambda got initialize_copy and is now duplicable.
One method I was wondering about is printf. This one was also added this week. printf is working like print but calls sprintf before its execution. Due to the reason that sprintf is an optional feature of mruby-core, printf should be optional too. But it appears that printf is implemented in pure Ruby and has no compiler switch by now. Lets see what happens with this method.
Update: I made a change to
printf. Now it is only available if
sprintf is also enabled. I used
respond_to? to check if
sprintf is available. I’m curious if this is the best way. This code will now also be compiled into the core, even if
sprintf was deactivated. It won’t be executed but at least during initialization it will be called one-time. I guess it is ok for now but in case this kind of stuff is growing there might be another solution necessary.
Lately I played around with the customization of mruby. While I removed some features I notice that the test cases are failing (good indicator that they are working). Nevertheless I don’t want to see failing tests if I decided to not use specific features of mruby. So I decided to patch this behavior away. My first approach was to define a new constant which defines the configuration of the mruby-core. Matz actually suggested to check if the related class is defined. In the end this solution is more implementation-independent. All tests which are testing optional mruby features are from now on not executed if the feature is disabled.
Masaki Muranaka suggested to reduce the use of
strlen due to the reason that on small systems it is to blown. I think it is a good idea to look at optimization of the code but I’m not completely sure if now is already the right time to optimize parts of mruby.
sizeof instead of
strlen might not be such a dramatic optimization. But I’m afraid that we try to early to optimize the core and make the code in this way harder to read.