"Any sufficiently complicated concurrent program in another language contains an ad hoc informally-specified bug-ridden slow implementation of half of Erlang."
That's the interesting thing isn't it. With the Scala platform around people have very little incentive to go in and make the improvements to Erlang that would help it to become more mainstream. Particularly on the web.
For instance, what follows is the code to the Scala address book example:
object addressbook {
case class Person(name: String, age: Int)
/** An AddressBook takes a variable number of arguments
* which are accessed as a Sequence
*/
class AddressBook(a: Person*) {
private val people: List[Person] = a.toList
/** Serialize to XHTML. Scala supports XML literals
* which may contain Scala expressions between braces,
* which are replaced by their evaluation
*/
def toXHTML =
<table cellpadding="2" cellspacing="0">
<tr>
<th>Last Name</th>
<th>First Name</th>
</tr>
{ for (val p <- people) yield
<tr>
<td> { p.name } </td>
<td> { p.age.toString() } </td>
</tr>
}
</table>;
}
/** We introduce CSS using raw strings (between triple
* quotes). Raw strings may contain newlines and special
* characters (like \) are not interpreted.
*/
val header =
<head>
<title>
{ "My Address Book" }
</title>
<style type="text/css"> {
"""table { border-right: 1px solid #cccccc; }
th { background-color: #cccccc; }
td { border-left: 1px solid #acacac; }
td { border-bottom: 1px solid #acacac;"""}
</style>
</head>;
val people = new AddressBook(
Person("Tom", 20),
Person("Bob", 22),
Person("James", 19));
val page =
<html>
{ header }
<body>
{ people.toXHTML }
</body>
</html>;
def main(args: Array[String]) {
println(page)
}
}
This is so much less scary to people than the Erlang equivalent. EQUALLY complicated, just less scary! So if there are kids out there looking at implementing something new really fast, they will be drawn to Scala.
Remember PERL, it was lightning fast . . . and really scary. Java was less scary. PHP was friendlier still. And, I suspect, the frameworks built using Scala will be downright promiscuous.
It's too bad, I'm an old fart, 36, but I like Erlang.
Maybe the kids will let their religion get the best of them. They are really anti-Java, and Scala is built on Java.
In any case, when evaluating Erlang, I found the immutable variables to be rather unpractical. I can see why they might help to avoid errors with multi threading, but I don't see a reason to be excited about it? At the end of the day, it is another limitation of the language. With Java, that is what people complain about, the constraints, why wish for it in other languages?
If you think that immutable variables reduce programming errors, you are free to just not change your variables anyway, I guess. No language constraint required.
As paulgb said, Lisp is not purely functional, unlike Erlang or Haskell.
And actually, you could ignore functional programming and write code in an imperative style in Lisp (though it's not recommended, since you'd be missing out on the benefits of using Lisp).
It's sad. After coding in Haskell and Erlang I moved back to Python for a project and my code was just littered with extra variables. I had become so used to the functional way that varying variables just seemed so wrong and foreign.