

The Power of Lua and Mixins - adnzzzzZ
http://notmagi.me/the-power-of-lua-and-mixins/

======
Udo
I've bee studying Lua very thoroughly recently because I'm working on a toy
language based on its runtime, so I gained a certain appreciation for some of
the concepts Lua uses.

Given this background and my general coding experience up to now, I'm very
skeptical about OO frameworks for Lua, because they mostly provide mechanisms
that are neither true to the language's design nor are they really necessary.
Specifically, mix-in patterns are extremely easy to implement just using core
features already present.

Most languages work best if you don't try to forcefully adapt them to emulate
another language. In my opinion, some of the worst features in both PHP and
JavaScript come from a more or less hidden desire to mimic Java instead of
being confident in the paradigms those languages already provide.

Lua already allows you to share code between "objects", and it allows you to
do that with excellent granularity, simplicity, and a lot of control. There is
no question that Lua is well-suited for modification and can be adapted for
many things, but in this case I'm having trouble seeing the benefit (other
than perhaps a programmer's familiarity with "standard" OO design which can be
a considerable boon in the short term).

~~~
otikik
Hi there,

I am the author of the OOP library mentioned on the article.

> I'm very skeptical about OO frameworks for Lua

Me too :)

I think Lua OOP libraries are great in two particular circumstances: for
people coming from OOP languages, when starting working with Lua, they serve
as a "crutch"; they allow you to start working in a language with paradigms
that you are not familiar with with a set of structures you are familiar with.

Later on, once you are familiar with Lua's metatables, you can do most things
with plain Lua. 90% of the time, it's just enough.

The remaining 10% comes when you need really advanced stuff - for example,
class methods called the same as instance methods in class. Or operator
inheritance. Then using a library like middleclass is worth the increase in
complexity and the extra dependency.

TL;DR: Use middleclass at the beginning, when you are learning, or at the end,
when you need advanced stuff. Don't use it if you just need 1 line of
metatable stuff and you know how to implement it in raw Lua.

~~~
feca
I disagree. Learn the language and discover the new way of doing things it
proposes. The approach Lua takes is very elegant, worth learning.

------
sieisteinmodel
Animated pictures of a Jump'n'Run game make blog posts really hard to read.
Might be related to the way human attention works, but well.

~~~
kzrdude
It's not unrelated, there's a hammer animation after the Hammer class, and
dust after Dust.

~~~
sieisteinmodel
I did not even get to that because I could not concentrate.

------
otikik
Hi there,

Thanks for writing this article.

I believe we spoke about this very subject in reddit not long ago. In that
conversation I mentioned that I'd rather use composition instead of mixins for
most of the examples you made.

Rather than repeating myself, here's the link, in case someone wants to see an
alternative approach:

[http://www.reddit.com/r/gamedev/comments/1uni58/the_power_of...](http://www.reddit.com/r/gamedev/comments/1uni58/the_power_of_lua_and_mixins/)

------
veb
Wait. Just having a glance at the website, and I see these animations - do
they have anything to do with the code? It doesn't quite clearly state that
and I'm kind of put off reading the code. :-/ Sorry if I've missed something.

~~~
mantrax4
Lua's most popular use is for scripting game engines. From simple side
scrollers to powerful FPS 3D engines.

So it's basically like "a taste of the world of Lua" or something like this,
to make the presentation less dry.

------
kephra
It would be better if this article had been using real Lua code, and not
starting with a "class" function. Lua does !NOT! have classes. Lua is a
prototyping language, and anybody can handwave an own class system, or go
without classes at all. The idea of mixins makes only sense in languages that
have classes. Lua does not. References have a metatable, and this metatable
contains functions. The functions are independent of the reference, and there
are no classes. So basically all functions in a metatable are mixins by
default.

~~~
kzrdude
This is a boring view! All the same concepts of classes, interfaces, objects
still exist when using Lua, you just don't have a canonical implementation.
This is also interesting in itself -- the best class system may spread and be
improved.

------
yp_master

      1 notmagi.me:
      55 bytes, 1+1+0+1 records, response, authoritative, noerror
      query: 1 notmagi.me
      answer: notmagi.me 1800 A 207.97.227.245
      additional: . 32768 weird class
    

Nice.

------
AdrianRossouw
i do love lua, although the most I've really gotten to play with it was
programming drones (called turtles) in the computercraft mod for minecraft.

------
kaonashi
I've always found mixins in other languages to be absolutely horrible in terms
of maintainability. They often lead to all sorts of sins and junk-drawer
design. I'd prefer to see something like a clojure-ish protocol library.

