this post was submitted on 17 May 2025
492 points (97.9% liked)

Programmer Humor

23366 readers
1216 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 4 points 3 days ago (2 children)

Not having a separate compilation step absolutely affects error handling. With a compilation step, you can have errors that will only be seen by and must be address by a developer prior to run time. Without one, the run time system, must assign some semantics to the source code, no matter how erroneous it is.

No matter what advisory "signature" you imagine for a function, JS has to assign some run time semantics to that function being called incorrectly. Compiled languages do not have to provide a run time semantics to for signatures that can be statically checked.

[–] BatmanAoD 1 points 3 days ago (1 children)

Without one, the run time system, must assign some semantics to the source code, no matter how erroneous it is.

That's just not true; as the comment above points out, Python also has no separate compilation step and yet it did not adopt this philosophy. Interpeted languages were common before JavaScript; in fact, most LISP variants are interpreted, and LISP is older than C.

Moreover, even JavaScript does sometimes throw errors, because sometimes code is simply not valid syntactically, or has no valid semantics even in a language as permissive as JavaScript.

So Eich et al. absolutely could have made more things invalid, despite the risk that end-users would see the resulting error.

[–] [email protected] 1 points 2 days ago (1 children)

Python also has no separate compilation step and yet it did not adopt this philosophy

Yes. It did. It didn't assign exactly the same semantics, but it DOES assign a run time semantic to min().

[–] BatmanAoD 3 points 2 days ago* (last edited 2 days ago)

I'm addressing the bit that I quoted, saying that an interpreted language "must" have valid semantics for all code. I'm not specifically addressing whether or not JavaScript is right in this particular case of min().

...but also, what are you talking about? Python throws a type error if you call min() with no argument.

[–] [email protected] 0 points 2 days ago (1 children)

I agree, compiled languages prevent large classes of errors, including invoking functions with wrong parameters. However, whether or not you define calling max() with no arguments to be an error or not is unrelated to your language being compiled or interpreted. You could define max() to be -inf in C++ if you wanted, even though the language allows you to prevent invocations of max() with no arguments altogether.

[–] [email protected] 1 points 2 days ago

The run time still has to assign a semantics to it, even if that semantics is a fatal error. In a compiled language, you can prevent the run time from having to assign any semantics by eliminating the error condition at compile time.