Posted by
timothy
on from the official-language-of-the-federation dept.
mvw writes "Wanna go beyond Java, Perl, or Python? Joe Armstrong has published a nice tutorial on implementing robust servers in the functional concurrent
Erlang language.
Here is the
link."
19 comments
Why Erlang?
by
StressedEd
·
· Score: 2, Insightful
Does anyone have a (one line) compelling reason why Erlang is preferable to (say Perl, Java or even good ol' C(*))?
Cynically I look at this and think "great, another programming language that allows me to print "hello world" in a more obtuse manner".
I'm quite happy to be put straight on this, from any hardend Erlang users.
(*) Ok, ignoring the point of buffer overflows, etc.
-- Be nice to people on the way up. You will meet them again on your way down!
Re:Why Erlang?
by
Anonymous Coward
·
· Score: 2, Informative
Erlang has great concurrency. It can handle thousands of multiple processes
Well, besides the obvious concurrency advantage (need 200000 processes? no problem!), there's things like hot swapping of code, behaviors for common design patterns (servers, event handling, supervisors), bundled database written in Erlang, and other things like that.
Writing a robust program in Erlang is extremely simple by using supervisors and following design principles like these. For example, my Erlang IRC bot is near impossible to completely crash. If the server connection dies, there's a supervisor that'll keep trying to get it back up; All the while the other processes of the bot have no idea there's no connection -- they don't need to know. If I've written a faulty module and the code misbehaves, only that single process is affected. If possible, a process that has crashed will be automatically restarted and operations resume as if nothing had happened.
Hot-swapping of code allows me to debug the bot without restarting it. If I discover a bug in the irc parsing routines, I simply fix it in the code, recompile, and reload the offending module -- while the bot is running. The new code replaces the old, and it just works.
There's plenty more, but I would suggest checking Erlang's website and reading the FAQ and examples. Oh, and here's a nifty benchmark:)
Hmmm.. I like the idea behind the "supervision tree". Why is that not possible to implement in other languages?
It may or may not be possible to implement, but chances are something like it isn't distributed with the language. The supervisor structure distributed with Erlang is well-tested, robust, and quite usable.
Is that similar to the implementation of concurrency in Ada?
I'm not familiar with concurrency in Ada. In Erlang, processes are extremely lightweight and communicate via message passing. The processes themselves are done in the runtime, so there are no limits imposed by the OS (besides system resources, of course). With a shared heap, even the memory requirements are extremely low (compared to Java or C, for instance).
Re:Why Erlang?
by
Anonymous Coward
·
· Score: 1, Informative
In one line - easy Because the code is shorter, clearer and more beautiful - because segmentation violations cannot happen - because buffer overflows cannot happen - because processes in Erlang are much lighter weight than in Java/C/... - because you will have finished the Erlang program before you have even started wondering how to do it in C...
Is that similar to the implementation of concurrency in Ada?
I'm not familiar with concurrency in Ada. In Erlang, processes are extremely lightweight and communicate via message passing. The processes themselves are done in the runtime, so there are no limits imposed by the OS (besides system resources, of course). With a shared heap, even the memory requirements are extremely low (compared to Java or C, for instance).
As an Ada programmer I can tell you that it depends on your compiler. The Ada compiler I use GNAT uses the OS resources to map Ada tasks to threads so they are as light as system threads. The Rational Ada 83 compiler had its own thread library I believe (I don't care to go looking for it). I'm too lazy to check right now but I believe the Ada RM leaves it open to the implementation as to whether Ada tasks reflect OS based entities or not.
Wow , you can reload modules while a program is *running*?! Man , why can't you do that in other programming languages... oh wait , you can , they're called.dll's in windows and shared objects (.so) in unix and you can write them in whatever language you like (usually C/C++). BFD.
I'll admit, I don't know much about the details of shared library loading and reloading; That said, I doubt it's anywhere near as effective as Erlang's hot-swapping of running code.
For one, Erlang handles code replacement in the runtime -- no dependence on the underlying OS implementation. What happens when you try to reload a shared library with the same symbols? What if module A is in the middle of module B's routines, while you reload B's shared library? What if you just changed a data structure in a few modules and need a system-wide reload? I sure wouldn't want to have to handle synchronising that in C or C++.
The mechanisms to handle these situations are already present in Erlang; There's no need to reinvent the wheel here.
You can do anything you like with a language thats interpreted. You'd probably find that if Erlang was compiled (fully compiled, not just to run on a VM) those facilities would disappear because then the program would have to rely on the underlying OS just like any other binary.
It's really not a question of COULD be done. It COULD be done in many languages.
The point is it HAS been done in Erlang as a standard part of the language.
WTF is Erlang?
by
Anonymous Coward
·
· Score: 3, Informative
The FAQ says:
Erlang is a general-purpose programming language and runtime environment. Erlang has built-in support for concurrency, distribution and fault tolerance. Erlang is used in several large telecommunication systems from Ericsson.
Re:WTF is Erlang?
by
foote
·
· Score: 2, Informative
Erlang is a dynamically typed concurrent functional programming language for large industrial real-time systems. Features of Erlang include...
Erlang pong
by
Anonymous Coward
·
· Score: 2, Informative
As part of a class assignment I once had to create a distributed pong game in Erlang. I like the language and I think it will be appropriate for what they are talking about.
Cynically I look at this and think "great, another programming language that allows me to print "hello world" in a more obtuse manner".
I'm quite happy to be put straight on this, from any hardend Erlang users.
(*) Ok, ignoring the point of buffer overflows, etc.
Be nice to people on the way up. You will meet them again on your way down!
Erlang is a general-purpose programming language and runtime environment. Erlang has built-in support for concurrency, distribution and fault tolerance. Erlang is used in several large telecommunication systems from Ericsson.
although i have just learned about erlang. i went to the trusty computer language shootout, and behold, it covered erlang!
:-)
http://www.bagley.org/~doug/shootout/lang/erlang/
This doesnt mean much as far more qualitative arguments exist. You can also browse over the code.
-- -- --
Help my mini cause: My journal
As part of a class assignment I once had to create a distributed pong game in Erlang. I like the language and I think it will be appropriate for what they are talking about.
http://www.sics.se/~joe/tutorials/robust_server/ro bust_server.html.
Regards,
Marc