getify / You-Dont-Know-JS

A book series on JavaScript. @YDKJS on twitter.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Backward and forward compatibility in Javascript specification

Zerro97 opened this issue · comments

Yes, I promise I've read the Contributions Guidelines (please feel free to remove this line).


Please type "I already searched for this issue": "I already searched for this issue"

Edition: 2nd

Book Title: Get Started

Chapter: 1

Section Title: Backwards & Forwards

Question:

Question I have is whether Babel transpiler is used to produce forward or backward compatible version of Javascript code.

From official documentation from Babel:

Babel is a toolchain that is mainly used to convert ECMAScript 2015+ code into a backwards compatible version of JavaScript in current and older browsers or environments.

But in the book, you mentioned:

Developers should focus on writing the clean, new syntax forms, and let the tools take care of producing a forwards-compatible version of that code that is suitable to deploy and run on the oldest-supported JS engine environments.

I was conflicted whether to say Babel produces forward or backward compatible version of Javascript code, given how Babel doc and many people on internet refer to Babel as backward compatible.

I'm just curious about your opinion on this.

Please see my several comments in this thread: #1803

The description provided in the Babel official documentation and the statement in the book are not necessarily contradictory but may appear so due to different perspectives and contexts.

Babel is primarily known for converting ECMAScript 2015+ (ES6+) code into a backwards-compatible version of JavaScript. This means it takes modern JavaScript code, which might use the latest language features that are not supported by older browsers or JavaScript engines, and transforms it into equivalent code that is compatible with those older environments. In this sense, Babel helps developers write code using the latest syntax and features without worrying about whether it will work on older platforms.

However, the statement in the book refers to the broader concept of forward compatibility. In the book's context, "forward-compatible" means writing code using the latest syntax forms while trusting that the tools, such as Babel, will handle converting it into a version that will work on older engines. This perspective encourages developers to embrace modern JavaScript and not limit their code to older syntax just for compatibility reasons. Instead, they can use modern features, knowing that tools like Babel can produce a version that will work even in older environments.

In essence, Babel's primary goal is to provide backwards compatibility, but it can be seen as enabling forward compatibility as well. By writing code using modern syntax, you're being forward-compatible in the sense that your code is ready for future JavaScript engines and environments while still being transformed to work on older ones.

So, to sum up, Babel's main purpose is to produce a backward-compatible version of JavaScript, but it facilitates forward compatibility by allowing developers to write modern code that can be transformed for older environments.