bad =:= ugly
- 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)
- What Damien said (still)