OOP experience in Ruby is very pleasant and I wish the language was used more.
OOP experience in Ruby is very pleasant and I wish the language was used more.
Lua is simpler, is much, much easier to embed into your project and is much faster, especially with LuaJIT. It is the perfect fit for this task
Too much OO can hurt performance quite badly and while some form of OO is common in the game industry there is also more emphasis on keeping things simple. Ruby is a very nice language and not a bad choice for non-performance critical code but Lua is the default choice for game scripting for a reason.
And for the cases there Lua is too simple, well there is Python. Sure Ruby does a few things better but it doesn't really have a clear advantage over Python while also being less popular.
1. mRuby is trivial to embed.
2. S7 Scheme is also trivial to embed.
3. LuaJIT will not work on consoles (proprietary CPU architectures), and JIT isn’t supported on iOS or Android. You have to use vanilla Lua.
4. Lua has historically been the default because it was first to provide a nice embed story.
5. Lua as a language leaves a lot to be desired (Ron Gilbert really disliked using it within his games)
6. This gist post goes into details wrt the deficiencies of Lua [1]
7. Here are two GH repos with Roguelike Tutorial. One in Lua [2], the other in mRuby [3]. It’s worth comparing and contrasting.
8. If I want extremely performant code, then I drop down to C. For scripting level/game code. mRuby is plenty fast [4].
[1] https://gist.github.com/amirrajan/2c42315ffef311600ecb2d8dcf...
[2] https://github.com/Lycea/Rogue/tree/master/components
[3] https://github.com/kfischer-okarin/roguelike-tutorial-2021/t...
1. Its performance meant that it would never survive against Java/C# for AA/AAA games, not to speak of C++
2. Lack of libraries. Last time I tried no physics engine worked with Ruby 2.3, and ouch that made my game or many games impossible
3. No significant advantage over Python, especially given that for indie games Python had the popularity advantage, the numpy/numba/Pillow/easier to write high performance code advantage. Bitmap manipulation in Python using even numpy is much easier than whatever I can do in Ruby.
4. OOP is not actually that important especially for the market Ruby can break into. DragonRuby is in the right step, but look at pico8, love2d, or even Unity3D -- there is not a lot of inheritance going on. Simplicity is good.
Of course the above factors play into each other.
I'm sure a lot of people will say it's too slow, etc. but the truth is that great games come from a very wide range of tools and if Ruby fits your needs then you should use it.
As an aside I've been thinking lately that OOP isn't very well defined unlike FP. I think that's why there is a disagreement on what is OOP. Many think it's about inheritance because of Java while Alan Kay says it's about message passing as in Smalltalk. Whereas functional programming is just programming using pure functions. That simple, no confusion.
at[at]amirrajan[dot]net
That’s why I specifically said “with a stop-the-world GC”