Richard Bucker

Lua is good enough development at it's worst

Posted at — Mar 8, 2012

I’m trying to rewrite my Asterisk CDR capture program from PHP to just about anything else. I inherited the PHP version of the program from a programmer who did not know anything about concurrency or performance. Inside the Asterisk configuration there is a file “extensions_custom.conf”.  This file contains all of the scripts for the individual PBX extensions. And when the call is completed the last thing the script does is capture the CDR.The first thing that you might say is that I should use the built-in CDR recording. I would except for two important reasons.  My extension file contains many customizations so I need the CDR to reflect that information accurately. The second is that the built-in capture does not really address concurrency from the reporting/admin side of the equation. Regardless of the database or storage that info needs to be taken off-box so that it can be reported on… think map/reduce.Back to the PHP code I have the following challenges: (a) it’s PHP and the interpreter needs to be loaded with each call completion. (b) the output is a textfile in a log directory. The file is a standard unix file with no concurrency mechanisms or file lock detection and avoidance. Needless to say the PHP version must go.My first replacement was going to be built with golang. I wrote a separate article on that experience. In summary 3rd party libs FAIL.My second choice was Lua. For one reason the redis team was using it for it’s scripting and so I wanted to learn it. The work was not hard but the documentation was not written like any language manual I had ever read previously. The best and worst part seems to be that the built-in functions are strictly limited. The idea being that 3rd parties would deliver the missing pieces.At one time or another that was probably true, however, while trying to get the missing bits to work I found that the LuaForge project is practically dead. The individual projects are starting to scatter to the 4 corners.As a side note it seems that a great many developers are still using Lua 5.1 even though Lua 5.2 has been available for about a month. The common response has been that not much had changed to warrant the change; although there were some compatibility issues.In the end I simply do not understand the Lua ecosystem and since this is not that critical because I can code this project in C directly. I wanted to give Lua a fair chance after all the previous comments I’ve made. Basically Lua is still crap.