microsoft / TypeScript

TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
https://www.typescriptlang.org
Apache License 2.0
101.07k stars 12.49k forks source link

TypeScript 5.0 Iteration Plan #51362

Closed DanielRosenwasser closed 10 months ago

DanielRosenwasser commented 2 years ago

This document outlines our focused tasks for TypeScript 5.0. It minimally indicates intent to investigate tasks or contribute to an implementation. Nothing is set in stone, but we will strive to complete these tasks in a reasonable timeframe.

Date Event
November 15th TypeScript 4.9 Release
January 20th Create 5.0 Beta (5.0.0) Build for Testing
January 24th TypeScript 5.0 Beta Release
February 24th Create 5.0 RC (5.0.1) Build for Testing
February 28th TypeScript 5.0 RC Release
March 10th Create 5.0 Final (5.0.2) Build for Testing
March 16th TypeScript 5.0 Final Release 🚀
gantt
    dateFormat  YYYY-MM-DD
    TypeScript 4.9 Stabilization Period : 2022-10-28, 2022-11-11
    TypeScript 5.0 Beta Development : 2022-10-28, 2023-01-19
    TypeScript 5.0 RC Development : 2023-01-19, 2023-02-24
    TypeScript 5.0 Stabilization Period : 2023-02-24, 2023-03-16
todayMarker stroke-width:5px,stroke:#0f0,opacity:0.5

Language and Compiler Features

Editor Productivity

Performance

Infrastructure

Website

DanielRosenwasser commented 1 year ago

The TypeScript 5.1 Iteration Plan is available here.

DanielRosenwasser commented 1 year ago

We will likely publish the RC tomorrow.

RyanCavanaugh commented 1 year ago

I don't want to start a debate about it, just want to point out that deprecations do not fall under the breaking change status because they don't break anything yet. Removal of syntax or features is what falls under the breaking changes nomenclature.

They do break things, because your build is going to start failing until you opt into the "give me back the old behavior" flag.

SmashingQuasar commented 1 year ago

I don't want to start a debate about it, just want to point out that deprecations do not fall under the breaking change status because they don't break anything yet. Removal of syntax or features is what falls under the breaking changes nomenclature.

They do break things, because your build is going to start failing until you opt into the "give me back the old behavior" flag.

That's not a deprecation. A deprecation triggers a notice or a warning without behavior change. You are describing a retro-compatiblity option which is not the same at all. To me knowledge, namespaces are widely deprecated and are still working just fine without any optional flag. Optional flags are also used for opt-in to some more strict features. It's really not a good example of deprecation in my opinion. Again, let's not start a debate about that.

RyanCavanaugh commented 1 year ago

Namespaces aren't deprecated.

SmashingQuasar commented 1 year ago

My bad, I was actually think about this syntax:

module Foo { }

which still works without any flag but is deprecated in favor of namespaces. Thanks for pointing it out for others who may not know about it. This is a good example of deprecation done right by TypeScript. (it would benefit from triggering a warning which does not seem to be the case with TS 4.9.x)

RyanCavanaugh commented 1 year ago

module Foo { isn't deprecated either (yet). See #51825.

I think a nice thing about the deprecation strategy we're using for 5.0 is that none of the guessing that's happening here is actually necessary. No Error = Not Deprecated.

SmashingQuasar commented 1 year ago

Yes, but just remember that this whole discussion was about TypeScript not following SemVer and instead using an arbitrary versioning that uses the SemVer format but not the logic. If you don't want to use SemVer, it would be preferable to simply use raw version numbers like some other software do such as TS 5, TS 6... TS 123. Then, I pointed out that your link listed deprecations, which do not constitute a breaking change under the SemVer logic and should instead be listed within a minor version. You insisted that these were breaking changes and they are not. Overall, deprecations should not break existing code, otherwise they are not deprecations, they are simply feature suppression with possibly a compatibility bridge that needs manual activation.

RyanCavanaugh commented 1 year ago

It seems like maybe you're not fully aware of how these deprecations are being rolled out? If you currently are targeting ES3 and try to use TS5, you will get an error you didn't get before. That's exactly the situation (my build was passing and now it's not) that 95% of "This should have been a semver major bump" complaints are about. The ease of getting back to zero errors is, in all cases, wholly irrelevant.

DanielRosenwasser commented 1 year ago

@typescript-bot bump release-5.0

typescript-bot commented 1 year ago

Heya @DanielRosenwasser, I've started to update the version number on release-5.0 to 5.0.2 for you. Here's the link to my best guess at the log.

SmashingQuasar commented 1 year ago

It seems like maybe you're not fully aware of how these deprecations are being rolled out? If you currently are targeting ES3 and try to use TS5, you will get an error you didn't get before. That's exactly the situation (my build was passing and now it's not) that 95% of "This should have been a semver major bump" complaints are about. The ease of getting back to zero errors is, in all cases, wholly irrelevant.

Again, deprecations should not break existing code. That is the whole concept of a deprecation. If they are breaking existing code, they are not deprecations, they are feature removal with a retro-compatibility bridge. If they are handled that way, then sure, those are breaking changes that constitute a major version. They should however be listed as such and not as deprecations.

DanielRosenwasser commented 1 year ago

We're having an issue with a build pipeline, so we'll be targeting the stable release for Thursday, March 16th.

trim21 commented 1 year ago

We're having an issue with a build pipeline, so we'll be targeting the stable release for Thursday, March 16th.

is this the same reason why 5.0.2 is not released?

DanielRosenwasser commented 1 year ago

Ugh, that is a typo in the release plans. 5.0.2 is the release I'm talking about. I've fixed up the original comment.

sacummings91 commented 1 year ago

It's crazy that people have the nerve to come in here and complain. TS is literally free for us to use and everyone on the team puts a massive amount of effort into it. You should just be grateful it exists.

jez9999 commented 1 year ago

It's the 16th... any chance of TS5 today?

RyanCavanaugh commented 1 year ago

Yes! https://devblogs.microsoft.com/typescript/announcing-typescript-5-0/

elsaulio commented 1 year ago

@polkovnikov-ph https://civet.dev/ supports ES proposals and compiles to typescript

DanielRosenwasser commented 1 year ago

@typescript-bot bump release-5.0

typescript-bot commented 1 year ago

Heya @DanielRosenwasser, I've started to update the version number on release-5.0 to 5.0.3 for you. Here's the link to my best guess at the log.

DanielRosenwasser commented 1 year ago

@typescript-bot bump release-5.0

typescript-bot commented 1 year ago

Heya @DanielRosenwasser, I've started to update the version number on release-5.0 to 5.0.4 for you. Here's the link to my best guess at the log.