Skip to content
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

Can a feature be experimental and deprecated at the same time? #1305

Closed
Elchi3 opened this issue Mar 7, 2018 · 5 comments
Closed

Can a feature be experimental and deprecated at the same time? #1305

Elchi3 opened this issue Mar 7, 2018 · 5 comments
Labels
question ❔ Issues where a question or problem is stated and a discussion is held to gather opinions.

Comments

@Elchi3
Copy link
Member

Elchi3 commented Mar 7, 2018

I'm wondering if it should be valid to have features marked as experimental: true and deprecated: true at the same time.

Currently, the MDN compat tables display icons when a feature is deprecated: true, experimental: true or standard_track: false.
The banners on top of MDN pages are not yet shown depending to the data we have in this data set, but added manually. We will likely change that to be automated based on the compat data soon.

Now, I'm wondering if experimental: true and deprecated: true shouldn't be ruling each other out.

If this doesn't make sense, we could add validation that forbids experimental and deprecated being true at the same time. Thoughts?

@Elchi3 Elchi3 added the question ❔ Issues where a question or problem is stated and a discussion is held to gather opinions. label Mar 7, 2018
@teoli2003
Copy link
Member

I think that if a feature is deprecated, it can't be experimental. It went out of experimental when it got deprecated.

@ddbeck
Copy link
Collaborator

ddbeck commented Mar 17, 2018

Out of curiosity, I checked it out and it looks like there are 57 features that are marked as both experimental and deprecated (source for generating this list):

api.AnimationEvent.initAnimationEvent
api.FetchEvent.client
api.HTMLShadowElement
api.HTMLShadowElement.getDistributedNodes
api.Headers.getAll
api.PositionSensorVRDevice
api.PositionSensorVRDevice.getImmediateState
api.PositionSensorVRDevice.getState
api.PositionSensorVRDevice.resetSensor
api.PushRegistrationManager
api.PushRegistrationManager.register
api.PushRegistrationManager.unregister
api.PushRegistrationManager.getRegistration
api.PushRegistrationManager.hasPermission
api.PushSubscription.toJSON
api.PushSubscription.unsubscribe
api.RTCPeerConnection.onaddstream
api.RTCPeerConnection.onremovestream
api.RTCPeerConnection.addStream
api.RTCPeerConnection.createDTMFSender
api.RTCSessionDescription.RTCSessionDescription
api.Request.context
api.Request.integrity
api.Request.keepalive
api.Response.useFinalURL
api.VRDisplay.getImmediatePose
api.VRDisplay.getPose
api.VRDisplay.hardwareUnitId
api.VRDisplay.isConnected
api.VRDisplay.resetPose
api.VRDisplayCapabilities.hasOrientation
api.VREyeParameters.maximumFieldOfView
api.VREyeParameters.minimumFieldOfView
api.VREyeParameters.recommendedFieldOfView
api.VREyeParameters.renderRect
api.VRFieldOfView.VRFieldOfView
api.VRPose.hasOrientation
api.VRPose.hasPosition
api.VRPose.timestamp
api.XMLDocument.load
api.XMLSerializer.serializeToStream
css.properties.font-variant-alternates
css.properties.font-variant-alternates.annotation
css.properties.font-variant-alternates.character_variant
css.properties.font-variant-alternates.ornaments
css.properties.font-variant-alternates.styleset
css.properties.font-variant-alternates.stylistic
css.properties.font-variant-alternates.swash
css.properties.scroll-snap-destination
http.headers.If-Match
http.headers.If-Modified-Since
http.headers.If-None-Match
http.headers.If-Unmodified-Since
http.headers.Keep-Alive
http.headers.Last-Modified
http.headers.Location
javascript.builtins.TypedArray.move

@a2sheppy
Copy link
Contributor

a2sheppy commented Apr 2, 2018

I think there are cases where these both apply. Consider an API which was experimental, stayed in that state long enough that some sites started to deploy using it, and then the API was abandoned and became deprecated. If you remove the "experimental" label, it suggests that the API was finalized then later obsoleted. An API that's both experimental and deprecated is one that was never a finished/widely adopted API, but was shipped in at least one browser before later being deprecated.

Consider things like RTCPeerConnection.addStream(). This method was removed while WebRTC was still in an unstable state, so it was experimental, but is now also obsolete.

Another example: the original implementation of Custom Elements, which was in fact shipped in Chrome for a short time. That was an experimental API, since deprecated. Removing the "experimental" label suggests that it was a finished API that has become deprecated.

@Elchi3 Elchi3 added this to Schema improvements in Non-data issue overview Jan 10, 2019
@queengooborg
Copy link
Collaborator

I agree with @a2sheppy on this one, and suggest that experimental: true and deprecated: true should both be allowed at once. As a user looking at the docs, I'd assume everything without an "experimental" flag is a completed API.

@Elchi3
Copy link
Member Author

Elchi3 commented May 2, 2019

Sounds like this didn't confuse more people over the last year, so I'm closing this and setting both to true remains allowed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question ❔ Issues where a question or problem is stated and a discussion is held to gather opinions.
Projects
None yet
Development

No branches or pull requests

5 participants