Deprecation
In several fields, deprecation is the discouragement of use of some terminology, feature, design, or practice, typically because it has been superseded or is no longer considered efficient or safe, without completely removing it or prohibiting its use.
It can also imply that a feature, design, or practice will be removed or discontinued entirely in the future.[1]
Etymology
In general English usage, the infinitive "to deprecate" means "to express disapproval of (something)". It derives from the Latin verb deprecare, meaning "to ward off (a disaster) by prayer". In current technical usage, for one to state that a feature is deprecated is merely a recommendation against using it. It is still possible to produce a program or product without heeding the deprecation.
Software deprecation
While a deprecated software feature remains in the software, its use may raise warning messages recommending alternative practices; deprecated status may also indicate the feature will be removed in the future. Features are deprecated rather than immediately removed, to provide backward compatibility, and to give programmers time to bring affected code into compliance with the new standard.
Among the most common reasons for deprecation are:
- The feature has been replaced by a more powerful alternative feature. For instance, the Linux kernel contains two modules to communicate with Windows networks:
smbfs
andcifs
. The latter provides better security, supports more protocol features, and integrates better with the rest of the kernel. Since the inclusion ofcifs
,smbfs
has been deprecated. - The feature contains a design flaw—frequently a security flaw—and so should be avoided, but existing code depends upon it. The simple C standard function
gets()
is an example, because using this function can introduce a buffer overflow into the program that uses it.[2] The Java API methodsThread.stop
,.suspend
and.resume
are further examples.[3] - The feature is considered extraneous, and will be removed in the future in order to simplify the system as a whole. Early versions of the Web markup language HTML included a
FONT
element to allow page designers to specify the font in which text should be displayed. With the release of Cascading Style Sheets and HTML 4.0, theFONT
element became extraneous, and detracted from the benefits of noting structural markup in HTML and graphical formatting in CSS. Thus, theFONT
element was deprecated in the Transitional HTML 4.0 standard, and eliminated in the Strict variant. - A future version of the software will make major structural changes, making it impossible (or impractical) to support older features. For instance, when Apple Inc. planned the transition from Mac OS 9 to Mac OS X, it created a subset of the older system's API which would support most programs with minor changes: the Carbon library (that has since been deprecated), available in both Mac OS 9 and Mac OS X. Programmers who were, at the time, chiefly using Mac OS 9, could ensure that their programs would run natively on Mac OS X by using only the API functions supported in Carbon. Other Mac OS 9 functions were deprecated, and were never supported natively in Mac OS X.
- Standardization or increased consistency in naming. Projects that are developed over long periods of time, or by multiple individuals or groups, can contain inconsistencies in the naming of various items. These might result from a lack of foresight, changes in nomenclature over time, or personal, regional, or educational differences in terminology. Since merely renaming an item would break backwards compatibility, the existing name must be left in place. The original name will likely remain indefinitely, but will be deprecated to encourage use of the newer, more consistent naming convention. An example would be an API that alternately used the spelling "color" and "colour". Standardization would result in the use of only one of the regional spellings throughout, and all occurrences of the other spelling would be deprecated.
- A feature that once was only available independently is now combined with its co-feature. An example is VLC Media Player; VLC used to stand for "VideoLan Client", and a separate "VideoLan Server" was available as its co-feature. Both the client and server became available in the same package, and as such, getting one independently would be impractical.
Other usage
An example in hardware design is omission of pull-up resistors on unused inputs to a logic gate. This practice may have been acceptable in the past, but has become deprecated because faster clock speeds are likely to induce more transient noise on input lines, causing hardware glitches or malfunctions.
A building code example is the use of ungrounded ("2-prong") electrical receptacles. Over time, these older devices were widely deprecated in favor of safer grounded ("3-prong") receptacles. The older, ungrounded receptacles were still permitted in many places by "grandfathering" them in existing electrical wiring, while prohibiting them for new installations. Thus, though ungrounded receptacles may still be available for legal purchase in a location where they are obsolete, they would generally be intended only for repairs to existing older electrical installations.
In writing and editing, usage of a word may be deprecated because it is ambiguous, confusing, or offensive to some readers. For example, the words sanction and inflammable may be misinterpreted because they have auto-antonymic or self-contradictory meanings; writing style guides often recommend substituting other words that are clearly understood and unambiguous. Some word usages that have acquired different connotations over time, such as gay or colored, may be deprecated as obsolete in formal writing.
In technical standards, use of a certain clause may be discouraged or superseded by new clauses. As an example, in the Ethernet standard IEEE 802.3-2012, Clause 5 (Layer Management) is "deprecated" by Clause 30 (Management), except for 5.2.4.
The term deprecated may also be used when a technical term becomes obsolete, either through change or supersession. An example from paleontology is the previously deprecated term Brontosaurus; before being re-recognized as a unique genus,[4] it was considered a popular, yet deprecated, name for the genus Apatosaurus.[5] Some examples of deprecated terms from medicine include consumption (tuberculosis), grippe (influenza), and apoplexy (stroke). In chemistry, the international standards organization IUPAC (International Union of Pure and Applied Chemistry) has deprecated the term "methyl ethyl ketone", and now recommends using the term "ethyl methyl ketone" instead.[6]
See also
References
- ^ "JEP 277: Enhanced Deprecation". openjdk.java.net. Retrieved 9 February 2018.
- ^ GNU. "Line Input". The GNU C Library. GNU. Retrieved 2 August 2008.
Deprecated function: char * gets (char *s). ... The
gets
function is very dangerous because it provides no protection against overflowing the strings
. The GNU library includes it for compatibility only. You should always usefgets
orgetline
instead.{{cite book}}
: External link in
(help); Unknown parameter|sectionurl=
|sectionurl=
ignored (|section-url=
suggested) (help) - ^ "Java Thread Primitive Deprecation". Oracle. Retrieved 13 May 2011.
- ^ Brontosaurus Finally Validated as a Distinct Dinosaur
- ^ Upchurch, Paul; Barrett, Paul M.; Dodson, Peter. (2004). "Sauropoda". The Dinosauria (2nd ed.). Berkeley: University of California Press. pp. 259–322. ISBN 0-520-24209-2.
{{cite book}}
: Unknown parameter|editors=
ignored (|editor=
suggested) (help) - ^ Nomenclature of Organic Chemistry : IUPAC Recommendations and Preferred Names 2013 (Blue Book). Cambridge: The Royal Society of Chemistry. 2014. p. 725. doi:10.1039/9781849733069-FP001. ISBN 978-0-85404-182-4.
External links
- How and When To Deprecate APIs from the JDK 5.0 Documentation
- Detect deprecated functions A tool that discovers deprecated functions in any Windows native application or library.