How to handle "experimental" status when adoption is significant?
還沒有人認領這個 Issue。
評估
- 難度
- 5/5
- 預估耗時
- 一週以上
- 新手友好度
- 25/100
- Issue 類型
- 功能
- 描述清晰度
- 需要釐清
- 活躍度
- 停滯
- 技術堆疊
- javascript, nodejs
- 領域
- release
研究方向
從 Node.js 穩定性索引和對 ESM 載入器的討論開始,包括 ts-node 和 import-in-the-middle 中回報的破壞性問題。檢視應如何處理已採用的實驗性 API 和重大變更,包括 TSC 的參與。當 TSC 就廣泛採用的實驗性 API 的未來變更達成明確政策並將其記錄下來時,即視為完成。
由索引模型根據 Issue 內容生成。
描述
I'm posting this here as I feel this needs TSC deliberation on the stance of the project.
We've had many things over the years stuck in "experimental" status limbo for years as things are still not ready or sometimes because they might never be ready. This is the case with async_hooks which no one wants to risk breaking because it will break the majority of users. (It's my personal goal to get abstractions or other APIs to a state where we can mark async_hooks itself as internal.) The lingering "experimental" status of some things is part of the issue I want to discuss, but moreso the disjoint between adoption and stability.
In Node.js 20 ESM loaders were moved off-thread with no flagging and no deprecation cycle around the ways existing users were using it. This broke ts-node and import-in-the-middle which is the only way for APM products to support ESM. As ESM loaders are an “experimental” feature this is technically allowed, however Node.js has historically generally approached significant changes to experimental features with broader adoption with much more care. Experimental status stages were introduced awhile ago to somewhat reflect differing stages of "experimental" status and I would have expected loaders to be marked as 1.2 at this point as it has been largely unchanged from a user perspective since v16. It also reads a bit weird to me though that 1.2 implies very nearly stable status but then the top-level description implies anything could be changed or removed at any time. Very confusing. 🤔
Anyway, I was rather surprised to see the off-thread loaders change not reverted immediately when it was discovered that it broke ts-node and import-in-the-middle. The change would have been fine if it spent some time behind a flag so users could try it out and make the necessary changes for their code to support it but this substantial refactor was released unflagged and due to being deemed ready on the day of code freeze for Node.js 20, it left zero time for the community to react. I'm sure some quality work went into the design, which I've seen on occasion when I have had the time to poke my head into the loaders code. But I feel there should have been more consideration of user impact with some effort to land the change in a way which would have been less disruptive.
As a widely adopted runtime that has in recent years been pushing hard on stability and performance to make Node.js more appealing and accommodating of enterprise users, this felt like a major step backward to me. This is the level of user consideration I would expect of the pre-1.0 days, not v20. I don't want to shame the contributors involved as I feel their work is very valuable and I would like to see loaders done, but I feel the TSC should probably be more involved in guiding larger efforts like this to ensure transitions are smoother. It's much better to take our time and focus on stable progress as it's much easier to add code to the project than it is to remove it after it's already been released. It's also not a good look when you announce a shiny new major release, especially on a line that will become LTS, and people go to try it out only to find several of the most popular tools are broken. 😅
Anyway, I hope we can better define how to handle future changes to still in-development APIs which already have user adoption so we can be a bit less disruptive in the future. As someone that writes code deployed in many, many enterprises, they get pretty cranky when I break their apps. 🙈
- 主要語言
- JavaScript
- 星號
- 693
- 分支
- 142
- 平均合併
- 8 天 7 小時
- 30 天內合併 PR
- 3
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
nodejs/TSC 的其他 Issue
-
難度 1/5 1 小時以內 新手友好度 20/100
-
tsc-agenda
難度 5/5 一週以上 新手友好度 8/100
-
難度 5/5 一週以上 新手友好度 3/100
-
build-agenda tsc-agenda
難度 5/5 一週以上 新手友好度 5/100
-
難度 1/5 1 小時以內 新手友好度 18/100
相似的 Issue
-
bug
難度 2/5 1-3 小時 新手友好度 78/100
swc-project/swc-next#1165 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
nhsuk/nhsuk-prototype-kit-package#439 ·
維護者通常 1 天內回覆
-
Add: &TV Logo未關閉check:passed logos:add
難度 1/5 1 小時以內 新手友好度 74/100
-
BUG: Appointment time renders blank and PM appointment slots miscalculate vertical position in CalendarScreen可能已有人在做 @aryanpatil-07 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 78/100
AOSSIE-Org/BabyNest#297 · 1 則留言 ·
維護者通常 1 天內回覆
-
Onboarding form: instructor radio never pre-selected "Yes" (permission vs permissions typo)可能已有人在做 @ThakuraAnki 今天認領。 未關閉bug
難度 1/5 1 小時以內 新手友好度 72/100
WikiEducationFoundation/WikiEduDashboard#7235 ·
維護者通常 1 天內回覆