Live data from Hacker News

The Let It Crash Philosophy Outside Erlang

stratus3d.com

11–20 of 35 posts

Re: The Let It Crash Philosophy Outside Erlang

#11

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

JavaScript does a lot more implicit coercions in bad ways than Python does.

Re: The Let It Crash Philosophy Outside Erlang

#12

"I don’t think Let It Crash is a good name for the philosophy Erlang has about handling faults" This is also known as "Crash-Only software" [1]. I'm a huge fan. [1] https://www.usenix.org/conference/hotos-ix/crash-only-softwa...

What he might be getting at, that others have certainly discussed, is that things like "crash only software!" are not winning marketing slogans when trying to sell a piece of technology to higher-ups in your company.

Re: The Let It Crash Philosophy Outside Erlang

#14
post #12

"I don’t think Let It Crash is a good name for the philosophy Erlang has about handling faults" This is also known as "Crash-Only software" [1]. I'm a huge fan. [1] https://www.usenix.org/conference/hotos-ix/crash-only-softwa...

What he might be getting at, that others have certainly discussed, is that things like "crash only software!" are not winning marketing slogans when trying to sell a piece of technology to higher-ups in your company.

Yes, you tell those people the software is "self healing".

Re: The Let It Crash Philosophy Outside Erlang

#15

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

> That's not really a Javascript problem. That's a dynamically typed language problem.

I disagree; I do a lot of work in both dynamic and strongly typed languages. Most often, when I find a bug "not where the error occurs," it's because, for example, I'm accidentally computing a minimum and later assuming it to be a maximum. Unit tests catch most of this, so such debugging puzzles usually happen to me in fresh new code with unstable interfaces...

Re: The Let It Crash Philosophy Outside Erlang

#16
post #4

While 'Let It Crash' is a philosophy, it is greatly aided in Erlang by extremely lightweight threads that communicate with each other via mailboxes.

It's helpful in other domains, too. For example, in ETL pipelines, I would greatly prefer to have an entire DAG go down quickly and noisily than to risk having it generate incorrect data. It's the difference between a crappy morning, and a crappy day or even a crappy week.

Just curious since a lot of my work is on an ETL - what are your favorite DAG libraries/approaches? Some of my ETL workflows can run in parallel with each other because there aren't data dependencies between them, and others should definitely crash loudly

Re: The Let It Crash Philosophy Outside Erlang

#17
post #4

While 'Let It Crash' is a philosophy, it is greatly aided in Erlang by extremely lightweight threads that communicate with each other via mailboxes.

It's helpful in other domains, too. For example, in ETL pipelines, I would greatly prefer to have an entire DAG go down quickly and noisily than to risk having it generate incorrect data. It's the difference between a crappy morning, and a crappy day or even a crappy week.

> a crappy day or even a crappy week

Or a crappy discovery at the end of the quarter...

Re: The Let It Crash Philosophy Outside Erlang

#18
post #12

Earlier quoted context omitted.

What he might be getting at, that others have certainly discussed, is that things like "crash only software!" are not winning marketing slogans when trying to sell a piece of technology to higher-ups in your company.

Yes, you tell those people the software is "self healing".

Nice! I'll have to use that.

Re: The Let It Crash Philosophy Outside Erlang

#19
post #12

Earlier quoted context omitted.

What he might be getting at, that others have certainly discussed, is that things like "crash only software!" are not winning marketing slogans when trying to sell a piece of technology to higher-ups in your company.

Yes, you tell those people the software is "self healing".

It reminds me of how people love, for marketing purposes, to have technology, say in vehicles, that is "adaptive". In software in general, but particularly in cars, there is nothing I hate more. Because "adaptive" makes people think of a partner that anticipates your needs, but it can't do that, not being intelligent so adaptive ends up being the opposite of responsive.

Re: The Let It Crash Philosophy Outside Erlang

#20

Earlier quoted context omitted.

The worst part about javascript failing is a lot of time it doesn't do it at the thing that is the problem. I've run into a lot of cases in node where I passed something not quite right to a crypt library but didn't find out until like 2 pages later. Usually for things that in python would throw an exception immediately.

That's not really a Javascript problem. That's a dynamically typed language problem. Unless you add some kind of assertion/test at the entry point to a library, the failure will always be postponed to the point of use (or silent if it's never used, until the day someone turns a feature on). If the same sort of issue works differently in Python, the Python library has asserts or other tests, or is using the value at a…

JavaScript is absolutely the problem.

As pointed out, {}.foo will not cause an error. In Python and any good dynamic language, that will generate an error.

Another problem is all the implicit (silent) type conversions. JavaScript will happily add an Object and an integer, then multiply that by a string. Any sensible type system would not allow that, but JavaScript silently produces a NaN.

The problem isn't that its a dynamic type system, but that the type system ignores things which are clearly problems.

Post reply on HN