Why wouldn't Erlang be the next C++? Erlang's fast, compiled, but still flexible and dynamically, strongly typed. It has a type inference engine so you can look over your code, and it's fairly easy to do IDE integration with Erlang.
Erlang's distribution and multi-threading primitives are unbelievably well tested, and everyone could learn a thing or two from the OTP model.
I can't imagine why we'd ever consider Scala over Erlang.
I think you missed the point of the comparison. One of the reasons C++ took off was that it was deliberately compatible with C (the dominant language at the time), so you didn't have to discard your existing C code and could ramp up from your existing skills. Likewise, today the dominant language is Java, and Scala compiles down to Java bytecode and allows you to continue to use your existing Java libraries. To my knowledge Erlang doesn't have these capabilities.
Erlang can integrate with anything out there, because it deliberately discourages binary inclusion. Instead you make remote "ports" that act like servers or vendors of results.
It's a very weird approach, but it's surprisingly effective.
Well can you give more info about these ports? Sounds like you want to do interprocess communication of some kind with the JVM?
1. How exactly would you setup the JVM? Will you need to wrap every Java class you want to use with some kind of communication mechanism? What about callbacks?
2. Can you subclass a Java class?
3. What is the overhead of calling Java methods from Erlang?
4. Has anyone demonstrated a bridge to a non-trivial Java library using a language not running on the JVM?
I feel interprocess communication might be ok for some apps but not all apps.
1. Yes, you write a communication mechanism. You can either use an existing one (like Thrift) or use the Erlang binary protocol. Erlang expects you to be acting like an erlang message-based process, like an actor.
2. No. Erlang is not an OO langauge, although its concurrency model is the actor concurrency model, which sometimes feels like Smalltalk's object model.
3. The cost of communication. Having implemented a few systems that do this, I've found it to be fairly small, even using a slow glue layer like ruby. See https://github.com/KirinDave/fuzed/tree ... Powerset uses almost exactly this codebase to manage query analysis on its frontend before dispatching to our results retrieval layer. Thus far, it's been one of the most flexible and robust parts of our architecture.
I felt this way too, and it is the case in some very specific scenarios. But the truth of the matter is that Java itself is often the wrong tool in these cases, so it's somewhat of a red herring to say that.
Good comment. We can't only look at the merits of the language itself, but also see wider context and circumstances in the software world. Thus my answer to the original question is: No, it isn't.
Scala's concurrency model is based on Erlang actually, although the Scala actors are not OS independent like Erlang, but the message passing mechanism and the concept of light weight processes independent of each other exchanging messages( no shared states ) is common to both.
Scala runs on the JVM so its much easier to integrate it with huge java projects, and its performance is comparable with Java, and its being promoted in a big way by many of the big names in the industry.
I see scala being widely accepted, whatever little I've used of it, I really love!
Scala's actor library emulates a subset of Erlang's message passing capabilities, but it's far from what Erlang has to offer. Scala's actors are not distributed, they don't have their own heaps (Erlang processes do, to minimize garbage collection sweeps for soft real-time performance), they aren't preemptively scheduled by the VM (the only preemptive scheduling is done by heavy native threads), and they don't have "shared nothing" sematics because Scala lets you send pointers mutable objects between processes. Furthermore, Scala doesn't have hot code swapping or Mnesia, both of which are essential for building scalable fault tolerant systems in Erlang.
You can call Java (or Python, Ruby, C etc) libraries from Erlang if you really have to. I'd bet Erlang's libraries would be quite sufficient for a wide range of apps, though.
Where did you run into pain trying to use Erlang outside of telcom apps? Just curious...
As it's creator said, the main purpose of Erlang is not to be fast, it is to be reliable. Sure, you can throw a lot of processors at it, but at the moment we are still not there (I just bought myself a QuadCore, not a QuazillionCore), and other languages might be able to benefit from more cores, too (once they arrive).
You are totally right, scaling linearly is just a side effect of the shared nothing concurrency- and reliability-based programming model but it's quite a feature anyway!
I took a look at Scala about six months ago. It's quite a nice, full-featured language, and is a real contender for anyone forced to deploy to the JVM. However, it has a lot, and I do mean a whole hell of a lot of growing up to do before I'd actually use it for anything.
Its support for editors and tools was pretty horrible. The Eclipse plugin outright sucked (bundled compiler lagging behind the language release, syntax highlighting which came and went unpredictably, weird compilation errors which didn't matter --- and when I submitted a bug report ticket, the Scala team took four months to respond). I tried the Emacs mode, but it had such flaky indentation that I didn't know what it was doing half the time. If I absolutely had to use Scala, I'm sure I'd fix the Emacs mode, but it just wasn't worthwhile back then.
In addition, the language changes rapidly in ways which break existing code (I ran into an incompatible change in the Actors library, but don't remember the details any more). Granted, that's actually a good thing, because it means that the developers do not want to be stuck with bad design decisions from the past, but I'd like to be able to write production code, too. Since it seems that Scala's authors use it as a testbed for their research in languages, I have my doubts that it'll stabilize quite enough. (Counterarguments welcome!)
it's definitely not bad. whether or not a language has first-class functions is a major point for me, and Scala has strong support for functional programming and even has some specialized sugar for it
the only thing i don't like about it is the type/object stuff, which always feels unnecessary
If C++ had just abandoned it’s C legacy, it would have been a much nicer language.
A much nicer language no one would have used. It is Stroustrup's opinion that if C++ had not been backwards-compatiable with C, it never would have become popular. I agree.
I also have difficulty with calling C++ a "failure."
Yep... c++ is a great language. Doesn't force one paradigm onto the programmer. Fast, portable and very efficient too. I heard the new F-35 jet fighter is using c++ over ada.
Erlang's distribution and multi-threading primitives are unbelievably well tested, and everyone could learn a thing or two from the OTP model.
I can't imagine why we'd ever consider Scala over Erlang.