News for hackers. Stuff that matters.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rbranson on Wednesday October 13, 2010 @01:07AM (#1786161)
Let's remember that Node.js is more about predictability, scalability, and (most of all) simplicity of development, than performance. Lua(JIT) is indeed impressive, but having to learn another programming language is a huge downside.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by KirinDave on Wednesday October 13, 2010 @03:06AM (#1786379)
Attitudes like yours make me sad, on many levels.

It also makes me mad, because by every metric save the what-you-already-know, Lua is at least comparable, if not outright superior.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by ay on Wednesday October 13, 2010 @07:50AM (#1786794)
Strings operations is a tricky part though.

It's easy to slow the code down with "obvious" coding - which is a bad thing in a language.

Some other operations like metatable lookup might not be always the fastest.

But overall the convenience of having a 700K source tarball that compiles on any ANSI C into a modern language blows all these concerns away for my use. And the performance-critical parts can be easily pushed down to C. If they are not premature optimizations to begin with.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @08:40AM (#1786877)
How are string ops tricky in Lua? Patterns and table.concat can get a lot done, and when you need more power, there's LPEG (which is also quite speedy).
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by ay on Wednesday October 13, 2010 @09:39AM (#1787017)
"Patterns and table.concat can get a lot done" - sure. but it is may feel somewhat backasswards :-)

$ time lua -e 's="";for i=1,100000 do s=s.."-";end'

real 0m1.292s user 0m1.029s sys 0m0.108s

$ time lua -e 't={};for i=1,100000 do table.insert(t,"-");end; s=table.concat(t,"")'

real 0m0.284s user 0m0.062s sys 0m0.077s

times are somewhat bogus since it is cygwin under win7, but they give the impression of what I am talking about.

I do not argue it is a feature very coherent with the design of the language, and the immutable strings have other good properties. But if you do intensive string ops you need to watch out not to fall into the trap of treating the strings as mutable objects.

Don't get me wrong - I like Lua a lot and use it almost on a daily basis. Just that I think the posts like this may attract some new folks to try Lua out - and they deserve to know the obvious ways they can shoot themselves in the foot in order to avoid some disappointment.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @09:52AM (#1787052)
Context: Since Lua strings are immutable (and interned, like Erlang atoms, Lisp symbols, etc.), tables can be used as string buffers, and concatenation to large strings can be done in one step via table.concat. Appending to a string in a loop is slow, but that's true of any language with immutable strings.

$ time lua -e 't={};for i=1,100000 do table.insert(t,"-");end; s=table.concat(t,"")'

    0m0.05s real     0m0.05s user     0m0.01s system
    0m0.05s real     0m0.05s user     0m0.00s system
    0m0.05s real     0m0.04s user     0m0.02s system
(Times on OpenBSD/amd64 4.7, Lua 5.1.4.)

table.insert checks the table's length on each iteration, which dominates the string-handling time - len is O(lg n). If you just use the loop index (or otherwise cache it), it cuts the time in half:

$ time lua -e 't={};for i=1,100000 do t[i] = "-"; end; s=table.concat(t,"")'

    0m0.02s real     0m0.02s user     0m0.00s system
    0m0.02s real     0m0.02s user     0m0.01s system
    0m0.02s real     0m0.03s user     0m0.00s system
Changing to i=1,1000000 gave me an avg. of 0.54s and 0.22s respectively. LuaJIT is probably also considerably better. (You could also just do t = string.rep('-', 100000), but that's not the point of your benchmark.)
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by maushu on Wednesday October 13, 2010 @06:59AM (#1786727)
There is also the code reuse factor. Why learn/use yet other language if you can use javascript for both server and client?
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by gurraman on Wednesday October 13, 2010 @07:12AM (#1786748)
Better yet, let's go back to using ALGOL or something. Imagine how many reusable components we could have mustered up. We'd best stop all this innovation right now before it's too late.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by maushu on Wednesday October 13, 2010 @03:05PM (#1788426)
Hmm, browsers don't use ALGOL though, better stay with JavaScript.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by gurraman on Wednesday October 13, 2010 @09:26PM (#1789511)
Yes, but if the old geeks had been arguing like you did, the browsers would probably only support whatever language was popular on the server-side at that time.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by jpiet on Wednesday October 13, 2010 @07:09AM (#1786739)
problem is: you cannot use it for both server and client. if this were true you would've been right. with node.js you still need to be aware if you're coding client or serverside for some constructs.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by jrockway on Wednesday October 13, 2010 @09:11AM (#1786947)
Not really a problem; clients and servers always use different APIs in other languages. JavaScript is no difference.

The advantage is that you get to use the same tools for client-side development and server-side development. Testing tools, interactive development tools, editor tools, etc. When you don't have to build your toolchain twice, you can make your toolchain twice as good.

In theory. Javascript needs namespaces and modules before it will be useful for real work.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rbranson on Wednesday October 13, 2010 @09:13AM (#1786952)
Without getting into a huge my language vs your language debate: I agree that this isn't the RIGHT attitude, but it's not about me learning Lua per say, it's a reality of writing code in the real world for real projects.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by KirinDave on Wednesday October 13, 2010 @11:33AM (#1787461)
> I agree that this isn't the RIGHT attitude, but it's not about me learning Lua per say, it's a reality of writing code in the real world for real projects.

Lots of people write robust, real world code in languages they are only casually familiar with. That is how you learn a language well.

The other reality you're facing here is your career. While it is gradually slowing, our field moves quickly. You need to be constantly studying and reading and learning to be any good at it at all. The reality is: grow and keep up or stop and be left behind.

To me, a new language is an opportunity. “What insights do these people have?” “What new design patterns will I learn?” “What can I take from this to my daily coding jobs?” They excite me.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rbranson on Wednesday October 13, 2010 @01:01PM (#1787862)
Again, I agree with you on all points. I can't count on my hands the number of languages I've tried out and written a decent bit of code in, learning things along the way. However, that doesn't translate into "I should use this platform for a business-critical application."
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by KirinDave on Wednesday October 13, 2010 @02:04PM (#1788184)
Seems strange to decide on node.js if that's the problem. Node.js is by far less proven than Lua.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @03:50PM (#1788601)
No kidding. Lua has been used in production in industry for over 15 years.

http://www.lua.org/history.html

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by Tichy on Wednesday October 13, 2010 @03:56AM (#1786470)
Is there a framework for writing asynchronous servers with Lua?
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @08:12AM (#1786836)
Working on it. Libev-based. It's a spare-time project of mine. I have the "portable but not particularly scalable" pure Lua and luasocket backend done (for easy development + light deployment on Windows), working on the error handling in the libev backend now.

Much of the complexity comes from error handling, not just the async IO. Erlang gets that right, too. I don't know how much error handling node.js does. (I plan on checking it out eventually, since my framework will be compared to it.)

I don't have a time frame yet. I'm also working on a compiler and a bunch of other stuff, and I'm really not a web developer, so it's been a fairly low priority.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by moonpolysoft on Wednesday October 13, 2010 @04:15AM (#1786501)
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @08:38AM (#1786871)
I don't think that's what Tichy meant. That's just a wrapper library to make error handling easier in a coroutine-based event loop.

If you're not worried about being "web scale", it's not hard to write an async socket server using luasocket's sockets for nonblocking TCP IO and luasocket.select for scanning for active connections. It gets bogged down once you have > 100 or so idle connections (the usual trade-offs with select apply), but it's easy to write, very portable, and (on x86) LuaJIT is amazingly fast. Contact me if you want example code.

I've been working on an actual framework for async servers (libev-based), but haven't had much free time lately.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by nwmcsween on Wednesday October 13, 2010 @01:17AM (#1786176)
You never really learn a new language in the case of syntax that's all peanuts. Javascript and Lua are both prototype based languages and such trivial differences exist that can be ironed out over a week of productive use.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by pygy_ on Wednesday October 13, 2010 @02:15AM (#1786280)
In my case, it was a couple of days. I read the free online version of the Programming in Lua[1] book and was basically set.

Lua feels like a simpler, cleaner Javascript.

--

You have lexical scope, anonymous and first class functions, and dynamic typing.

The parser is as simple as possible (LL(1), ie top down, without backtracking), and doesn't do any magic like declaration hoisting or semi-column insertion.

The only falsy objects are `false` and `nil`. `==` doesn't do any type conversion.

The addition `+` and concatenation `..` operators are different.

Some infix operators do automatic type conversion ( +, -, *, /, %, ..) between strings and numbers, but that's about it for weak typing. There's no octal to decimal conversion for strings with prepended zeros.

There's only one way to define objects. The `self` parameter is explicit for methods, but there's syntactic sugar to pass it automatically.

Scoping is similar: variables are global by default, which allows precise scoping for closures.

--

== Where the languages diverge:

You can do some magic with metatables and environments, but once again, the mental model is extremely simple.

The other major differences are coroutines (cooperative threads) and a "generic" `for` loop that allows to build custom idiomatic iterators.

At last, the array indexing starts at 1. This may sound like heresy to devout Dijkstra followers, but it's really not a big deal in practice.

--

[1]: http://www.lua.org/pil/ by Roberto Ierusalimschy, one of the author of the language.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by notthinking on Wednesday October 13, 2010 @05:45AM (#1786642)
I think the most compelling thing about Lua (to someone with no Lua experience), is that its appears (from examples, and what people have said) that its good for embedding inside another program (size wise and good FFI).

In a video I saw, by one of the designers of the languages stated that this was the original purpose (engineers using this instead of C, with the low level details done by programming team in C).

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by pygy_ on Wednesday October 13, 2010 @07:11AM (#1786743)
Indeed, C(++) interop is easy. The API is also described in the PiL Book linked above.

Furthermore, the VM binary weights 200k. It is extremely portable (it uses the common subset of C89 and C++), and its code is a pleasure to hack.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by notthinking on Wednesday October 13, 2010 @07:56AM (#1786805)
Just had a quick skim over some of that chapter, and it is very compelling, especially when I see how well its worked for AwesomeWM (my desktop environment of choice) and how many commercial games are using it for user scripting [1].

[1] http://en.wikipedia.org/wiki/Category:Lua-scripted_video_gam...

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by mhansen on Wednesday October 13, 2010 @04:31AM (#1786534)
Wow - thanks for this summary. I hadn't heard a rundown like this before. That sounds great - I might give Lua a go!
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by mhd on Wednesday October 13, 2010 @09:49AM (#1787045)
A lot of that is true if you compare it against Erlang, which has a much different approach to concurrency – and has a steeper learning curve for a Python/Ruby+JavaScript web developer.

Learning Lua on the other hand? If that's not utterly trivial, I'd be worried.

The biggest downside Lua always had was that it's deeply rooted in the embedded category, where it's hard to come out from. Tcl is one the market for ages and still doesn't have a proper culture of libraries. At least Lua has its "rocks", maybe that will make it a worthwhile candidate for the non-embedded sector, too. It's a much nicer language than most of its rivals.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @10:13AM (#1787124)
Lua developed a "culture of libraries" recently, and is catching up. Another part of the problem was that it didn't really have a proper module system until a couple years ago (partially due to the focus on embedding).

Besides LuaRocks, there's a collection on the Lua wiki (http://lua-users.org/wiki/LibrariesAndBindings), and the mailing list (http://www.lua.org/lua-l.html) is very active.

And yeah - if you know Javascript, you won't have trouble learning Lua. It's like Javascript with less gotchas and better performance.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by KevinMS on Wednesday October 13, 2010 @02:57AM (#1786360)
but having to learn another programming language is a huge downside

Not if you can also use it to write World Of Warcraft addons :)

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by cheald on Wednesday October 13, 2010 @06:48AM (#1786714)
Indeed. I learned it doing that, and have come to appreciate what a marvelous little language it is. Always a pleasure to work with.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by Tichy on Wednesday October 13, 2010 @03:57AM (#1786473)
Got a link? I wasn't aware that it is possible for common people to write WoW addons?
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by scalyweb on Wednesday October 13, 2010 @04:13AM (#1786498)
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by moonpolysoft on Wednesday October 13, 2010 @02:51AM (#1786346)
Scalability, eh? What about that whole "scale beyond a single CPU" thing. I hear it's quite the rage.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by pjscott on Wednesday October 13, 2010 @03:13AM (#1786395)
If node can scale beyond a single machine, then it can scale beyond a single CPU on a machine. I know I'm oversimplifying, but you're oversimplifying more.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rubyrescue on Wednesday October 13, 2010 @09:17AM (#1786961)
There's nothing in node that provides mechanisms for cross process scalability. Compared to Erlang, for instance, which provides mechanisms for message passing and scaling past one node, and even one node can efficiently use multiple cores. Node is quite fast but not scalable in that sense.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by moonpolysoft on Wednesday October 13, 2010 @03:34AM (#1786434)
So last time I looked at it, Node.js did not have any language level or even library primitives for message passing. At least nothing beyond making you open a socket and work out your own protocol for IPC. I'll grant you that is the standard scalability story for most languages running on multiple hosts. However it seems deficient if one's goal is to make use of most of the cores on modern server hardware.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by pjscott on Wednesday October 13, 2010 @02:31PM (#1788277)
That's a really good point. What sort of message passing support would you like to see in node? I have some free time.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by silentbicycle on Wednesday October 13, 2010 @03:56PM (#1788623)
Being able to stream arbitrary data as JSON already get you a lot of flexibility. Can you stream Javascript functions, though? (You can in Lua, but doing so w/ closures is tricky.)
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rbranson on Wednesday October 13, 2010 @09:18AM (#1786965)
Translation: per-client, it uses very little resources, and V8 garbage collection is a good fit for the type of services Node.js targets. It's mostly about memory.

... and yes, as others have pointed out, Node.js supports process forking, which is arguably the better model for CPU scaling in these types of services.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by a2800276 on Wednesday October 13, 2010 @03:12AM (#1786391)
What about that whole "fork" thing. I hear it's quite the rage
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by KirinDave on Wednesday October 13, 2010 @02:48PM (#1788340)
Your OS's copy-on-write page policy loves when you fork things using mark-and-sweep garbage collection. It is full of rage.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by moonpolysoft on Wednesday October 13, 2010 @03:28AM (#1786423)
Last time I checked Node.js was not able to invoke fork.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by simonw on Wednesday October 13, 2010 @04:29AM (#1786530)
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by mmaunder on Wednesday October 13, 2010 @05:45AM (#1786641)
This comment was ranked 0 when I found it. It's exactly right. Startups are risky enough without having to hire a team of Lua developers. An async server that supports a mainstream language is awesome. Lua? No.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by ay on Wednesday October 13, 2010 @07:34AM (#1786771)
In this case, you would be looking at PHP and Java, not node.js.

Last time I checked node.js and libraries for it (about a couple of months ago), I could not run the library I wanted on the latest version of the node.js because the API has completely changed.

Platform software that completely changes itself over a course of a couple of months ? Thanks but no thanks.

Disclaimer: It's been couple of months. Maybe the things have changed since then, will be grateful for an educational reply from someone who has used node.js, about its maintainability, especially for the use with third party libs.

Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by felixge on Wednesday October 13, 2010 @09:09AM (#1786941)
Node's API was frozen with the 0.2.0 release (for most parts). Things were indeed very rocky before, but most libraries have been updated now and are unlikely to break again soon.
Re:Node.js Versus LUA "Hello World" HTTP Server Showdown by rbranson on Wednesday October 13, 2010 @09:26AM (#1786989)
It looks like the zealots got to you. I agree partially with what you're saying. Node.js is still a somewhat immature platform, but people are generally building small, single-purpose servers with it, not replacing their entire infrastructure. I don't think anyone is advocating that.