Lightweight Ruby● Compiler and VM This phase is done in Memory Management desktop environment Byte-code Generator Optimizer VM runs in target device Semantic Analyzer Memory Management Lexical Analyzer VM Syntax Analyzer Byte-code Loader Memory map in Memory map in Compilation phase Execution phase
Compiler and VM (image)Ruby Codesclass Motor < Motor3000TS def start @status = :on Byte-code is portable endend across any devices.m1=Motor.newm1.start Compiler LOAD r1, 0 SEND r0, :f0, 1 LOAD r1, 5Byte-code SEND r0, :f2, 1 LOAD r1, 0 SEND r0, :f0, 1 LOAD r1, 5 SEND r0, :f2, 1 VM Development Target Device
Requirement from embedded system developers● Use Ruby language for embedded systems ● “Ruby” requires over 20 or more MB memory ● Reduce using memory● Hide Ruby codes ● Encryption● Test and Reliability
Embedded System Development● Usual development style ● Implement codes in C/C++/Java ● Compile and Link, we get executable file ● Download executables to target device
Problems in development● Implement codes in C/C++/Java ● How to keep the quality of programs?● Compile and Link ● Cross-compilation ● Target dependent environment is necessary ● Link libraries, we get executable file ● We cannot execute this executable in desktop.● Download executables into target device ● We can TEST the executable file. Bugs....fix it
Development using mruby● Implement codes in Ruby● Compile, we get an executable file ● We can TEST in desktop. ● VM(for desktop) executes byte-code in desktop. Libraries are linked in execution.● Download the byte-code into target device ● VM(for target) executes byte-code in target device.
The Mechanism● VM executes Ruby program+Library● Ruby program(= Byte-code) is device independent.● Libraries are included in VM ● Target dependent VM is necessary. (Once VM is prepared, we can reuse same VM)
Dynamic Linking● Methods in Libraries are call by “method name” ● Even if the library was changed, we can find the method by seeking method name. LOAD r1, 0 SEND r0, :f0, 1 Device dependent LOAD r1, 5 Dynamic Linking methods SEND r0, :f2, 1Byte-code VM Target device※ “SEND” is like “CALL” instruction.
Advantages● Cross-compilation is not necessary ● Simple development and test (agile development) ● Test in desktop We dont have to wait the Hardware development.● Dynamic Linking ● Byte-code can be reused across the targets. ● Software family management
Disadvantage● Execution Speed is slow ● C : Ruby ~~ 100:1● VM is single threaded process ● If necessary, multiple VM● Interruption is not supported ● Interruption is catch by C Ruby is polling request to C
Application area● User Interface，Communication ● Customize is easy● Network ● Ruby is mainly used in Web applications ● Software Deployment in execution time (Dynamic linking, so we can change libraries in runtime)● Software Initialization ● Boot-up and settings ● Tuning, Test in various configurations
Advisors and their case study● Toshiba Information System ● Solar power regulation and monitoring● Fuji Electric ● Vending machine● IIJ Supported by ● Network router● Manycolors ● Bio-informatics● ILC ● GUI Libraries for Embedded Applications
Applicationsmruby on FPGA chip mruby on Industrial manipulator Multiple VMs on RTOS
Recent results● Memory Requirement ● RAM 150KB + ROM 250KB● Target platform: ● SH-4, TOPPERS（RTOS） ● H8（w/o OS） ● NIOS II（FPGA）, iTRON ● BeagleBoard（ARM Coretex A8）, Linux ● GR-SAKURA（Renesas RX63N）（w/o OS） ● Of course, Windows, Mac, Linux
Open Souece Sofrware● Lightweight Ruby is called mruby ● Released in GitHub, beta version https://github.com/mruby ● MIT License You can use mruby without any charge for any purpose ● Show the MIT License description and Licenser
mruby forum● NPO mruby forum ● Maintain the mruby codes ● Support for libraries ● License management ● Spread http://forum.mruby.org/