-
Notifications
You must be signed in to change notification settings - Fork 9.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Formally define Experimental and Deprecated #4325
Comments
@mikeschinkel thanks for filing this! For "Experimental", I think the main point is to place the feature outside of our compatibility guarantees. An experimental feature in 3.2 is not guaranteed to be compatible with 3.3, while regular features are expected to be strictly compatible from an older to newer minor release (3.0 to 3.1 schema objects are an exception that we do not intend to repeat). This is particularly important for new things like abstraction layers that are a step removed from the syntax, which is usually how we have defined compatibility. The open question is whether there needs to be some level of continuity guarantee. We do want people to feel motivated to implement these things, so we don't want to be too casual about it. For "Deprecated", I think there are basically two ways to go:
The rationale for option 2 is to encourage new tools to target the latest version, which would be simpler to implement than supporting full compatibility. This involves a trade-off between a new way to fragment the tooling landscape and the reality that backwards compatibility is a burden that is not relevant to all users. Our minor release guarantee (again excepting 3.0 to 3.1) is that you can just change the If we do option 2, we need to decide whether deprecating a feature immediately makes it optional for new tools, or whether you can only do that in the next release (e.g. syntax deprecated in 3.2 could only be dropped in tools that only support 3.3+, or could it be dropped in tools that only support 3.2+?) |
Will "Deprecated" ever be used as a signal that something will be removed in the future, and if so will that version be defined, e.g. deprecated in If no, or if not always, maybe other terms are needed to indicate the following for clarity?:
#2 might not be needed, though. IOW, if the plan is to remove it then shouldn't the version of removal of support be predefined? Regarding your last question, given experience with deprecated features in programming languages, I would say the version a feature is deprecated in — e.g. After writing the above, it occurs to me that newer tools being able to not support deprecated features may be enough incentive for people to move to the non-deprecated features, but I am leaving what I wrote above so that we can discuss and then explicitly take a position on the topic. |
@mikeschinkel Our versioning policy already allows us to break/change/add/remove anything on a major version change, but requires us to preserve compatibility when moving from one minor version to the next. So we already cannot remove something in a minor version, and we already set the expectation that nothing is guaranteed in a migration to a new major version (although we provide tools to assist such migrations). When defining what "deprecated" means we should be clear about how those compatibility rules are involved, but there's no need to add or change anything there. |
@handrews — Sounds good. |
notes from the TDC meeting:
Next steps:
|
Some additional notes from the call and my own thoughts:
|
Per discussions on 2025-01-28 we discussed the ideal of adding formal definitions for "Experimental" and "Deprecated". @handrews requested me to post an issue to ensure we discuss and potentially address this moving forward.
The text was updated successfully, but these errors were encountered: