The Problem
A new TC39 proposal is in conflict with an older library, mootools.
The proposal would add flatten
to ECMAScript, but would be incompatible with mootools, which has already added a flatten
to Array.prototype
. Adding Array.prototype.flatten
would then break any existing sites that are still using mootools.
This is apparently not the first time mootools has been incompatible with TC39 proposals.
The TC39 has the difficult job of not only approving new language proposals, but also making sure those proposals are backwards compatible and do not break the web.
Not the solution
Another proposal has recommended renaming flatten
to smoosh
. I'm not sure if this is a tongue in cheek recommendation, but it has sparked a large debate now dubbed #smooshgate.
This would be a workaround as flatten
is a better name than smoosh
. And to rename this method for an 8+ year old library seems insane.
Adding fuel to this fire, there appears to be yet another proposal to prevent the use of smoosh
by using an incompatible version of smoosh
in production sites today, thus forcing the TC39 to not break compatibility with smoosh
.
Backwards compatibility is important. I definitely don't want to go through old legacy sites that have been running just fine for years and update them simply because new features have been added to JavaScript. So, clobbering old libraries is not a good solution.
Though, researching every ancient library ever created for the web to ensure compatibility will also slow down progress and coming up with silly names also seems, well, silly.
A solution
I propose we learn some lessons from Ethereum and how they have already solved this exact problem in Solidity.
Solidity allows you choose which version of the Ethereum Virtual Machine (EVM) you want to run by adding a pragma
tag to the top of the code file.
// run this code with EVM 0.4.0
pragma solidity ^0.4.0;
contract MyContract {
}
It is clear to me that this simple solution is also the best long term solution for ECMAScript. This proposal will allow legacy sites to remain unbroken when new features come out. It will also allow the TC39 to progress than language faster and use the best proposals without fear of breaking the legacy web.
Sample Code:
'pragma ecmascript ^2018.0.0';
var arr1 = [1, 2, [3, 4]];
arr1.flatten();
// [1, 2, 3, 4]
We have already dome something similar with use strict
. This would simply be the next evolution of use strict
.
What is your opinion on this whole flatten
, smoosh
debacle? I would love to hear your thoughts in a comment below.
Cheers!
Top comments (0)