Why did you decide "against" using Erlang?

Programming LanguagesFunctional ProgrammingErlang

Programming Languages Problem Overview


Have you actually "tried" (means programmed in, not just read an article on it) Erlang and decided against it for a project? If so, why? Also, if you have opted to go back to your old language, or to use another functional language like F#, Haskell, Clojure, Scala, or something else then this counts too, and state why.

Programming Languages Solutions


Solution 1 - Programming Languages

I returned to Haskell for my personal projects from Erlang for the simple virtue of Haskell's amazing type system. Erlang gives you a ton of tools to handle when things go wrong. Haskell gives you tools to keep you from going wrong in the first place.

When working in a language with a strong type system you are effectively proving free theorems about your code every time you compile.

You also get a bunch of overloading sugar from Haskell's typeclass machinery, but that is largely secondary to me -- even if it does allow me to express a number of abstractions that would be terribly verbose or non-idiomatic and unusable in Erlang (e.g. Haskell's category-extras).

I love Erlang, I love its channels and its effortless scalability. I turn to it when these are the things I need. Haskell isn't a panacea. I give up a better operational understanding of space consumption. I give up the magical one pass garbage collector. I give up OTP patterns and all that effortless scalability.

But its hard for me to give up the security blanket that, as is commonly said, in Haskell, if it typechecks, it is probably correct.

Solution 2 - Programming Languages

We use Haskell, OCaml and (now) F# so for us it has nothing to do with lack of C-like syntax. Rather we skip Erlang because:

  • It's dynamically typed (we're fans of Haskell's type system)
  • Doesn't provide a 'real' string type (I understand why, but it's annoying that this hasn't been corrected at the language level yet)
  • Tends to have poor (incomplete or unmaintained) database drivers
  • It isn't batteries included and doesn't appear to have a community working on correcting this. If it does, it isn't highly visible. Haskell at least has Hackage, and I'd guess that's what has us choosing that language over any other. In Windows environments F# is about to have the ultimate advantage here.

There are probably other reasons I can't think of right now, but these are the major points.

Solution 3 - Programming Languages

The best reason to avoid Erlang is when you cannot commit to the functional way of programming.

I read an anti-Erlang blog rant a few weeks ago, and one of the author's criticisms of Erlang is that he couldn't figure out how to make a function return a different value each time he called it with the same arguments. What he really hadn't figured out is that Erlang is that way on purpose. That's how Erlang manages to run so well on multiple processors without explicit locking. Purely functional programming is side-effect-free programming. You can arm-twist Erlang into working like our ranting blogger wanted, adding side effects, but in doing so you throw away the value Erlang offers.

Pure functional programming is not the only right way to program. Not everything needs to be mathematically rigorous. If you determine your application would be best written in a language that misuses the term "function", better cross Erlang off your list.

Solution 4 - Programming Languages

I have used Erlang in a few project already. I often use it for restful services. Where I don't use it however is for complex front end web applications where tools like Ruby on Rails are far better. But for the powerbroker behind the scenes I know of no better tool than Erlang.

I also use a few applications written in Erlang. I use CouchDB and RabbitMQ a bit and I have set up a few EJabberd servers. These applications are the most powerful, easiest and flexible tools in their field.

Not wanting to use Erlang because it does not use JVM is in my mind pretty silly. JVM is not some magical tool that is the best in doing everything in the world. In my mind the ability to choose from an arsenal of different tools and not being stuck in a single language or framework is what separates experts from code monkeys.

PS: After reading my comment back in context I noticed it looked like I was calling oxbow_lakes a code monkey. I really wasn't and apologize if he took it like that. I was generalizing about types of programmers and I would never call an individual such a negative name based on one comment by him. He is probably a good programmer even though I encourage him to not make the JVM some sort of a deal breaker.

Solution 5 - Programming Languages

Whilst I haven't, others on the internet have, e.g.

> We investigated the relative merits of > C++ and Erlang in the implementation > of a parallel acoustic ray tracing > algorithm for the U.S. Navy. We found > a much smaller learning curve and > better debugging environment for > parallel Erlang than for > pthreads-based C++ programming. Our > C++ implementation outperformed the > Erlang program by at least 12x. > Attempts to use Erlang on the IBM Cell > BE microprocessor were frustrated by > Erlang's memory footprint. (Source)

And something closer to my heart, which I remember reading back in the aftermath of the ICFP contest:

> The coding was very straightforward, > translating pseudocode into C++. I > could have used Java or C#, but I'm at > the point where programming at a high > level in C++ is just as easy, and I > wanted to retain the option of quickly > dropping down into some low-level > bit-twiddling if it came down to it. > Erlang is my other favorite language > for hacking around in, but was worried > about running into some performance > problem that I couldn't extricate > myself from. (Source)

Solution 6 - Programming Languages

For me, the fact that Erlang is dynamically typed is something that makes me wary. Although I do use dynamically typed languages because some of them are just so very problem-oriented (take Python, I solve a lot of problems with it), I wish they were statically typed instead.

That said, I actually intended to give Erlang a try for some time, and I’ve just started downloading the source. So your “question” achieved something after all. ;-)

Solution 7 - Programming Languages

A number of reasons:

  • Because it looks alien from anyone used to the C family of languages

  • Because I wanted to be able to run on the Java Virtual Machine to take advantage of tools I knew and understood (like JConsole) and the years of effort which have gone into JIT and GC.

  • Because I didn't want to have to rewrite all the (Java) libraries I've built up over the years.

  • Because I have no idea about the Erlang "ecosystem" (database access, configuration, build etc).

Basically I am familiar with Java, its platform and ecosystem and I have invested much effort into building stuff which runs on the JVM. It was easier by far to move to scala

Solution 8 - Programming Languages

