Hacker News new | ask | show | jobs
by rozap 1057 days ago
> I just don’t see how it’s so flat.

Because people like making wild and provocative claims to motivate writing a paper for which the conclusion was already decided.

Anyone who has used, I dunno, any of programming languages that are being discussed has a more nuanced take, and isn't spending time trying to force all things into Box A or Box B.

Elixir/Erlang has a pleasant concurrency model. It does some things well, it does other things less well. It eliminates a big class of bugs, and yet you can still write bugs in Elixir.

These sorts of papers are a waste of space on the internet imo.

1 comments

“What is sending a message to my process and making it crash?!”

“My synchronous reply timed out, so why I am I getting a message after the timeout?!”

“Why did deleting my build directory fix the compile error?!”

“How do I keep my app from crashing when my supervisor crashed too many times in a given timeframe?!”

So many adventures to be had.

For the first you can setup a tracer for messages sent and received. Second should not happen from OTP 24.

Fourth is the wrong question to ask: if the failure handling mechanism is invoked too frequently, fix the failures, not the recovery.

Third is definitely my fault. Bug reports are appreciated whenever possible.

But generally speaking, yes, debugging is part of every programming language, and concurrency and distribution will add to the adventure whenever used, to varying degrees depending on the programming language.

Plenty. But I'd take those trivial issues over a blob of microservices any day of the week.

In any case, the answer continues to be "it depends". But people will continue to look for "one weird trick" solutions to every problem.

It's fun an games until you have to debug an Erlang RPC call that is timing out w/o log messages in a blob of Elixir micro services.
On erlang vm (beamvm), you can safely trace in production. It makes tracing and debugging tools in other ecosystems look like they are primitive in comparison.

I think erlang ecosystem has its own warts like any other one but debugging definitely isn't one

Here are a few examples of what you can do in erlang/elixir:

Inspect function calls that match specific argumrnt patterns, which can get pretty detailed. Tag processes by id, future processes under a supervisor, or other criteria, and limit tracing to these. Limit tracing to n occurences. As in automatically disable tracing after it triggered n times.

Typically one combines these and more to identify issues pretty rapidly.

tracing Erlang in prod is literally a fun game, and very easy. Like...one of the best things about the ecosystem. The dbg module (part of the stdlib) is your friend. Trace messages, function calls, with as wide or as specific a net as you need. I've found bugs quickly that would have taken a lot of trial and error on other platforms.