(no title)
connor4312 | 3 years ago
For example, if you have a `binarySearch` function that returns -1 if an element isn't found, a developer might do something. `const result = arr[index]; if (result !== undefined) { ... }`. This would then start returning the last element instead of undefined at that index.
mhitza|3 years ago
But what do I care, whatever mess and complexity arises from these "good enough" implementations is left for the generation after us to deal with :)
bobthepanda|3 years ago
A lot of old code in other languages may be hard or impossible to compile and run without significant work.
syg|3 years ago
conaclos|3 years ago
RobotToaster|3 years ago
Surely there should be a simple way to have a header in each file with the language version, and then the file will be interpreted as that version?
zeven7|3 years ago
You may find [2] and [3] especially enlightening to understanding this thinking, and any other discussions from ES Discuss on the topic if you fell like digging into history.
[1] https://johnresig.com/blog/ecmascript-harmony/
[2] https://2ality.com/2014/12/one-javascript.html
[3] https://esdiscuss.org/topic/es6-doesn-t-need-opt-in
RyanCavanaugh|3 years ago
You grab some code in one of your old projects for implementing a binary search. Can you copy-paste it into a new project that targets a newer language version?
The question isn't as simple as "does it have syntax errors", because we're talking about changing semantics here. Given a set of semantic changes and a piece of code, figuring out (either as a human or a computer) whether the observable characteristics of that code have changed is somewhere between vexing and impossible. It's entirely possible, for example, that your code encounters changed semantics, but not in a way that changes the actual behavior of the code.
In this world it just becomes very, very difficult to reason about extremely common operations; it'd be a constant source of frustration. There's a good reason you rarely see languages versioning their behavior in impactful ways.
Garlef|3 years ago
This is nothing JS specific. Breaking changes are breaking changes. If you can, don't introduce them.
> simple way to have a header in each file with the language version
One special aspect that differentiates JS from other languages:
It's both a language AND a universal runtime. A lot of JS that's executed is not JS that's written by humans but generated by a compiler/transpiler.
So adding a layer of header versioning is not a big win in terms of developer experience: It would anyways be the deployment toolchain that's responsible to deal with such a versioning scheme. It would ideally be invisible to the developer.
charcircuit|3 years ago
spartanatreyu|3 years ago
You can add a polyfill to check if `Array.at()` exists, and if it doesn't, create a function that does the same thing and add it to the `Array` object, so now all `Array.at()` code works as expected.
Then once every environment you target supports `Array.at()` by default, you can remove the polyfill to reduce the size of your code.