I know Erlang since university, but have never used it in my own projects so far. Mainly because I'm mostly developing desktop applications, and Erlang is not a good language for making nice GUIs. But I will soon implement a server application, and I will give Erlang a try, because that's what it's good for. But I'm worring that I need more librarys, so maybe I'll try with Java instead.

Solution 9 - Programming Languages

I Decided against using Erlang for my project that was going to be run with a lot of shared data on a single multi-processor system and went with Clojure becuase Clojure really gets shared-memory-concurrency. When I have worked on distributed data storage systems Erlang was a great fit because Erlang really shines at distributed message passing systems. I compare the project to the best feature in the language and choose accordingly

Solution 10 - Programming Languages

Used it for a message gateway for a proprietary, multi-layered, binary protocol. OTP patterns for servers and relationships between services as well as binary pattern matching made the development process very easy. For such a use case I'd probably favor Erlang over other languages again.

Solution 11 - Programming Languages

The JVM is not a tool, it is a platform. Although I am all in favour of choosing the best tool for the job the platform is mostly already determined. Unless I am developing something standalone, from scratch and without the desire to reuse any existing code/library (three aspects that are unlikely in isolation already) I may be free to choose the platform.

I do use multiple tools and languages but I mainly targetg the JVM platform. That precludes Erlang for most if not all of my projects, as interesting as some of it concepts are.

Silvio

Solution 12 - Programming Languages

While I liked many design aspects of the Erlang runtime and the OTP platform, I found it to be a pretty annoying program language to develop in. The commas and periods are totally lame, and often require re-writing the last character of many lines of code just to change one line. Also, some operations that are simple in Ruby or Clojure are tedious in Erlang, for example string handling.

For distributed systems relying on a shared database the Mnesia system is really powerful and probably a good option, but I program in a language to learn and to have fun, and Erlang's annoying factor started to outweigh the fun factor once I had gotten past the basic bank account tutorials and started writing plugins for an XMPP server.

Solution 13 - Programming Languages

I love Erlang from the concurrency standpoint. Erlang really did concurrency right. I didn't end up using erlang primarily because of syntax.

I'm not a functional programmer by trade. I generally use C++, so I'm covet my ability to switch between styles (OOP, imperative, meta, etc). It felt like Erlang was forcing me to worship the sacred cow of immutable-data.

I love it's approach to concurrency, simple, beautiful, scalable, powerful. But the whole time I was programming in Erlang I kept thinking, man I'd much prefer a subset of Java that disallowed data sharing between thread and used Erlangs concurrency model. I though Java would have the best bet of restricting the language the feature set compatible with Erlang's processes and channels.

Just recently I found that the D Programing language offers Erlang style concurrency with familiar c style syntax and multi-paradigm language. I haven't tried anything massively concurrent with D yet, so I can't say if it's a perfect translation.

So professionally I use C++ but do my best to model massively concurrent applications as I would in Erlang. At some point I'd like to give D's concurrency tools a real test drive.

Solution 14 - Programming Languages

I am not going to even look at Erlang.

Two blog posts nailed it for me:

  1. Erlang machinery walks the whole list to figure out whether they have a message to process, and the only way to get message means walking the whole list (I suspect that filtering messages by pid also involves walking the whole message list)

    http://www.lshift.net/blog/2010/02/28/memory-matters-even-in-erlang

  2. There are no miracles, indeed, Erlang does not provide too many services to deal with unavoidable overloads - e.g. it is still left to the application programmer to deal checking for available space in the message queue (supposedly by walking the queue to figure out the current length and I suppose there are no built-in mechanisms to ensure some fairness between senders).

    https://stackoverflow.com/questions/2120771/erlang-how-to-limit-message-queue-or-emulate-it

Both (1) and (2) are way below naive on my book, and I am sure there are more software "gems" of similar nature sitting inside Erlang machinery.

So, no Erlang for me.

It seems that once you have to deal with a large system that requires high performance under overload C++ + Boost is still the only game in town.

I am going to look at D next.

Solution 15 - Programming Languages

I wanted to use Erlang for a project, because of it's amazing scalability with number of CPU'S. (We use other languages and occasionally hit the wall, leaving us with having to tweak the app)

The problem was that we must deliver our application on several platforms: Linux, Solaris and AIX, and unfortunately there is no Erlang install for AIX at the moment.

Being a small operation precludes the effort in porting and maintaining an AIX version of Erlang, and asking our customers to use Linux for part of our application is a no go.

I am still hoping that an AIX Erlang will arrive so we can use it.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionyazz.comView Question on Stackoverflow
Solution 1 - Programming LanguagesEdward KmettView Answer on Stackoverflow
Solution 2 - Programming LanguagesShaunView Answer on Stackoverflow
Solution 3 - Programming LanguagesWarren YoungView Answer on Stackoverflow
Solution 4 - Programming LanguagesJon GretarView Answer on Stackoverflow
Solution 5 - Programming LanguagesWillView Answer on Stackoverflow
Solution 6 - Programming LanguagesKonrad RudolphView Answer on Stackoverflow
Solution 7 - Programming Languagesoxbow_lakesView Answer on Stackoverflow
Solution 8 - Programming LanguagesJonasView Answer on Stackoverflow
Solution 9 - Programming LanguagesArthur UlfeldtView Answer on Stackoverflow
Solution 10 - Programming LanguagesyawnView Answer on Stackoverflow
Solution 11 - Programming LanguagesSilvio BiermanView Answer on Stackoverflow
Solution 12 - Programming LanguagesrosejnView Answer on Stackoverflow
Solution 13 - Programming Languagesdeft_codeView Answer on Stackoverflow
Solution 14 - Programming Languagesuuu777View Answer on Stackoverflow
Solution 15 - Programming LanguagesRogerView Answer on Stackoverflow