Towards an interactive mruby shell

mruby, Ruby 1 Comment

In my last post I investigated the possibility of using mruby as embedded language for AvocadoDB. As the first results look quite promising I decided to write a small interactive mruby shell. There is no better way to explore a new toy than to play with it.

(Un)fortunately “irb” from Ruby is written in Ruby itself, so one cannot just use it for mruby. So, instead I had to write a small C++ program using “readline” and the compile/execute functions from mruby. In order to implement a Read-Eval-Print-Loop, well, one needs the print. That in itself is more complicated than expected, see the discussion on github. So, a Read-Eval-Loop will have to do for the time being. In order to find out when a definition is finished I had to do a small patch to the mruby parser. So, if things break down horribly do not blame the mruby developers – it might be entirely my fault.

fceller@opensuse114:~/AvocadoDB-MASTER> ./avocirb 
                        _      _      
   __ ___   _____   ___(_)_ __| |__   
  / _` \ \ / / _ \ / __| | '__| '_ \  
 | (_| |\ V / (_) | (__| | |  | |_) | 
  \__,_| \_/ \___/ \___|_|_|  |_.__/  
                                      
Welcome to avocirb 0.3.12. Copyright (c) 2012 triAGENS GmbH.
Using MRUBY 0.0.0 engine. Copyright (c) 2012 mruby developers.
Using READLINE 6.1.

avocmrb> p 1 + 2
3
avocmrb> def hallo
.......>   p "Hallo World"
.......>   return 10
.......> end
avocmrb> $i = hallo
"Hallo World"
avocmrb> p $i
10

The source-code can be found on github. Please keep in mind that this is a snapshot of the mruby repository with modifications. Do not blame the mruby developers.

In case you are using homebrew, you can install it as follows:

fceller@kendenich:~> brew uninstall avocadodb
Uninstalling /usr/local/Cellar/avocadodb/HEAD...
fceller@kendenich:~> brew install --HEAD avocadodb
==> Installing avocadodb
...
fceller@kendenich:~> avocirb 
                        _      _      
   __ ___   _____   ___(_)_ __| |__   
  / _` \ \ / / _ \ / __| | '__| '_ \  
 | (_| |\ V / (_) | (__| | |  | |_) | 
  \__,_| \_/ \___/ \___|_|_|  |_.__/  
                                      
Welcome to avocirb 0.3.12. Copyright (c) 2012 triAGENS GmbH.
Using MRUBY 0.0.0 engine. Copyright (c) 2012 mruby developers.
Using READLINE 0x0402.hex.

avocirb> p "Hallo, my name is mruby"
"Hallo, my name is mruby"
avocirb> 

Again, this is currently just experimental program to play around with mruby. Still, I’ve you have any remarks or improvments, let me know.

About Frank Celler

Frank is both entrepreneur and backend developer, developing mostly memory databases for two decades. He is the lead developer of ArangoDB and co-founder of triAGENS. Try to challenge Frank asking him questions on C, C++ and MRuby. Besides Frank organizes Cologne’s nosql group & nosql conferences.
  • Patrick Mulder

    Very nice!

    How would I access the db/collections with mruby?
    Also, maybe it would be nice to provide a built-in help class with some background on the possible default methods in the shell?