{"id":938,"date":"2010-03-23T11:38:35","date_gmt":"2010-03-23T18:38:35","guid":{"rendered":"https:\/\/blogs.mentor.com\/verificationhorizons\/?p=938"},"modified":"2026-03-27T08:44:48","modified_gmt":"2026-03-27T12:44:48","slug":"the-art-of-deprecation","status":"publish","type":"post","link":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/2010\/03\/23\/the-art-of-deprecation\/","title":{"rendered":"The Art of Deprecation"},"content":{"rendered":"<p>At a recent SystemVerilog requirements gathering meeting,I was quite amused to see \u201cdeprecating features\u201d come out as one of the <a href=\"http:\/\/www.eda.org\/sv-ieee1800\/Meetings\/2010\/February\/Presentations\/26-February-2010-Req-Gather-Mtg-Notes.pdf\" target=\"_blank\" rel=\"noopener\">top 10 user requested priorities<\/a> for the next revision of the IEEE 1800 standard. Even more amazing was that this request came out without listing which features were to be considered for deprecation.<\/p>\n<figure id=\"attachment_986\" aria-describedby=\"caption-attachment-986\" style=\"width: 281px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-986 \" src=\"https:\/\/blogs.sw.siemens.com\/wp-content\/uploads\/sites\/54\/2010\/03\/696500001-520x390.jpg\" alt=\"P1800 Requirements Gathering Meeting 2\/27\/2010\" width=\"281\" height=\"211\" \/><figcaption id=\"caption-attachment-986\" class=\"wp-caption-text\">P1800 Requirements Gathering Meeting 2\/27\/2010<\/figcaption><\/figure>\n<p>I\u2019m sure most people don\u2019t understand the meaning of the word <em>deprecate<\/em>. I thought I understood until I looked it up in a dictionary. According to Merriam-Webster:<\/p>\n<p>Deprecate:<\/p>\n<p><strong>1 a<\/strong> <em>archaic<\/em> <strong>:<\/strong> to pray against (as an evil) <strong>b<\/strong> <strong>:<\/strong> to seek to avert &lt;deprecate the wrath\u2026of the Roman people \u2014 Tobias Smollett&gt;<br \/>\n<strong>2<\/strong> <strong>:<\/strong> to express disapproval of<br \/>\n<strong>3 a<\/strong> <strong>:<\/strong> <a href=\"http:\/\/www.merriam-webster.com\/dictionary\/play+down\" target=\"_blank\" rel=\"noopener\">play down<\/a> <strong>:<\/strong> make little of &lt;speaks five <a href=\"http:\/\/www.merriam-webster.com\/dictionary\/deprecation\" target=\"_blank\" rel=\"noopener noreferrer\">languages<\/a>\u2026but deprecate<em>s<\/em>this facility \u2014 <em>Time<\/em>&gt; <strong>b<\/strong> <strong>:<\/strong> <a href=\"http:\/\/www.merriam-webster.com\/dictionary\/belittle\" target=\"_blank\" rel=\"noopener\">belittle<\/a>, <a href=\"http:\/\/www.merriam-webster.com\/dictionary\/disparage\" target=\"_blank\" rel=\"noopener\">disparage<\/a>&lt;the most reluctantly admired and least easily <em>deprecated<\/em><span class=\"vi\"> of\u2026novelists \u2014 <em>New Yorker<\/em>&gt;<\/span><\/p>\n<p>In computer science standards and documentation, <a href=\"http:\/\/en.wikipedia.org\/wiki\/Deprecation\" target=\"_blank\" rel=\"noopener\">deprecation<\/a> has come to mean to supersede or discourage use of a feature. It does not mean a feature has to be removed to be compliant with the standard. You can\u2019t remove a feature from an existing standard; you can only remove a feature from being documented in a future standard. No vendor is going to immediately remove a feature from a tool that it has already implemented and in widespread use without ample warning and without providing a practical alternative to the user. Typically, a deprecated feature is never removed from support in a tool unless in the rare case it\u2019s needed to allow for a future enhancement.<\/p>\n<p>The current standard lists in Annex C.4 the defparam and the procedural continuous assignment statements as candidates for deprecation. Listing candidates for deprecation seems to be almost the same as actually deprecating them without removing the LRM. No tool will remove support for these statements regardless of whether they are candidates or actually removed from the LRM.<\/p>\n<p>Q: So why go though the trouble of deprecating a feature in a standard?<br \/>\nA: Well, to discourage use of that feature.<\/p>\n<p>Q: And why is that a good thing to do?<br \/>\nA: It makes learning the language and maintaining existing code much easier.<\/p>\n<p>Take an example from the current Verilog and SystemVerilog LRMs. The <strong>logic<\/strong> data type was added to supersede the <strong>reg<\/strong> data types; they both have the same semantics. Anyone with a history of Verilog will understand the change in keywords, but someone new to SystemVerilog will be left wondering why there are two keywords for the same thing. And then there is the issue of trying to maintain the LRM so that all references to <strong>reg<\/strong> also include <strong>logic<\/strong> and the other way around. If someone misses that in one place, people will begin to think the two keywords have different behaviors.<\/p>\n<p class=\"MsoNormal\">\n<p class=\"MsoNormal\">It seems it\u2019s always easier to add new features than to remove them. There are many places to create lists of your favorite enhancements. At the same time, people complain about the size of the Language Reference Manual \u2013 it\u2019s over 1200 pages. Doug Smith of Doulos writes \u201c<a href=\"http:\/\/www.dvclub.org\/blog\/2010\/03\/highlights-of-dvcon-2010\/\" target=\"_blank\" rel=\"noopener\">Will this language ever stop exploding?<\/a>\u201d<\/p>\n<p class=\"MsoNormal\">\n<p class=\"MsoNormal\">So here is my list for deprecation, as well as a place for other to add their list by commenting here.<\/p>\n<p class=\"MsoNormal\">\n<ol style=\"margin-top: 0in\" type=\"1\">\n<li class=\"MsoNormal\"><a href=\"..\/blog\/2009\/05\/07\/programblocks\/\">Program blocks<\/a><\/li>\n<li class=\"MsoNormal\">Reg data type \u2013 see above<\/li>\n<li class=\"MsoNormal\"><a href=\"http:\/\/www.ovmworld.org\/forums\/showthread.php?p=5502#post5502\" target=\"_blank\" rel=\"noopener\">Wildcard associative array index types<\/a><\/li>\n<li class=\"MsoNormal\"><a href=\"http:\/\/www.verificationguild.com\/modules.php?name=Forums&amp;file=viewtopic&amp;t=1930\" target=\"_blank\" rel=\"noopener\">Un-typed mailboxes<\/a><\/li>\n<li class=\"MsoNormal\">Dynamic array copy A = new[]B redundant with A = B<\/li>\n<li class=\"MsoNormal\">always @(*) \u2013 superseded by always_comb<\/li>\n<li>$random\/$dist_uniform replaced by $urandom\/$urandom_range for better stability and seed control<\/li>\n<li>Stochastic $q_ tasks replaced with queue array type<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>At a recent SystemVerilog requirements gathering meeting,I was quite amused to see \u201cdeprecating features\u201d come out as one of the&#8230;<\/p>\n","protected":false},"author":71589,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spanish_translation":"","french_translation":"","german_translation":"","italian_translation":"","polish_translation":"","japanese_translation":"","chinese_translation":"","footnotes":""},"categories":[1],"tags":[533,732,751],"industry":[],"product":[],"coauthors":[],"class_list":["post-938","post","type-post","status-publish","format-standard","hentry","category-news","tag-ieee-1800","tag-standards","tag-systemverilog"],"_links":{"self":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/938","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/users\/71589"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/comments?post=938"}],"version-history":[{"count":3,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/938\/revisions"}],"predecessor-version":[{"id":14687,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/posts\/938\/revisions\/14687"}],"wp:attachment":[{"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/media?parent=938"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/categories?post=938"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/tags?post=938"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/industry?post=938"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/product?post=938"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blogs.sw.siemens.com\/verificationhorizons\/wp-json\/wp\/v2\/coauthors?post=938"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}