[HN Gopher] Mruby: Ruby for Embedded Systems
       ___________________________________________________________________
        
       Mruby: Ruby for Embedded Systems
        
       Author : nateb2022
       Score  : 113 points
       Date   : 2025-12-22 05:00 UTC (5 days ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | nateb2022 wrote:
       | Also worth a mention: mruby/c (https://github.com/mrubyc/mrubyc),
       | which is an even smaller ruby for single-chip microprocessors
        
       | sillyboi wrote:
       | Let's call it Murby :)
        
         | shevy-java wrote:
         | I think the name mruby kind of makes sense; we have MRI (matz
         | ruby implementation) so the leading "M" there; we have jruby
         | too. We also have truffleruby which is a bit against that name
         | scheme ... but we could call it truby. Nobody does that, but we
         | could. And MRI could also be called c-ruby. These are not great
         | names though. Murby is also not a great name; it reminds me of
         | Murphy from Robocop though.
        
       | Broussebar wrote:
       | The best use case for Mruby I saw is this talk: "Developing your
       | Dreamcast games with mruby"[0] by Yuji Yokoo
       | 
       | [0]: https://m.youtube.com/watch?v=ni-1x5Esa_o
        
         | shevy-java wrote:
         | I'd like mruby as some kind of fail-save boot system. Ruby
         | powering the operating system as much as possible (ultimately
         | ruby is just syntactic sugar over C, though, so I am fine using
         | C of course).
         | 
         | The lack of documentation means that I'd just waste my time
         | though. Not going to do that.
         | 
         | Also, I think mruby and MRI should not be separate. It doesn't
         | do the project any good. It should be as modular as possible
         | but one code base only.
        
           | BenjiWiebe wrote:
           | I know both C and Ruby, and Ruby is far more than syntactic
           | sugar over C.
           | 
           | Like not even close.
        
       | pansa2 wrote:
       | Mruby isn't aimed at embedded systems, it's "lightweight Ruby"
       | intended to be embedded within a lower-level application. The
       | language it's most similar to is Lua.
       | 
       | My gut feeling comparing the two is that mRuby is a better (or at
       | least less "quirky") language, but Lua has a better (more robust)
       | implementation. I don't know how the two compare in terms of
       | performance or "lightweight-ness".
       | 
       | Lua definitely seems to be more widely-used, at least outside
       | Japan.
        
         | shevy-java wrote:
         | Agreed. Lua is older though. It was created in 1993.
         | 
         | mruby was created in 2012.
         | 
         | I have only two gripes with regard to mruby.
         | 
         | 1) The primary users are C hackers. That's ok, but it means it
         | also leaves out many other people. (Lua has the same problem of
         | course.)
         | 
         | 2) Documentation. This is something that really plagues about
         | 90% of ruby projects. And it's not getting any better. It is as
         | if in ruby, only 10% care about documentation - at best. Look
         | at rack, opal, wasm for ruby - the documentation is TOTAL
         | TRASH. Non-existing; look at rack. What a joke.
         | 
         | Now that ruby is following perl in its extinction path (sorry,
         | the numbers are hard and real, there is no way to deny it), the
         | ruby community should instead try to reverse that trend.
         | Instead you see mega-corporations such as shopify pwning the
         | remaining ecosystem and cannibalizing on it or people such as
         | DHH rant about how Europe is collapsing (what the actual ...
         | https://world.hey.com/dhh/europe-is-weak-and-delusional-but-...
         | - we need an alternative to rails, how can anyone still work
         | with DHH? Lo and behold, another shopify guy. The message is so
         | clear for everyone to see now). None of this will of course
         | revitalize ruby. Without an active AND actively growing
         | community, ruby is set to die. I say this as someone who still
         | uses ruby daily; I am tired of the "rumours of ruby dying are
         | exaggerated". Yes, the rumours are exaggerated - but they are
         | not rumours. The numbers are solid. TIOBE alone, with its 10000
         | faults, shows this trend clearly.
        
           | evolve2k wrote:
           | Hanami remains a bright spark as an alternative growing Ruby
           | app framework to Rails. The project is under active
           | development, I've met the core dev and they are lovely and
           | much more humble than DHH and the project aims to stick much
           | closer to the Ruby ways of doing things as opposed to the
           | rails way.
           | 
           | Sure the project just can't be as mature as Rails but it
           | deserves a look and we need to get behind projects like this
           | if we do indeed want to see Rails alternatives flourish and
           | grow.
           | 
           | https://hanamirb.org/
        
           | peteforde wrote:
           | It's genuinely wild how many times people feel the need to
           | declare that Ruby is dead.
           | 
           | If our competitors voluntarily choose to use tools that are
           | demonstrably less productive, that's great news for us.
           | 
           | So yes: Ruby is totally dead. No question. Without a doubt.
        
           | getdoneist wrote:
           | Ruby was used in Japan before Rails appeared, and it will
           | continue to be used after Rails dies.
        
           | vinceguidry wrote:
           | > look at rack. What a joke.
           | 
           | Yeah, I think the Ruby world burned out of the whole "make
           | everything nice" aesthetic when they alienated the everloving
           | fuck out of _why. Now it's a post-apocalyptic wasteland where
           | if you want nice things, you better be prepared to become a
           | right expert because you will have no one to turn to when it
           | breaks. I don't mind, I don't make money coding anymore and
           | the challenge makes me feel alive again.
           | 
           | If I ever get to the point to where I gotta learn the C API,
           | I'll do it through mruby. But it'll be a much easier path to
           | systems work to interop with Rust instead.
        
         | Levitating wrote:
         | There's no need to compare to Lua directly, there _many_
         | similar languages. Notably TCL, or more recently Rhai for Rust.
        
         | publicdebates wrote:
         | I've used Ruby and Lua for about 15 years now, and looked at
         | mruby (and possibly used it, I don't remember) about 10 years
         | ago. Having little else to contribute to society anymore,
         | perhaps my insight on these two languages might be of some use
         | to some.
         | 
         | IIrc, Matz designed Ruby as a pet passion project, and its
         | design was reactionary against excessiveness found in other
         | languages, hence its minimalism in arguably excessive syntax
         | and notation. Otoh, Tegcraf designed Lua out of pure necessity,
         | adding only the features needed to satisfy its clients' needs.
         | 
         | In my opinion, necessity always leads to the better product
         | than desire, hence C is still unbeat, having been formed under
         | similar circumstances. Lua's C API is copied by nearly every
         | other embeddable scripting language, including (I think) mruby.
         | Yet they were the first to come up with it, a testament to
         | their creativity under pressure.
         | 
         | Ruby (and mruby) takes the Smalltalk approach, and asks, what
         | if everything was an object and every function call is a method
         | call? Lua takes a less extreme approach, and merely asks, what
         | if every data structure was built on a hashmap?
         | 
         | Other than that, Lua takes a very minimal approach, having
         | break/goto but not continue, if/elseif but not switch,
         | metamethods but not inheritance. It gets to 90% of the
         | functionality of JavaScript with 10% of the spec and 1% of the
         | code. You can read the entire Lua manual in one Saturday. You
         | can read its grammar in under five minutes.
         | 
         | For all its cleverness, and as a price for its concise
         | implementation and design, Lua is inconvenient to use. Hence
         | the plethora of languages that compile to Lua and try to make
         | it more convenient to use. One comes to mind but I can't
         | remember or google the name successfully.
        
           | actionfromafar wrote:
           | There are Javascript to Lua compilers, used by Roblox
           | programmers.
        
           | MyOutfitIsVague wrote:
           | The MRuby embedding API isn't a whole lot like Lua's. Lua is
           | a fantastic experience to embed. You might have to futz with
           | the registry to store Lua objects in a C struct, but the
           | abstraction allows you to almost never have to actually worry
           | about the VM internals or the GC directly. Mruby is a lot
           | more like MRI Ruby's API. Raw objects are exposed to you, you
           | have to turn off strict aliasing because inheritance is
           | implemented by the old "common meta struct as first member"
           | idiom, you have to manually trigger VM collecting in long-
           | running C code (
           | https://github.com/mruby/mruby/blob/master/doc/guides/gc-
           | are... ), getting args in a C function involves a variadic
           | scanf-style function. The most striking difference is
           | documentation. The documentation of the mruby C API is
           | actually "read the headers". There are many seemingly
           | redundant functions that look like they do the same thing,
           | completely without explanatory comments, or minimal
           | inscrutable comments:                   /* mrb_gc_protect()
           | leaves the object in the arena */         MRB_API void
           | mrb_gc_protect(mrb_state *mrb, mrb_value obj);         /*
           | mrb_gc_register() keeps the object from GC. */
           | MRB_API void mrb_gc_register(mrb_state *mrb, mrb_value obj);
           | /* mrb_gc_unregister() removes the object from GC root. */
           | MRB_API void mrb_gc_unregister(mrb_state *mrb, mrb_value
           | obj);
           | 
           | I'd rather work with Ruby as a language than Lua, but I'd
           | much rather work with Lua than Mruby for the documentation
           | and API alone. If mruby had anything close to the Lua
           | reference documentation, I'd be all over it. As-is, embedding
           | mruby kind of sucks, which is a real shame.
        
         | bryanrasmussen wrote:
         | how is Lua quirky? I've looked at it once and I didn't see
         | anything that I thought was weird, although that was on the
         | syntactical level.
        
       | grimgrin wrote:
       | also possibly interesting to some is the cosmopolitan libc
       | inclusion:
       | 
       | https://github.com/mruby/mruby/pull/6681
        
       | sethammons wrote:
       | /me tips fedora: "m'ruby"
       | 
       | I'm sorry, first thing that came to mind.
        
       | riffraff wrote:
       | IIRC MRuby is also used as the implementation for the DragonRuby
       | game engine[0]
       | 
       | [0] https://dragonruby.org/
        
         | weakfish wrote:
         | Wow, that looks cool. I've been wanting an excuse to learn
         | Ruby, this might be it.
        
           | vidarh wrote:
           | It's great, and has a very active and friendly discord.
        
       | Asmod4n wrote:
       | The one thing I like the most about mruby is the way you can ship
       | apps.
       | 
       | When you normally want to ship apps which are written in Java,
       | C#, python etc. you have to tell your users they have to download
       | that runtime and your deps and how to start the runtime and which
       | args to start your app from the command line.
       | 
       | With mruby you can just ship one file and everything is self
       | contained.
        
         | smarx007 wrote:
         | For dotnet, there is a built-in flag "--self-contained".
        
           | vips7L wrote:
           | For Java, there is a built-in command: https://docs.oracle.co
           | m/en/java/javase/17/docs/specs/man/jpa...
        
         | Alifatisk wrote:
         | This feature alone is a reason why I in some occasions use
         | MRuby, when I have a Ruby script I want to share as standalone
         | binary. I sometimes don't even have to rewrite anything, it
         | just works.
        
       | sea-gold wrote:
       | Previous discussions:
       | 
       | April 2012 (55 comments, 174 points):
       | https://news.ycombinator.com/item?id=3866555
        
       | js4ever wrote:
       | Looking for a good tutorial about Visual Basic for Real time
       | rocket guidance, any repo you can recommend?
        
       | aidog wrote:
       | Noteworthy in the MRuby universe, which is all about lightweight
       | Ruby implementations is picoruby. You can get an integrated ruby
       | shell on a Raspberry Pi Pico:
       | 
       | https://www.youtube.com/watch?v=WiJC_v5Lus8 https://picoruby.org/
        
       | moth-fuzz wrote:
       | I love Ruby and have tried to use mruby several times, but the
       | one thing that always becomes an issue is that it uses Ruby's own
       | native-extension build system for compilation, which is
       | configured in Ruby itself. It makes it a total pain to include in
       | other build systems, or when compiling to other targets (i.e.
       | WASM)
       | 
       | Frankly, I love Ruby as a language, but if it were as easy to
       | embed as Lua I would have no reason to use Lua.
        
       ___________________________________________________________________
       (page generated 2025-12-27 23:00 UTC)