erlang
praise
- Things that work, work forever: designed systems can be robust
- Dependable, steady progress in core platform
- Tools / libraries improving exponentially (rebar, mochiweb, lager, lhttp, etc.)
complaints
- Unfriendly error messages; difficult to track down bugs (particularly nasty in a user-facing system)
- Code is not DRY; typical gen_*:
export(function/arity). function(...) -> dot_dot_dot. handle_cast(..., State) -> do_function(...). do_function(...) dot_dot_dot.
Even worse with specs :| - Its too easy to create zombie processes: why can't we get the OS pid?
- Distributed Erlang: hostnames / shortnames / nodenames / etc.: why can't this be simpler?
- Difficult to gain visibility into running system (but probably true of any highly concurrent / distributed system)