"Fossies" - the Fresh Open Source Software Archive

Member "dmd2/html/d/changelog/2.092.0.html" (20 Nov 2020, 65478 Bytes) of package /linux/misc/dmd.2.094.2.linux.tar.xz:


The requested HTML page contains a <FORM> tag that is unusable on "Fossies" in "automatic" (rendered) mode so that page is shown as HTML source code syntax highlighting (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 
    2 <!DOCTYPE html>
    3 <html lang="en-US">
    4 <!--
    5     Copyright (c) 1999-2020 by the D Language Foundation
    6     All Rights Reserved.
    7     https://dlang.org/foundation_overview.html
    8   -->
    9 <head>
   10 <meta charset="utf-8">
   11 <meta name="keywords" content="D programming language">
   12 <meta name="description" content="D Programming Language">
   13 <title>Change Log: 2.092.0 - D Programming Language</title>
   14 
   15 <link rel="stylesheet" href="../css/codemirror.css">
   16 <link rel="stylesheet" href="../css/style.css">
   17 <link rel="stylesheet" href="../css/print.css" media="print">
   18 <link rel="shortcut icon" href="../favicon.ico">
   19 <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.1, maximum-scale=10.0">
   20 
   21 </head>
   22 <body id='Change Log: 2.092.0' class='changelog'>
   23 <script type="text/javascript">document.body.className += ' have-javascript'</script>
   24 <div id="top"><div class="helper"><div class="helper expand-container">    <div class="logo"><a href=".."><img id="logo" alt="D Logo" src="../images/dlogo.svg"></a></div>
   25     <a href="../menu.html" title="Menu" class="hamburger expand-toggle"><span>Menu</span></a>
   26     
   27 <div id="cssmenu"><ul>    <li><a href='https://tour.dlang.org'><span>Learn</span></a></li>
   28     <li class='expand-container'><a class='expand-toggle' href='../documentation.html'><span>Documentation</span></a>
   29       
   30 <ul class='expand-content'>    <li><a href='../spec/spec.html'>Language Reference</a></li>
   31     <li><a href='../phobos/index.html'>Library Reference</a></li>
   32     <li><a href='../dmd.html'>Command-line Reference</a></li>
   33     <li class="menu-divider"><a href='../comparison.html'>Feature Overview</a></li>
   34     <li><a href='../articles.html'>Articles</a></li>
   35  </ul></li>
   36     <li><a href='../download.html'><span>Downloads</span></a></li>
   37     <li><a href='https://code.dlang.org'><span>Packages</span></a></li>
   38     <li class='expand-container'><a class='expand-toggle' href='../community.html'><span>Community</span></a>
   39       
   40 <ul class='expand-content'>    <li><a href='https://dlang.org/blog'>Blog</a></li>
   41     <li><a href='../orgs-using-d.html'>Orgs using D</a></li>
   42     <li><a href='https://twitter.com/search?q=%23dlang'>Twitter</a></li>
   43     <li><a href='../calendar.html'>Calendar</a></li>
   44     <li class="menu-divider"><a href='https://forum.dlang.org'>Forums</a></li>
   45     <li><a href='irc://irc.freenode.net/d'>IRC</a></li>
   46     <li><a href='https://discord.gg/bMZk9Q4'>Community Discord</a></li>
   47     <li><a href='https://wiki.dlang.org'>Wiki</a></li>
   48     <li class="menu-divider"><a href='https://github.com/dlang'>GitHub</a></li>
   49     <li><a href='../bugstats.html'>Issues</a></li>
   50     <li><a href='https://wiki.dlang.org/Get_involved'>Get involved</a></li>
   51     <li class="menu-divider"><a href='../foundation/contributors.html'>Contributors</a></li>
   52     <li><a href='../foundation/index.html'>Foundation</a></li>
   53     <li><a href='..//security.html'>Security Team</a></li>
   54     <li><a href='../foundation/donate.html'>Donate</a></li>
   55     <li><a href='../foundation/sponsors.html'>Sponsors</a></li>
   56  </ul></li>
   57     <li class='expand-container'><a class='expand-toggle' href='../resources.html'><span>Resources</span></a>
   58       
   59 <ul class='expand-content'>    <li><a href='https://tour.dlang.org'>Tour</a></li>
   60     <li><a href='https://wiki.dlang.org/Books'>Books</a></li>
   61     <li><a href='https://wiki.dlang.org/Tutorials'>Tutorials</a></li>
   62     <li class="menu-divider"><a href='https://wiki.dlang.org/Development_tools'>Tools</a></li>
   63     <li><a href='https://wiki.dlang.org/Editors'>Editors</a></li>
   64     <li><a href='https://wiki.dlang.org/IDEs'>IDEs</a></li>
   65     <li><a href='https://run.dlang.io'>run.dlang.io</a></li>
   66     <li><a href='http://rainers.github.io/visuald/visuald/StartPage.html'>Visual D</a></li>
   67     <li class="menu-divider"><a href='../acknowledgements.html'>Acknowledgments</a></li>
   68     <li><a href='../dstyle.html'>D Style</a></li>
   69     <li><a href='../glossary.html'>Glossary</a></li>
   70     <li><a href='../sitemap.html'>Sitemap</a></li>
   71  </ul></li>
   72 </ul></div>
   73     <div class="search-container expand-container">        <a href="../search.html" class="expand-toggle" title="Search"><span>Search</span></a>
   74         
   75     <div id="search-box">        <form method="get" action="https://google.com/search">
   76             <input type="hidden" id="domains" name="domains" value="dlang.org">
   77             <input type="hidden" id="sourceid" name="sourceid" value="google-search">
   78             <span id="search-query"><input id="q" name="q" placeholder="Search"></span><span id="search-dropdown"><span class="helper">                <select id="sitesearch" name="sitesearch" size="1">
   79                     <option value="dlang.org">Entire Site</option>
   80                     <option  value="dlang.org/spec">Language</option>
   81                     <option  value="dlang.org/phobos">Library</option>
   82                     <option  value="forum.dlang.org">Forums</option>
   83                     <option value="dlang.org/changelog" selected>Change
   84 Log</option>
   85                 </select>
   86             </span></span><span id="search-submit"><button type="submit"><i class="fa fa-search"></i><span>go</span></button></span>
   87         </form>
   88     </div>
   89     </div>
   90 </div></div></div>
   91 
   92 <div class="container">    <div class="subnav-helper"></div> <div class="subnav">    
   93     <div class="head">        <h2>Change Log</h2>
   94         <p>        <a href="../changelog/index.html">List of all versions</a>
   95         <br>
   96         <a href="../changelog/release-schedule.html">Release schedule</a>
   97     </p>
   98     </div>
   99     <ul><li><a id="pending" href="pending.html">Nightly</a> <span class="hide-from-nav"> (preview) - upcoming changes from <span class="d_inlinecode donthyphenate notranslate">master</span></span></li>
  100 <li><a id="2.094.2" href="2.094.2.html">2.094.2</a><span class="hide-from-nav"> (Nov 20, 2020)</span></li>
  101 <li><a id="2.094.1" href="2.094.1.html">2.094.1</a><span class="hide-from-nav"> (Oct 18, 2020)</span></li>
  102 <li><a id="2.094.0" href="2.094.0.html">2.094.0</a><span class="hide-from-nav"> (Sep 22, 2020)</span></li>
  103 <li><a id="2.093.1" href="2.093.1.html">2.093.1</a><span class="hide-from-nav"> (Aug 15, 2020)</span></li>
  104 <li><a id="2.093.0" href="2.093.0.html">2.093.0</a><span class="hide-from-nav"> (Jul 07, 2020)</span></li>
  105 <li><a id="2.092.1" href="2.092.1.html">2.092.1</a><span class="hide-from-nav"> (Jun 10, 2020)</span></li>
  106 <li><a id="2.092.0" href="2.092.0.html">2.092.0</a><span class="hide-from-nav"> (May 10, 2020)</span></li>
  107 <li><a id="2.091.1" href="2.091.1.html">2.091.1</a><span class="hide-from-nav"> (Apr 17, 2020)</span></li>
  108 <li><a id="2.091.0" href="2.091.0.html">2.091.0</a><span class="hide-from-nav"> (Mar 08, 2020)</span></li>
  109 <li><a id="2.090.1" href="2.090.1.html">2.090.1</a><span class="hide-from-nav"> (Feb 06, 2020)</span></li>
  110 <li><a id="2.090.0" href="2.090.0.html">2.090.0</a><span class="hide-from-nav"> (Jan 05, 2020)</span></li>
  111 <li><a id="2.089.1" href="2.089.1.html">2.089.1</a><span class="hide-from-nav"> (Dec 14, 2019)</span></li>
  112 <li><a id="2.089.0" href="2.089.0.html">2.089.0</a><span class="hide-from-nav"> (Nov 02, 2019)</span></li>
  113 <li><a id="2.088.1" href="2.088.1.html">2.088.1</a><span class="hide-from-nav"> (Oct 11, 2019)</span></li>
  114 <li><a id="2.088.0" href="2.088.0.html">2.088.0</a><span class="hide-from-nav"> (Sep 01, 2019)</span></li>
  115 <li><a id="2.087.1" href="2.087.1.html">2.087.1</a><span class="hide-from-nav"> (Aug 04, 2019)</span></li>
  116 <li><a id="2.087.0" href="2.087.0.html">2.087.0</a><span class="hide-from-nav"> (Jul 01, 2019)</span></li>
  117 <li><a id="2.086.1" href="2.086.1.html">2.086.1</a><span class="hide-from-nav"> (Jun 15, 2019)</span></li>
  118 <li><a id="2.086.0" href="2.086.0.html">2.086.0</a><span class="hide-from-nav"> (May 04, 2019)</span></li>
  119 <li><a id="2.085.1" href="2.085.1.html">2.085.1</a><span class="hide-from-nav"> (Apr 05, 2019)</span></li>
  120 <li><a id="2.085.0" href="2.085.0.html">2.085.0</a><span class="hide-from-nav"> (Mar 01, 2019)</span></li>
  121 <li><a id="2.084.1" href="2.084.1.html">2.084.1</a><span class="hide-from-nav"> (Feb 09, 2019)</span></li>
  122 <li><a id="2.084.0" href="2.084.0.html">2.084.0</a><span class="hide-from-nav"> (Jan 01, 2019)</span></li>
  123 <li><a id="2.083.1" href="2.083.1.html">2.083.1</a><span class="hide-from-nav"> (Dec 08, 2018)</span></li>
  124 <li><a id="2.083.0" href="2.083.0.html">2.083.0</a><span class="hide-from-nav"> (Nov 01, 2018)</span></li>
  125 <li><a id="2.082.1" href="2.082.1.html">2.082.1</a><span class="hide-from-nav"> (Oct 10, 2018)</span></li>
  126 <li><a id="2.082.0" href="2.082.0.html">2.082.0</a><span class="hide-from-nav"> (Sep 01, 2018)</span></li>
  127 <li><a id="2.081.2" href="2.081.2.html">2.081.2</a><span class="hide-from-nav"> (Aug 12, 2018)</span></li>
  128 <li><a id="2.081.1" href="2.081.1.html">2.081.1</a><span class="hide-from-nav"> (Jul 10, 2018)</span></li>
  129 <li><a id="2.081.0" href="2.081.0.html">2.081.0</a><span class="hide-from-nav"> (Jul 01, 2018)</span></li>
  130 <li><a id="2.080.1" href="2.080.1.html">2.080.1</a><span class="hide-from-nav"> (Jun 07, 2018)</span></li>
  131 <li><a id="2.080.0" href="2.080.0.html">2.080.0</a><span class="hide-from-nav"> (May 01, 2018)</span></li>
  132 <li><a id="2.079.1" href="2.079.1.html">2.079.1</a><span class="hide-from-nav"> (Apr 14, 2018)</span></li>
  133 <li><a id="2.079.0" href="2.079.0.html">2.079.0</a><span class="hide-from-nav"> (Mar 01, 2018)</span></li>
  134 <li><a id="2.078.3" href="2.078.3.html">2.078.3</a><span class="hide-from-nav"> (Feb 15, 2018)</span></li>
  135 <li><a id="2.078.2" href="2.078.2.html">2.078.2</a><span class="hide-from-nav"> (Feb 07, 2018)</span></li>
  136 <li><a id="2.078.1" href="2.078.1.html">2.078.1</a><span class="hide-from-nav"> (Jan 21, 2018)</span></li>
  137 <li><a id="2.078.0" href="2.078.0.html">2.078.0</a><span class="hide-from-nav"> (Jan 01, 2018)</span></li>
  138 <li><a id="2.077.1" href="2.077.1.html">2.077.1</a><span class="hide-from-nav"> (Nov 29, 2017)</span></li>
  139 <li><a id="2.077.0" href="2.077.0.html">2.077.0</a><span class="hide-from-nav"> (Nov 1, 2017)</span></li>
  140 <li><a id="2.076.1" href="2.076.1.html">2.076.1</a><span class="hide-from-nav"> (Oct 09, 2017)</span></li>
  141 <li><a id="2.076.0" href="2.076.0.html">2.076.0</a><span class="hide-from-nav"> (Sep 1, 2017)</span></li>
  142 <li><a id="2.075.1" href="2.075.1.html">2.075.1</a><span class="hide-from-nav"> (Aug 11, 2017)</span></li>
  143 <li><a id="2.075.0" href="2.075.0.html">2.075.0</a><span class="hide-from-nav"> (Jul 19, 2017)</span></li>
  144 <li><a id="2.074.1" href="2.074.1.html">2.074.1</a><span class="hide-from-nav"> (May 30, 2017)</span></li>
  145 <li><a id="2.074.0" href="2.074.0.html">2.074.0</a><span class="hide-from-nav"> (Apr 10, 2017)</span></li>
  146 <li><a id="2.073.2" href="2.073.2.html">2.073.2</a><span class="hide-from-nav"> (Mar 09, 2017)</span></li>
  147 <li><a id="2.073.1" href="2.073.1.html">2.073.1</a><span class="hide-from-nav"> (Feb 16, 2017)</span></li>
  148 <li><a id="2.073.0" href="2.073.0.html">2.073.0</a><span class="hide-from-nav"> (Jan 22, 2017)</span></li>
  149 <li><a id="2.072.2" href="2.072.2.html">2.072.2</a><span class="hide-from-nav"> (Dec 31, 2016)</span></li>
  150 <li><a id="2.072.1" href="2.072.1.html">2.072.1</a><span class="hide-from-nav"> (Nov 30, 2016)</span></li>
  151 <li><a id="2.072.0" href="2.072.0.html">2.072.0</a><span class="hide-from-nav"> (Oct 30, 2016)</span></li>
  152 <li><a id="2.071.2" href="2.071.2.html">2.071.2</a><span class="hide-from-nav"> (September 19, 2016)</span></li>
  153 <li><a id="2.071.1" href="2.071.1.html">2.071.1</a><span class="hide-from-nav"> (June 27, 2016)</span></li>
  154 <li><a id="2.071.0" href="2.071.0.html">2.071.0</a><span class="hide-from-nav"> (Apr 5, 2016)</span></li>
  155 <li><a id="2.070.2" href="2.070.2.html">2.070.2</a><span class="hide-from-nav"> (Mar 3, 2016)</span></li>
  156 <li><a id="2.070.1" href="2.070.1.html">2.070.1</a><span class="hide-from-nav"> (Feb 27, 2016)</span></li>
  157 <li><a id="2.070.0" href="2.070.0.html">2.070.0</a><span class="hide-from-nav"> (Jan 27, 2016)</span></li>
  158 <li><a id="2.069.2" href="2.069.2.html">2.069.2</a><span class="hide-from-nav"> (Dec 3, 2015)</span></li>
  159 <li><a id="2.069.1" href="2.069.1.html">2.069.1</a><span class="hide-from-nav"> (Nov 11, 2015)</span></li>
  160 <li><a id="2.069.0" href="2.069.0.html">2.069.0</a><span class="hide-from-nav"> (Nov 3, 2015)</span></li>
  161 <li><a id="2.068.2" href="2.068.2.html">2.068.2</a><span class="hide-from-nav"> (Sep 23, 2015)</span></li>
  162 <li><a id="2.068.1" href="2.068.1.html">2.068.1</a><span class="hide-from-nav"> (Sep 06, 2015)</span></li>
  163 <li><a id="2.068.0" href="2.068.0.html">2.068.0</a><span class="hide-from-nav"> (Aug 09, 2015)</span></li>
  164 <li><a id="2.067.1" href="2.067.1.html">2.067.1</a><span class="hide-from-nav"> (Apr 25, 2015)</span></li>
  165 <li><a id="2.067.0" href="2.067.0.html">2.067.0</a><span class="hide-from-nav"> (Mar 24, 2015)</span></li>
  166 <li><a id="2.066.1" href="2.066.1.html">2.066.1</a><span class="hide-from-nav"> (October 15, 2014)</span></li>
  167 <li><a id="2.066.0" href="2.066.0.html">2.066.0</a><span class="hide-from-nav"> (August 18, 2014)</span></li>
  168 <li><a id="2.065.0" href="2.065.0.html">2.065.0</a><span class="hide-from-nav"> (February 24, 2014)</span></li>
  169 <li><a id="2.064" href="2.064.html">2.064</a><span class="hide-from-nav"> (November 5, 2013)</span></li>
  170 <li><a id="2.063" href="2.063.html">2.063</a><span class="hide-from-nav"> (May 28, 2013)</span></li>
  171 <li><a id="2.062" href="2.062.html">2.062</a><span class="hide-from-nav"> (Feb 18, 2013)</span></li>
  172 <li><a id="2.061" href="2.061.html">2.061</a><span class="hide-from-nav"> (Jan 1, 2013)</span></li>
  173 <li><a id="2.060" href="2.060.html">2.060</a><span class="hide-from-nav"> (Aug 2, 2012)</span></li>
  174 <li><a id="2.059" href="2.059.html">2.059</a><span class="hide-from-nav"> (Apr 12, 2012)</span></li>
  175 <li><a id="2.058" href="2.058.html">2.058</a><span class="hide-from-nav"> (Feb 14, 2012)</span></li>
  176 <li><a id="2.057" href="2.057.html">2.057</a><span class="hide-from-nav"> (Dec 13, 2011)</span></li>
  177 <li><a id="2.056" href="2.056.html">2.056</a><span class="hide-from-nav"> (Oct 26, 2011)</span></li>
  178 <li><a id="2.055" href="2.055.html">2.055</a><span class="hide-from-nav"> (Sep 4, 2011)</span></li>
  179 <li><a id="2.054" href="2.054.html">2.054</a><span class="hide-from-nav"> (Jul 10, 2011)</span></li>
  180 <li><a id="2.053" href="2.053.html">2.053</a><span class="hide-from-nav"> (May 12, 2011)</span></li>
  181 <li><a id="2.052" href="2.052.html">2.052</a><span class="hide-from-nav"> (Feb 17, 2011)</span></li>
  182 <li><a id="2.051" href="2.051.html">2.051</a><span class="hide-from-nav"> (Dec 21, 2010)</span></li>
  183 <li><a id="2.050" href="2.050.html">2.050</a><span class="hide-from-nav"> (Oct 29, 2010)</span></li>
  184 <li><a id="2.049" href="2.049.html">2.049</a><span class="hide-from-nav"> (Sep 13, 2010)</span></li>
  185 <li><a id="2.048" href="2.048.html">2.048</a><span class="hide-from-nav"> (Aug 8, 2010)</span></li>
  186 <li><a id="2.047" href="2.047.html">2.047</a><span class="hide-from-nav"> (Jun 11, 2010)</span></li>
  187 <li><a id="2.046" href="2.046.html">2.046</a><span class="hide-from-nav"> (May 10, 2010)</span></li>
  188 <li><a id="2.045" href="2.045.html">2.045</a><span class="hide-from-nav"> (May 4, 2010)</span></li>
  189 <li><a id="2.044" href="2.044.html">2.044</a><span class="hide-from-nav"> (Apr 30, 2010)</span></li>
  190 <li><a id="2.043" href="2.043.html">2.043</a><span class="hide-from-nav"> (Apr 6, 2010)</span></li>
  191 <li><a id="2.042" href="2.042.html">2.042</a><span class="hide-from-nav"> (Mar 19, 2010)</span></li>
  192 <li><a id="2.041" href="2.041.html">2.041</a><span class="hide-from-nav"> (Mar 7, 2010)</span></li>
  193 <li><a id="2.040" href="2.040.html">2.040</a><span class="hide-from-nav"> (Jan 29, 2010)</span></li>
  194 <li><a id="2.039" href="2.039.html">2.039</a><span class="hide-from-nav"> (Jan 1, 2010)</span></li>
  195 <li><a id="2.038" href="2.038.html">2.038</a><span class="hide-from-nav"> (Dec 30, 2009)</span></li>
  196 <li><a id="2.037" href="2.037.html">2.037</a><span class="hide-from-nav"> (Dec 3, 2009)</span></li>
  197 <li><a id="2.036" href="2.036.html">2.036</a><span class="hide-from-nav"> (Nov 5, 2009)</span></li>
  198 <li><a id="2.035" href="2.035.html">2.035</a><span class="hide-from-nav"> (Oct 14, 2009)</span></li>
  199 <li><a id="2.034" href="2.034.html">2.034</a><span class="hide-from-nav"> (Oct 11, 2009)</span></li>
  200 <li><a id="2.033" href="2.033.html">2.033</a><span class="hide-from-nav"> (Oct 5, 2009)</span></li>
  201 <li><a id="2.032" href="2.032.html">2.032</a><span class="hide-from-nav"> (Sep 2, 2009)</span></li>
  202 <li><a id="2.031" href="2.031.html">2.031</a><span class="hide-from-nav"> (July 6, 2009)</span></li>
  203 <li><a id="2.030" href="2.030.html">2.030</a><span class="hide-from-nav"> (May 11, 2009)</span></li>
  204 <li><a id="2.029" href="2.029.html">2.029</a><span class="hide-from-nav"> (Apr 19, 2009)</span></li>
  205 <li><a id="2.028" href="2.028.html">2.028</a><span class="hide-from-nav"> (Apr 7, 2009)</span></li>
  206 <li><a id="2.027" href="2.027.html">2.027</a><span class="hide-from-nav"> (Mar 31, 2009)</span></li>
  207 <li><a id="2.026" href="2.026.html">2.026</a><span class="hide-from-nav"> (Mar 3, 2009)</span></li>
  208 <li><a id="2.025" href="2.025.html">2.025</a><span class="hide-from-nav"> (Feb 14, 2009)</span></li>
  209 <li><a id="2.023" href="2.023.html">2.023</a><span class="hide-from-nav"> (Jan 2, 2009)</span></li>
  210 <li><a id="2.022" href="2.022.html">2.022</a><span class="hide-from-nav"> (Dec 11, 2008)</span></li>
  211 <li><a id="2.021" href="2.021.html">2.021</a><span class="hide-from-nav"> (Nov 25, 2008)</span></li>
  212 <li><a id="2.020" href="2.020.html">2.020</a><span class="hide-from-nav"> (Oct 20, 2008)</span></li>
  213 <li><a id="2.019" href="2.019.html">2.019</a><span class="hide-from-nav"> (Sep 2, 2008)</span></li>
  214 <li><a id="2.018" href="2.018.html">2.018</a><span class="hide-from-nav"> (Aug 7, 2008)</span></li>
  215 <li><a id="2.017" href="2.017.html">2.017</a><span class="hide-from-nav"> (Jul 11, 2008)</span></li>
  216 <li><a id="2.016" href="2.016.html">2.016</a><span class="hide-from-nav"> (Jul 8, 2008)</span></li>
  217 <li><a id="2.015" href="2.015.html">2.015</a><span class="hide-from-nav"> (Jun 17, 2008)</span></li>
  218 <li><a id="2.014" href="2.014.html">2.014</a><span class="hide-from-nav"> (May 16, 2008)</span></li>
  219 <li><a id="2.013" href="2.013.html">2.013</a><span class="hide-from-nav"> (Apr 22, 2008)</span></li>
  220 <li><a id="2.012" href="2.012.html">2.012</a><span class="hide-from-nav"> (Mar 6, 2008)</span></li>
  221 <li><a id="2.011" href="2.011.html">2.011</a><span class="hide-from-nav"> (Feb 18, 2008)</span></li>
  222 <li><a id="2.010" href="2.010.html">2.010</a><span class="hide-from-nav"> (Jan 20, 2008)</span></li>
  223 <li><a id="2.009" href="2.009.html">2.009</a><span class="hide-from-nav"> (Jan 1, 2008)</span></li>
  224 <li><a id="2.008" href="2.008.html">2.008</a><span class="hide-from-nav"> (Nov 27, 2007)</span></li>
  225 <li><a id="2.007" href="2.007.html">2.007</a><span class="hide-from-nav"> (Oct 31, 2007)</span></li>
  226 <li><a id="2.006" href="2.006.html">2.006</a><span class="hide-from-nav"> (Oct 16, 2007)</span></li>
  227 <li><a id="2.005" href="2.005.html">2.005</a><span class="hide-from-nav"> (Oct 1, 2007)</span></li>
  228 <li><a id="2.004" href="2.004.html">2.004</a><span class="hide-from-nav"> (Sep 5, 2007)</span></li>
  229 <li><a id="2.003" href="2.003.html">2.003</a><span class="hide-from-nav"> (Jul 21, 2007)</span></li>
  230 <li><a id="2.002" href="2.002.html">2.002</a><span class="hide-from-nav"> (Jul 1, 2007)</span></li>
  231 <li><a id="2.001" href="2.001.html">2.001</a><span class="hide-from-nav"> (Jun 27, 2007)</span></li>
  232 <li><a id="2.000" href="2.000.html">2.000</a><span class="hide-from-nav"> (Jun 17, 2007)</span></li></ul>
  233 </div>
  234     <div class="hyphenate" id="content">        
  235 <div id="tools"><div >  <div class="tip smallprint">        <a href="https://issues.dlang.org/enter_bug.cgi?bug_file_loc=http%3A%2F%2Fdlang.org/&amp;component=dlang.org&amp;op_sys=All&amp;priority=P3&amp;product=D&amp;rep_platform=All&amp;short_desc=%5BChange Log: 2.092.0%5D&amp;version=D2&amp;bug_severity=enhancement">Report a bug</a>
  236         <div >          If you spot a problem with this page, click here to create a Bugzilla issue.
  237         </div>
  238     </div>
  239     <div class="tip smallprint">        <a href="https://github.com/dlang/dlang.org/edit/master/changelog/2.092.0.dd">Improve this page</a>
  240         <div >          Quickly fork, edit online, and submit a pull request for this page.
  241             Requires a signed-in GitHub account. This works well for small changes.
  242             If you'd like to make larger changes you may want to consider using
  243             a local clone.
  244         </div>
  245     </div>
  246 </div></div>
  247         <h1>Change Log: 2.092.0</h1>
  248         
  249         
  250 
  251 
  252 <div class="changelog-nav">previous version: <a href="2.091.1.html">2.091.1</a>
  253 &ndash; next version: <a href="2.092.1.html">2.092.1</a></div>
  254 
  255 
  256 <div class="version"><p><b><font size="4"><a href="http://downloads.dlang.org/releases/2.x/2.092.0">Download D 2.092.0</a></font></b><br>
  257 <small>released May 10, 2020</small>
  258 </p>
  259 
  260 <div class="changelog-header-stats">2.092.0 comes with 15 major changes and 44 fixed Bugzilla issues.
  261         A huge thanks goes to the
  262         <a href="#contributors">47 contributors</a>
  263         who made 2.092.0 possible.</div>
  264 
  265 <div class="bugsfixed"><h4>Compiler changes</h4> <ol>
  266 <li><a href="#bug10478-cli-switches">CLI switches <span class="d_inlinecode donthyphenate notranslate">-revert=import</span> and <span class="d_inlinecode donthyphenate notranslate">-transition=checkimports</span> have been removed</a></li>
  267 <li><a href="#cpp_abi_tags">Added support for mangling C++'s GNU ABI tags</a></li>
  268 <li><a href="#dep-non-externd-modulectordtors">Module constructors and destructors which are not extern(D) are deprecated</a></li>
  269 <li><a href="#dip25">DIP25 violations will now issue deprecations by default</a></li>
  270 <li><a href="#ob">Prototype Ownership/Borrowing System for Pointers</a></li>
  271 <li><a href="#preview-in">Added <span class="d_inlinecode donthyphenate notranslate">-preview=in</span> to make the <span class="d_inlinecode donthyphenate notranslate">in</span> storage class mean <span class="d_inlinecode donthyphenate notranslate">scope const</span>.</a></li>
  272 <li><a href="#printfParams2">Validate printf and scanf (variants too) arguments against format specifiers</a></li>
  273 <li><a href="#reproducible-builds">Environment variable <span class="d_inlinecode donthyphenate notranslate">SOURCE_DATE_EPOCH</span> is now supported</a></li>
  274 
  275  </ol></div>
  276 
  277 <div class="bugsfixed"><h4>Runtime changes</h4> <ol>
  278 <li><a href="#isbaseof">Added TypeInfo_Class/TypeInfo_Interface.isBaseOf that works like C#/Java isAssignableFrom.</a></li>
  279 <li><a href="#page_size">Add <span class="d_inlinecode donthyphenate notranslate">core.memory.pageSize</span> and <span class="d_inlinecode donthyphenate notranslate">minimumPageSize</span>.</a></li>
  280 
  281  </ol></div>
  282 
  283 <div class="bugsfixed"><h4>Library changes</h4> <ol>
  284 <li><a href="#date-isoweek">Add <span class="d_inlinecode donthyphenate notranslate">Date.isoWeekYear</span> and <span class="d_inlinecode donthyphenate notranslate">Date.fromISOWeek</span> in <span class="d_inlinecode donthyphenate notranslate">std.datetime.date</span></a></li>
  285 <li><a href="#deprecate-xml">Deprecated module <span class="d_inlinecode donthyphenate notranslate">std.xml</span></a></li>
  286 <li><a href="#digest">The deprecated aliases in std.digest.digest were removed</a></li>
  287 
  288  </ol></div>
  289 
  290 <div class="bugsfixed"><h4>Dub changes</h4> <ol>
  291 <li><a href="#ignoreHiddenDirectories">Hidden directories are now ignored.</a></li>
  292 <li><a href="#lintReportFile">Dub lint now supports --report-file argument.</a></li>
  293 
  294  </ol></div>
  295 
  296 <br><em class="big"><a href="#bugfix-list">List of all bug fixes and enhancements in D 2.092.0.</a></em>
  297 
  298 <hr>
  299 
  300 <div class="bugsfixed"><h4>Compiler changes</h4> <ol>
  301 <li><a class="anchor" title="Permalink to this section" id="bug10478-cli-switches" href="#bug10478-cli-switches">CLI switches <span class="d_inlinecode donthyphenate notranslate">-revert=import</span> and <span class="d_inlinecode donthyphenate notranslate">-transition=checkimports</span> have been removed</a>
  302 
  303 <p>Those switched were already not doing anything and had been deprecated for a while.
  304 The compiler will no longer recognized them.
  305 </p>
  306 </li>
  307 
  308 <li><a class="anchor" title="Permalink to this section" id="cpp_abi_tags" href="#cpp_abi_tags">Added support for mangling C++'s GNU ABI tags</a>
  309 
  310 <p>GNU ABI tags are a feature that was added with C++11 in <a href="https://gcc.gnu.org/gcc-5/changes.html#libstdcxx">GCC 5.1</a>.
  311 In order for D to fully support the <a href="http://www.cplusplus.com/reference/">standard C++ library</a>,
  312 DMD now recognize the special UDA <span class="d_inlinecode donthyphenate notranslate">gnuAbiTag</span>, declared in <span class="d_inlinecode donthyphenate notranslate">core.attribute</span> and publicly aliased in <span class="d_inlinecode donthyphenate notranslate">object</span>
  313 (so one need not import anything to use it).
  314 The ABI tags are a low level feature that most user will not need to interact with,
  315 but can be used to bind to C++ libraries that need it.
  316 In particular, it is required to bind <a href="http://www.cplusplus.com/reference/string/"><span class="d_inlinecode donthyphenate notranslate">std::string</span></a>
  317 when targeting C++11 and higher (DMD switch <span class="d_inlinecode donthyphenate notranslate">-extern-std={c++11,c++14,c++17}</span>).
  318 </p>
  319 
  320 <p>It can be used in the following way:
  321 </p>
  322 <pre class="d_code notranslate"><span class="d_keyword">extern</span>(C++):
  323 @gnuAbiTag(<span class="d_string">"tagOnStruct"</span>)
  324 <span class="d_keyword">struct</span> MyStruct {}
  325 @gnuAbiTag(<span class="d_string">"Multiple"</span>, <span class="d_string">"Tags"</span>, <span class="d_string">"On"</span>, <span class="d_string">"Function"</span>)
  326 MyStruct func();
  327 </pre>
  328 
  329 <p>Only one <span class="d_inlinecode donthyphenate notranslate">gnuAbiTag</span> can be present on a symbol at a time.
  330 The order of the array entries does not matter (they are sorted on output).
  331 The UDA will only have an effect if <span class="d_inlinecode donthyphenate notranslate">-extern-std=c++11</span> or higher is passed
  332 to the compiler. The default (<span class="d_inlinecode donthyphenate notranslate">-extern-std=c++98</span>) will ignore the UDA.
  333 This UDA can only be applied to <span class="d_inlinecode donthyphenate notranslate">extern(C++)</span> symbols and cannot be applied to namespaces.
  334 </p>
  335 </li>
  336 
  337 <li><a class="anchor" title="Permalink to this section" id="dep-non-externd-modulectordtors" href="#dep-non-externd-modulectordtors">Module constructors and destructors which are not extern(D) are deprecated</a>
  338 
  339 <p>Module constructors and destructors (shared or not) could be marked with
  340 a different linkage than <span class="d_inlinecode donthyphenate notranslate">extern(D)</span>, which would affect their mangling.
  341 Since such a mangling is simple and predictable, there was a very small
  342 chance of conflict if two same kind of constructor/destructors
  343 were declared in similar condition, for example if the third
  344 module constructor in module <span class="d_inlinecode donthyphenate notranslate">a</span> was on line 479 and the third
  345 module constructor in module <span class="d_inlinecode donthyphenate notranslate">b</span> was also on line 479,
  346 they would have the same mangling.
  347 </p>
  348 
  349 <p>While it's unlikely that such a bug is triggered in practice,
  350 affected symbols will now trigger a deprecation message.
  351 </p>
  352 </li>
  353 
  354 <li><a class="anchor" title="Permalink to this section" id="dip25" href="#dip25">DIP25 violations will now issue deprecations by default</a>
  355 
  356 <p>DIP25 has been available since <a href="https://dlang.org/changelog/2.067.0.html#sealed-references">v2.067.0</a>,
  357 first as its own switch, and more recently under the <span class="d_inlinecode donthyphenate notranslate">-preview=dip25</span> switch.
  358 The feature is now fully functional and has been built on, for example by DIP1000.
  359 </p>
  360 
  361 <p>Starting from this release, code that would trigger errors when <span class="d_inlinecode donthyphenate notranslate">-preview=dip25</span> is passed to the compiler
  362 will also trigger a deprecation message without <span class="d_inlinecode donthyphenate notranslate">-preview=dip25</span>.
  363 The behavior of the switch is unchanged (errors will still be issued).
  364 </p>
  365 
  366 <p>DIP25 aims to make it impossible for <span class="d_inlinecode donthyphenate notranslate">@safe</span> code to refer to destructed object.
  367 In practice, functions and methods returning a <span class="d_inlinecode donthyphenate notranslate">ref</span> to their parameter might
  368 be required to qualify the method or the parameter as <span class="d_inlinecode donthyphenate notranslate">return</span>, as hinted by the compiler.
  369 </p>
  370 <pre class="d_code notranslate"><span class="d_keyword">struct</span> Foo
  371 {
  372     <span class="d_keyword">int</span> x;
  373     <span class="d_comment">// returning `this.x` escapes a reference to parameter `this`, perhaps annotate with `return`
  374 </span>    <span class="d_keyword">ref</span> <span class="d_keyword">int</span> method() <span class="d_comment">/* return */</span> { <span class="d_keyword">return</span> <span class="d_keyword">this</span>.x; }
  375 }
  376 <span class="d_comment">// returning `v` escapes a reference to parameter `v`, perhaps annotate with `return`
  377 </span><span class="d_keyword">ref</span> <span class="d_keyword">int</span> identity(<span class="d_comment">/* return */</span> <span class="d_keyword">ref</span> <span class="d_keyword">int</span> v) { <span class="d_keyword">return</span> v; }
  378 </pre>
  379 <p>In both cases, uncommenting the <span class="d_inlinecode donthyphenate notranslate">return</span> annotation will appease the compiler.
  380 The complete description of DIP25 can be found <a href="https://wiki.dlang.org/DIP25">here</a>.
  381 </p>
  382 </li>
  383 
  384 <li><a class="anchor" title="Permalink to this section" id="ob" href="#ob">Prototype Ownership/Borrowing System for Pointers</a>
  385 
  386 <p>An Ownership/Borrowing (aka OB) system for pointers can guarantee that
  387 dereferenced pointers are pointing to a valid memory object.
  388 </p>
  389 
  390 
  391 <p><h3>Scope of Prototype OB System</h3>
  392 </p>
  393 
  394 <p>This is a prototype OB system adapted to D. It is initially for pointers
  395 only, not dynamic arrays, class references, refs, or pointer fields
  396 of aggregates. Adding support for such adds complexity,
  397 but does not change the nature of it, hence it is deferred to later.
  398 RAII objects can safely manage their own memory, so are not covered
  399 by OB. Whether a pointer is allocates memory using the GC or some other
  400 storage allocator is immaterial to OB, they are not distinguished and are
  401 handled identically.
  402 </p>
  403 
  404 <p>The system is only active in functions annotated with the <span class="d_inlinecode donthyphenate notranslate">@live</span> attribute.
  405 It is applied after semantic processing is done as purely a check
  406 for violations of the OB rules. No new syntax is added. No change is made
  407 to the code generated.
  408 If <span class="d_inlinecode donthyphenate notranslate">@live</span> functions
  409 call non-<span class="d_inlinecode donthyphenate notranslate">@live</span> functions, those called functions are expected to present
  410 an <span class="d_inlinecode donthyphenate notranslate">@live</span> compatible interface, although it is not checked.
  411 if non-<span class="d_inlinecode donthyphenate notranslate">@live</span> functions call <span class="d_inlinecode donthyphenate notranslate">@live</span> functions, arguments passed are
  412 expected to follow <span class="d_inlinecode donthyphenate notranslate">@live</span> conventions.
  413 </p>
  414 
  415 <p>The OB system will detect as errors:
  416 </p>
  417 
  418 <p><ul><li>dereferencing pointers that are in an invalid state</li>
  419 <li>more than one active pointer to a mutable memory object</li>
  420 </ul>
  421 </p>
  422 
  423 <p>It will not detect attempts to dereference <span class="d_inlinecode donthyphenate notranslate">null</span> pointers or possibly
  424 <span class="d_inlinecode donthyphenate notranslate">null</span> pointers. This is unworkable because there is no current method
  425 of annotating a type as a non-<span class="d_inlinecode donthyphenate notranslate">null</span> pointer.
  426 </p>
  427 
  428 
  429 <p><h3>Core OB Principle</h3>
  430 </p>
  431 
  432 <p>The OB design follows from the following principle:
  433 </p>
  434 
  435 <p>For each memory object, there can exist either exactly one mutating pointer
  436 to it, or multiple non-mutating (read-only) pointers.
  437 </p>
  438 
  439 
  440 <p><h3>Design</h3>
  441 </p>
  442 
  443 <p>The single mutating pointer is called the "owner" of the memory object.
  444 It transitively owns the memory object and all memory objects accessible
  445 from it (i.e. the memory object graph). Since it is the sole pointer to
  446 that memory object, it can safely
  447 manage the memory (change its shape, allocate, free and resize) without
  448 pulling the rug out from under any other pointers (mutating or not)
  449 that may point to it.
  450 </p>
  451 
  452 <p>If there are multiple read-only pointers to the memory object graph,
  453 they can safely read from it without being concerned about the memory
  454 object graph being changed underfoot.
  455 </p>
  456 
  457 <p>The rest of the design is concerned with how pointers become owners,
  458 read only pointers, and invalid pointers, and how the Core OB Principle
  459 is maintained at all times.
  460 </p>
  461 
  462 
  463 <p><h4>Tracked Pointers</h4>
  464 </p>
  465 
  466 <p>The only pointers that are tracked are those declared in the <span class="d_inlinecode donthyphenate notranslate">@live</span> function
  467 as <span class="d_inlinecode donthyphenate notranslate">this</span>, function parameters or local variables. Variables from other
  468 functions are not tracked, even <span class="d_inlinecode donthyphenate notranslate">@live</span> ones, as the analysis of interactions
  469 with other functions depends
  470 entirely on that function signature, not its internals.
  471 Parameters that are <span class="d_inlinecode donthyphenate notranslate">const</span> are not tracked.
  472 </p>
  473 
  474 
  475 <p><h4>Pointer States</h4>
  476 </p>
  477 
  478 <p>Each pointer is in one of the following states:
  479 </p>
  480 
  481 <p><dl><dt>Undefined</dt>
  482 </dl>
  483 
  484 <p><dd>The pointer is in an invalid state. Dereferencing such a pointer is
  485 an error.</dd>
  486 </p>
  487 
  488 <p><dt>Owner</dt>
  489 </p>
  490 
  491 <p><dd>The owner is the sole pointer to a memory object graph.
  492 An Owner pointer normally does not have a <span class="d_inlinecode donthyphenate notranslate">scope</span> attribute.
  493 If a pointer with the <span class="d_inlinecode donthyphenate notranslate">scope</span> attribute is initialized
  494 with an expression not derived from a tracked pointer, it is an Owner.
  495 </dd>
  496 
  497 <p>If an Owner pointer is assigned to another Owner pointer, the
  498 former enters the Undefined state.
  499 </p>
  500 </p>
  501 
  502 <p><dt>Borrowed</dt>
  503 </p>
  504 
  505 <p><dd>A Borrowed pointer is one that temporarily becomes the sole pointer
  506 to a memory object graph. It enters that state via assignment
  507 from an owner pointer, and the owner then enters the Lent state
  508 until after the last use of the borrowed pointer.
  509 </dd>
  510 
  511 <p>A Borrowed pointer must have the <span class="d_inlinecode donthyphenate notranslate">scope</span> attribute and must
  512 be a pointer to mutable.
  513 </p>
  514 </p>
  515 
  516 <p><dt>Readonly</dt>
  517 </p>
  518 
  519 <p><dd>A Readonly pointer acquires its value from an Owner.
  520 While the Readonly pointer is live, only Readonly pointers can
  521 be acquired from that Owner.
  522 A Readonly pointer must have the <span class="d_inlinecode donthyphenate notranslate">scope</span> attribute and also
  523 must not be a pointer to mutable.
  524 </dd>
  525 </p>
  526 </p>
  527 
  528 <p><h4>Lifetimes</h4>
  529 </p>
  530 
  531 <p>The lifetime of a Borrowed or Readonly pointer value starts when it is
  532 first read (not when it is initialized or assigned a value), and ends at
  533 the last read of that value.
  534 </p>
  535 
  536 <p>This is also known as <em>Non-Lexical Lifetimes</em>.
  537 </p>
  538 
  539 
  540 <p><h4>Pointer State Transitions</h4>
  541 </p>
  542 
  543 <p>A pointer changes its state when one of these operations is done to it:
  544 </p>
  545 
  546 <p><ul><li>storage is allocated for it (such as a local variable on the stack),
  547 which places the pointer in the Undefined state</li>
  548 </ul>
  549 
  550 <p><li>initialization (treated as assignment)</li>
  551 </p>
  552 
  553 <p><li>assignment - the source and target pointers change state based on what
  554 states they are in and their types and storage classes</li>
  555 </p>
  556 
  557 <p><li>passed to an <span class="d_inlinecode donthyphenate notranslate">out</span> function parameter (changes state after the function returns),
  558 treated the same as initialization</li>
  559 </p>
  560 
  561 <p><li>passed by <span class="d_inlinecode donthyphenate notranslate">ref</span> to a function parameter, treated as an assignment to a Borrow or a Readonly
  562 depending on the storage class and type of the parameter</li>
  563 </p>
  564 
  565 <p><li>returned from a function</li>
  566 </p>
  567 
  568 <p><li>it is passed by value to a function parameter, which is
  569 treated as an assignment to that parameter.</li>
  570 </p>
  571 
  572 <p><li>it is implicitly passed by ref as a closure variable to a nested function</li>
  573 </p>
  574 
  575 <p><li>the address of the pointer is taken, which is treated as assignment to whoever
  576 receives the address</li>
  577 </p>
  578 
  579 <p><li>the address of any part of the memory object graph is taken, which is
  580 treated as assignment to whoever receives that address</li>
  581 </p>
  582 
  583 <p><li>a pointer value is read from any part of the memory object graph,
  584 which is treated as assignment to whoever receives that pointer</li>
  585 </p>
  586 
  587 <p><li>merging of control flow reconciles the state of each variable based on the
  588 states they have from each edge</li>
  589 </p>
  590 </p>
  591 
  592 <p><h3>Limitations</h3>
  593 </p>
  594 
  595 <p>Being a prototype, there are a lot of aspects not dealt with yet, and
  596 won't be until the prototype shows that it is a good design.
  597 </p>
  598 
  599 <p><h4>Bugs</h4>
  600 </p>
  601 
  602 <p>Expect lots of bugs. Please report them to bugzilla and tag with the "ob"
  603 keyword. It's not necessary to report the other limitations that are enumerated here.
  604 </p>
  605 
  606 <p><h4>Class References and Associative Array References are not Tracked</h4>
  607 </p>
  608 
  609 <p>They are presumed to be managed by the garbage collector.
  610 </p>
  611 
  612 <p><h4>Borrowing and Reading from Non-Owner Pointers</h4>
  613 </p>
  614 
  615 <p>Owners are tracked for leaks, not other pointers.
  616 Borrowers are considered Owners if they are initialized from other than
  617 a pointer.
  618 </p>
  619 
  620 <pre class="d_code notranslate">@live <span class="d_keyword">void</span> uhoh()
  621 {
  622     <span class="d_keyword">scope</span> p = malloc();  <span class="d_comment">// p is considered an Owner
  623 </span>    <span class="d_keyword">scope</span> <span class="d_keyword">const</span> pc = malloc(); <span class="d_comment">// pc is not considered an Owner
  624 </span>} <span class="d_comment">// dangling pointer pc is not detected on exit
  625 </span>
  626 </pre>
  627 <p>It doesn't seem to make much sense to have such pointers as
  628 <span class="d_inlinecode donthyphenate notranslate">scope</span>, perhaps this can be resolved by making such an error.
  629 </p>
  630 
  631 <p><h4>Pointers Read/Written by Nested Functions</h4>
  632 </p>
  633 
  634 <p>They're not tracked.
  635 </p>
  636 
  637 <pre class="d_code notranslate">@live <span class="d_keyword">void</span> ohno()
  638 {
  639     <span class="d_keyword">auto</span> p = malloc();
  640 
  641     <span class="d_keyword">void</span> sneaky() { free(p); }
  642 
  643     sneaky();
  644     free(p);  <span class="d_comment">// double free not detected
  645 </span>}
  646 </pre>
  647 
  648 <p><h4>Exceptions</h4>
  649 </p>
  650 
  651 <p>The analysis assumes no exceptions are thrown.
  652 </p>
  653 
  654 <pre class="d_code notranslate">@live <span class="d_keyword">void</span> leaky()
  655 {
  656     <span class="d_keyword">auto</span> p = malloc();
  657     pitcher();  <span class="d_comment">// throws exception, p leaks
  658 </span>    free(p);
  659 }
  660 </pre>
  661 
  662 <p>One solution is to use <span class="d_inlinecode donthyphenate notranslate">scope(exit)</span>:
  663 </p>
  664 
  665 <pre class="d_code notranslate">@live <span class="d_keyword">void</span> waterTight()
  666 {
  667     <span class="d_keyword">auto</span> p = malloc();
  668     <span class="d_keyword">scope</span>(exit) free(p);
  669     pitcher();
  670 }
  671 </pre>
  672 
  673 <p>or use RAII objects or call only <span class="d_inlinecode donthyphenate notranslate">nothrow</span> functions.
  674 </p>
  675 
  676 <p><h4>Lazy Parameters</h4>
  677 </p>
  678 
  679 <p>These are not considered.
  680 </p>
  681 
  682 <p><h4>Quadratic Behavior</h4>
  683 </p>
  684 
  685 <p>The analysis exhibits quadratic behavior, so keeping the <span class="d_inlinecode donthyphenate notranslate">@live</span> functions
  686 smallish will help.
  687 </p>
  688 
  689 <p><h4>Mixing Memory Pools</h4>
  690 </p>
  691 
  692 <p>Conflation of different memory pools:
  693 </p>
  694 
  695 <pre class="d_code notranslate"><span class="d_keyword">void</span>* xmalloc(size_t);
  696 <span class="d_keyword">void</span> xfree(<span class="d_keyword">void</span>*);
  697 
  698 <span class="d_keyword">void</span>* ymalloc(size_t);
  699 <span class="d_keyword">void</span> yfree(<span class="d_keyword">void</span>*);
  700 
  701 <span class="d_keyword">auto</span> p = xmalloc(20);
  702 yfree(p);  <span class="d_comment">// should call xfree() instead
  703 </span></pre>
  704 <p>is not detected.
  705 </p>
  706 
  707 <p>This can be mitigated by using type-specific pools:
  708 </p>
  709 
  710 <pre class="d_code notranslate">U* umalloc();
  711 <span class="d_keyword">void</span> ufree(U*);
  712 
  713 V* vmalloc();
  714 <span class="d_keyword">void</span> vfree(V*);
  715 
  716 <span class="d_keyword">auto</span> p = umalloc();
  717 vfree(p);  <span class="d_comment">// type mismatch
  718 </span></pre>
  719 
  720 <p>and perhaps disabling implicit conversions to <span class="d_inlinecode donthyphenate notranslate">void*</span> in <span class="d_inlinecode donthyphenate notranslate">@live</span> functions.
  721 </p>
  722 
  723 <p><h4>Variadic Function Arguments</h4>
  724 </p>
  725 
  726 <p>Arguments to variadict functions (like <span class="d_inlinecode donthyphenate notranslate">printf</span>) are considered to be consumed.
  727 While safe, this doesn't seem to be very practical, and will likely need revisiting.
  728 </p>
  729 </li>
  730 
  731 <li><a class="anchor" title="Permalink to this section" id="preview-in" href="#preview-in">Added <span class="d_inlinecode donthyphenate notranslate">-preview=in</span> to make the <span class="d_inlinecode donthyphenate notranslate">in</span> storage class mean <span class="d_inlinecode donthyphenate notranslate">scope const</span>.</a>
  732 
  733 <p>Although technically defined to be <span class="d_inlinecode donthyphenate notranslate">const scope</span>, the <span class="d_inlinecode donthyphenate notranslate">in</span> storage
  734 class has never been implemented as such until this preview switch.
  735 With the implementation now done, <span class="d_inlinecode donthyphenate notranslate">in</span> should be the storage class
  736 of choice for purely input function parameters.
  737 </p>
  738 
  739 <p>Without <span class="d_inlinecode donthyphenate notranslate">-preview=in</span>, these two declarations are equivalent:
  740 </p>
  741 <pre class="d_code notranslate"><span class="d_keyword">void</span> fun(<span class="d_keyword">in</span> <span class="d_keyword">int</span> x);
  742 <span class="d_keyword">void</span> fun(<span class="d_keyword">const</span> <span class="d_keyword">int</span> x);
  743 </pre>
  744 
  745 <p>With <span class="d_inlinecode donthyphenate notranslate">-preview=in</span>, these two declarations are equivalent:
  746 </p>
  747 <pre class="d_code notranslate"><span class="d_keyword">void</span> fun(<span class="d_keyword">in</span> <span class="d_keyword">int</span> x);
  748 <span class="d_keyword">void</span> fun(<span class="d_keyword">scope</span> <span class="d_keyword">const</span> <span class="d_keyword">int</span> x);
  749 </pre>
  750 </li>
  751 
  752 <li><a class="anchor" title="Permalink to this section" id="printfParams2" href="#printfParams2">Validate printf and scanf (variants too) arguments against format specifiers</a>
  753 
  754 <p>Follows the C99 specification 7.19.6.1 for printf and 7.19.6.2 for scanf.
  755 </p>
  756 
  757 <p>For printf, it takes a generous, rather than strict, view of compatiblity.
  758 For example, an unsigned value can be formatted with a signed specifier.
  759 </p>
  760 
  761 <p>For scanf, it takes a strict view of compatiblity.
  762 </p>
  763 
  764 <p>Diagnosed incompatibilities are:
  765 </p>
  766 
  767 <p><ol><li>incompatible sizes which will cause argument misalignment</li>
  768 <li>deferencing arguments that are not pointers</li>
  769 <li>insufficient number of arguments</li>
  770 <li>struct arguments</li>
  771 <li>array and slice arguments</li>
  772 <li>non-pointer arguments to <span class="d_inlinecode donthyphenate notranslate">s</span> specifier</li>
  773 <li>non-standard formats</li>
  774 <li>undefined behavior per C99</li>
  775 </ol>
  776 </p>
  777 
  778 <p>Per the C Standard, extra arguments are ignored.
  779 </p>
  780 
  781 <p>No attempt is made to fix the arguments or the format string.
  782 </p>
  783 
  784 <p>In order to use non-Standard printf/scanf formats, an easy workaround is:
  785 </p>
  786 
  787 <pre class="d_code notranslate">printf(<span class="d_string">"%k\n"</span>, value);  <span class="d_comment">// error: non-Standard format k
  788 </span></pre>
  789 <pre class="d_code notranslate"><span class="d_keyword">const</span> format = <span class="d_string">"%k\n"</span>;
  790 printf(format.ptr, value);  <span class="d_comment">// no error
  791 </span></pre>
  792 
  793 <p>Most of the errors detected are portability issues. For instance,
  794 </p>
  795 
  796 <pre class="d_code notranslate">string s;
  797 printf(<span class="d_string">"%.*s\n"</span>, s.length, s.ptr);
  798 printf(<span class="d_string">"%d\n"</span>, s.sizeof);
  799 <span class="d_keyword">ulong</span> u;
  800 scanf(<span class="d_string">"%lld%*c\n"</span>, &amp;u);
  801 </pre>
  802 <p>should be replaced with:
  803 </p>
  804 <pre class="d_code notranslate">string s;
  805 printf(<span class="d_string">"%.*s\n"</span>, <span class="d_keyword">cast</span>(<span class="d_keyword">int</span>) s.length, s.ptr);
  806 printf(<span class="d_string">"%zd\n"</span>, s.sizeof);
  807 <span class="d_keyword">ulong</span> u;
  808 scanf(<span class="d_string">"%llu%*c\n"</span>, &amp;u);
  809 </pre>
  810 
  811 <p>Printf-like and scanf-like functions are detected by prefixing them
  812 with <span class="d_inlinecode donthyphenate notranslate">pragma(printf)</span> for printf-like functions or <span class="d_inlinecode donthyphenate notranslate">pragma(scanf)</span> for scanf-like functions.
  813 </p>
  814 
  815 <p>In addition to
  816 the pragma, the functions must conform to the following characteristics:
  817 </p>
  818 
  819 <p><ol><li>be <span class="d_inlinecode donthyphenate notranslate">extern (C)</span> or <span class="d_inlinecode donthyphenate notranslate">extern (C++)</span></li>
  820 <li>have the format parameter declared as <span class="d_inlinecode donthyphenate notranslate">const(char)*</span></li>
  821 <li>have the format parameter immediately precede the <span class="d_inlinecode donthyphenate notranslate">...</span> for non-v functions,
  822 or immediately precede the <span class="d_inlinecode donthyphenate notranslate">va_list</span> parameter (which is the last parameter for "v"
  823 variants of <span class="d_inlinecode donthyphenate notranslate">printf</span> and <span class="d_inlinecode donthyphenate notranslate">scanf</span>)</li>
  824 </ol>
  825 </p>
  826 
  827 <p>which enables automatic detection of the format string argument and the argument list.
  828 </p>
  829 
  830 <p>Checking of "v" format strings is not implemented yet.
  831 </p>
  832 </li>
  833 
  834 <li><a class="anchor" title="Permalink to this section" id="reproducible-builds" href="#reproducible-builds">Environment variable <span class="d_inlinecode donthyphenate notranslate">SOURCE_DATE_EPOCH</span> is now supported</a>
  835 
  836 <p>The environment variable <span class="d_inlinecode donthyphenate notranslate">SOURCE_DATE_EPOCH</span> is used for
  837 <a href="https://reproducible-builds.org/">reproducible builds</a>.
  838 It is an UNIX timestamp (seconds since 1970-01-01 00:00:00),
  839 as described <a href="https://reproducible-builds.org/docs/source-date-epoch/">here</a>.
  840 DMD now correctly recognize it and will set the <span class="d_inlinecode donthyphenate notranslate">__DATE__</span>,
  841 <span class="d_inlinecode donthyphenate notranslate">__TIME__</span>, and <span class="d_inlinecode donthyphenate notranslate">__TIMESTAMP__</span> tokens accordingly.
  842 </p>
  843 </li>
  844 
  845 
  846  </ol></div>
  847 
  848 <div class="bugsfixed"><h4>Runtime changes</h4> <ol>
  849 <li><a class="anchor" title="Permalink to this section" id="isbaseof" href="#isbaseof">Added TypeInfo_Class/TypeInfo_Interface.isBaseOf that works like C#/Java isAssignableFrom.</a>
  850 
  851 <p><span class="d_inlinecode donthyphenate notranslate">TypeInfo_Class.isBaseOf</span> returns true if the argument and the receiver
  852 are equal or if the class represented by the argument inherits from the
  853 class represented by the receiver. This is called <span class="d_inlinecode donthyphenate notranslate">isBaseOf</span> instead of
  854 <span class="d_inlinecode donthyphenate notranslate">isAssignableFrom</span> to avoid confusion for classes that overload
  855 <span class="d_inlinecode donthyphenate notranslate">opAssign</span> and so may allow assignment from classes outside their
  856 inheritance hierarchy and to match existing terminology in the D
  857 runtime. <span class="d_inlinecode donthyphenate notranslate">TypeInfo_Interface.isBaseOf</span> is similar with the addition
  858 that the argument may be either <span class="d_inlinecode donthyphenate notranslate">TypeInfo_Class</span> or
  859 <span class="d_inlinecode donthyphenate notranslate">TypeInfo_Interface</span>.
  860 </p>
  861 <pre class="d_code notranslate"><span class="d_keyword">class</span> ClassA {}
  862 <span class="d_keyword">class</span> ClassB : ClassA {}
  863 
  864 <span class="d_keyword">auto</span> a = <span class="d_keyword">new</span> ClassA(), b = <span class="d_keyword">new</span> ClassB();
  865 
  866 <span class="d_keyword">assert</span>(<span class="d_keyword">typeid</span>(a).isBaseOf(<span class="d_keyword">typeid</span>(a)));
  867 <span class="d_keyword">assert</span>(<span class="d_keyword">typeid</span>(a).isBaseOf(<span class="d_keyword">typeid</span>(b)));
  868 <span class="d_keyword">assert</span>(!<span class="d_keyword">typeid</span>(b).isBaseOf(<span class="d_keyword">typeid</span>(a)));
  869 </pre>
  870 </li>
  871 
  872 <li><a class="anchor" title="Permalink to this section" id="page_size" href="#page_size">Add <span class="d_inlinecode donthyphenate notranslate">core.memory.pageSize</span> and <span class="d_inlinecode donthyphenate notranslate">minimumPageSize</span>.</a>
  873 
  874 <p><span class="d_inlinecode donthyphenate notranslate">pageSize</span> contains the size of a system page in bytes.
  875 </p>
  876 
  877 <pre class="d_code notranslate"><span class="d_keyword">import</span> core.memory : pageSize;
  878 <span class="d_keyword">ubyte</span>[] buffer = <span class="d_keyword">new</span> <span class="d_keyword">ubyte</span>[pageSize];
  879 </pre>
  880 
  881 <p><span class="d_inlinecode donthyphenate notranslate">minimumPageSize</span> contains the minimum size of a system page in bytes.
  882 </p>
  883 
  884 <p>This is a compile time, platform specific value. This value might not
  885 be accurate, since it might be possible to change this value. Whenever possible,
  886 please use <span class="d_inlinecode donthyphenate notranslate">pageSize</span> instead, which is initialized during runtime.
  887 </p>
  888 
  889 <p>The minimum size is useful when the context requires a compile time known value,
  890 like the size of a static array: <span class="d_inlinecode donthyphenate notranslate">ubyte[minimumPageSize] buffer</span>.
  891 </p>
  892 
  893 <pre class="d_code notranslate"><span class="d_keyword">import</span> core.memory : minimumPageSize;
  894 <span class="d_keyword">ubyte</span>[minimumPageSize] buffer;
  895 </pre>
  896 </li>
  897 
  898 
  899  </ol></div>
  900 
  901 <div class="bugsfixed"><h4>Library changes</h4> <ol>
  902 <li><a class="anchor" title="Permalink to this section" id="date-isoweek" href="#date-isoweek">Add <span class="d_inlinecode donthyphenate notranslate">Date.isoWeekYear</span> and <span class="d_inlinecode donthyphenate notranslate">Date.fromISOWeek</span> in <span class="d_inlinecode donthyphenate notranslate">std.datetime.date</span></a>
  903 
  904 <p>It is now possible to convert from the ISO 8601 week calendar into the
  905 Gregorian calendar which is used by Date and DateTime.
  906 </p>
  907 
  908 <p>Dates are constructed from the year in the ISO week calendar, the week number
  909 and a day of week. <span class="d_inlinecode donthyphenate notranslate">Date.fromISOWeek(2020, 11, DayOfWeek.mon)</span> will result in
  910 <span class="d_inlinecode donthyphenate notranslate">Date(2020, 3, 9)</span>.
  911 </p>
  912 
  913 <p>As the year in the Gregorian calendar and the year in the ISO week calendar are
  914 not always the same there is a new <span class="d_inlinecode donthyphenate notranslate">.isoWeekYear</span> property to get the year of
  915 the <span class="d_inlinecode donthyphenate notranslate">Date</span> object in the ISO week calendar. If you convert between them often,
  916 consider using <span class="d_inlinecode donthyphenate notranslate">.isoWeekAndYear</span> to compute both week number and year in one
  917 step.
  918 </p>
  919 </li>
  920 
  921 <li><a class="anchor" title="Permalink to this section" id="deprecate-xml" href="#deprecate-xml">Deprecated module <span class="d_inlinecode donthyphenate notranslate">std.xml</span></a>
  922 
  923 <p>The module <span class="d_inlinecode donthyphenate notranslate">std.xml</span> has been deprecated. Any code that still needs
  924 it can use <a href="https://github.com/dlang/undeaD">UndeaD</a> instead.
  925 For parsing xml files, we recommend to use the dub package
  926 <a href="https://code.dlang.org/packages/dxml">dxml</a>.
  927 </p>
  928 </li>
  929 
  930 <li><a class="anchor" title="Permalink to this section" id="digest" href="#digest">The deprecated aliases in std.digest.digest were removed</a>
  931 
  932 <p>They were deprecated since 2.076.1 and have now been removed.
  933 Import <span class="d_inlinecode donthyphenate notranslate">std.digest</span> or its submodules instead.
  934 </p>
  935 
  936 <p>Additionally the deprecation cycle for <span class="d_inlinecode donthyphenate notranslate">std.digest.digest</span> was started
  937 and the module will be removed in 2.101.
  938 </p>
  939 </li>
  940 
  941 
  942  </ol></div>
  943 
  944 <div class="bugsfixed"><h4>Dub changes</h4> <ol>
  945 <li><a class="anchor" title="Permalink to this section" id="ignoreHiddenDirectories" href="#ignoreHiddenDirectories">Hidden directories are now ignored.</a>
  946 
  947 <p>A hidden directory on most Posix file systems starts with a period. e.g.
  948 <span class="d_inlinecode donthyphenate notranslate">.dub</span>. By default, dub ignored hidden files (e.g. <span class="d_inlinecode donthyphenate notranslate">.swap.file.d</span>), but not
  949 hidden directories. Some operating systems create hidden directories that dub
  950 would try to include for compilation. This release now will properly ignore
  951 hidden directories, unless those directories are specifically named in the dub
  952 recipe file.
  953 </p>
  954 
  955 <p>Note that this uses the directory name exclusively and does not check file
  956 attributes.
  957 </p>
  958 </li>
  959 
  960 <li><a class="anchor" title="Permalink to this section" id="lintReportFile" href="#lintReportFile">Dub lint now supports --report-file argument.</a>
  961 
  962 <p>Dub lint can now be called with --report-file argument:
  963 dub lint --report-file report.json
  964 </p>
  965 </li>
  966 
  967 
  968  </ol></div>
  969 
  970 <br><em class="big"><a class="anchor" title="Permalink to this section" id="bugfix-list" href="#bugfix-list">List of all bug fixes and enhancements in D 2.092.0:</a></em>
  971 
  972 <div class="bugsfixed"><h4>DMD Compiler regressions</h4> <ol>
  973 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20596">Bugzilla 20596</a>: [REG2.086] Error on missed stack allocation for closure for template</li>
  974 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20597">Bugzilla 20597</a>: [REG2.080] Wrong closure GC allocation with dip1000</li>
  975 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20718">Bugzilla 20718</a>: enum type mismatch causes wrong location on error</li>
  976 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20742">Bugzilla 20742</a>: dmd -X (JSON output) includes uncompiled symbols</li>
  977  </ol></div>
  978 <div class="bugsfixed"><h4>DMD Compiler bugs</h4> <ol>
  979 <li><a href="https://issues.dlang.org/show_bug.cgi?id=14639">Bugzilla 14639</a>: Assigning init value to struct uses stack, causing segfault</li>
  980 <li><a href="https://issues.dlang.org/show_bug.cgi?id=15867">Bugzilla 15867</a>: Compiler reports wrong error location for immutability error</li>
  981 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19949">Bugzilla 19949</a>: C++ Mangling: no support for abi-tags from the Itanium ABI</li>
  982 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20084">Bugzilla 20084</a>: return by auto ref unsafe - and different code for inout ref and ref.</li>
  983 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20461">Bugzilla 20461</a>: [dip1000] Passing stack allocated string to assert compiles</li>
  984 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20593">Bugzilla 20593</a>: [GCC ASM] Parser syntax for asm operands differs from GCC</li>
  985 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20637">Bugzilla 20637</a>: spelling correction offers private members</li>
  986 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20638">Bugzilla 20638</a>: spelling correction offers private member of package on named package access</li>
  987 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20643">Bugzilla 20643</a>: printf without arguments aborts compilation</li>
  988 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20644">Bugzilla 20644</a>: Invalid printf deprecation for ubyte passed to "%hhu"</li>
  989 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20645">Bugzilla 20645</a>: printf deprecation for width + precision</li>
  990 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20653">Bugzilla 20653</a>: Short-circuiting boolean logic not working</li>
  991 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20658">Bugzilla 20658</a>: can modify overlapped storage classes in @safe enum function</li>
  992 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20675">Bugzilla 20675</a>: dip1000 improper error about copying scope parameter into allocated memory</li>
  993 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20682">Bugzilla 20682</a>: [DIP1000] wrong error: scope variable may not be copied into allocated memory</li>
  994 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20696">Bugzilla 20696</a>: Should error when retrieving mangling while the type is not yet final</li>
  995 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20779">Bugzilla 20779</a>: Segfault when self-containing struct is accessed from inside in a __traits(compiles) context</li>
  996 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20795">Bugzilla 20795</a>: [dip1000] segfault on templated opEquals</li>
  997  </ol></div>
  998 <div class="bugsfixed"><h4>DMD Compiler enhancements</h4> <ol>
  999 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20444">Bugzilla 20444</a>: Make __DATE__ in dlang reproducible using SOURCE_DATE_EPOCH</li>
 1000 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20470">Bugzilla 20470</a>: accessing an AliasSeq tuple loses <span class="d_inlinecode donthyphenate notranslate">this</span></li>
 1001 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20609">Bugzilla 20609</a>: Disabled and deprecated functions show up as candidate</li>
 1002 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20625">Bugzilla 20625</a>: Function literal diagnostic is not on par with other messages</li>
 1003 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20627">Bugzilla 20627</a>: Module ctors / dtors should always have D linkage</li>
 1004 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20636">Bugzilla 20636</a>: Support the RDSEED instruction in asm blocks</li>
 1005 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20734">Bugzilla 20734</a>: Array literals as arguments to scope slice parameters should be stack-allocated</li>
 1006  </ol></div>
 1007 <div class="bugsfixed"><h4>Phobos bugs</h4> <ol>
 1008 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20589">Bugzilla 20589</a>: typeof may give wrong result in case of classes defining <span class="d_inlinecode donthyphenate notranslate">opCall</span> operator</li>
 1009 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20606">Bugzilla 20606</a>: Cannot cast non-mutable BitArray to void[], size_t[]</li>
 1010 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20733">Bugzilla 20733</a>: Documentation for hasElaborateAssign says copy construction creates an opAssign</li>
 1011 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20743">Bugzilla 20743</a>: Checked!(int, Abort) does not abort but raise SIGFPE</li>
 1012 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20755">Bugzilla 20755</a>: ImplicitConversionTargets of const class are nonconst</li>
 1013 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20799">Bugzilla 20799</a>: schwartzSort does not pin transformation results with indirections, leading to memory corruption</li>
 1014  </ol></div>
 1015 <div class="bugsfixed"><h4>Phobos enhancements</h4> <ol>
 1016 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20723">Bugzilla 20723</a>: std.random.unpredictableSeed: on x86/x86-64 try using RDRAND when there is no arc4random</li>
 1017 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20732">Bugzilla 20732</a>: swap doesn't support types with impure gc or throwing copy constructors</li>
 1018  </ol></div>
 1019 <div class="bugsfixed"><h4>Druntime regressions</h4> <ol>
 1020 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20748">Bugzilla 20748</a>: Deprecation for assert using shared type and checkaction=context</li>
 1021  </ol></div>
 1022 <div class="bugsfixed"><h4>Druntime bugs</h4> <ol>
 1023 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20750">Bugzilla 20750</a>: checkaction=context segfaults for null references</li>
 1024 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20757">Bugzilla 20757</a>: checkaction=context prints characters as integers</li>
 1025  </ol></div>
 1026 <div class="bugsfixed"><h4>Druntime enhancements</h4> <ol>
 1027 <li><a href="https://issues.dlang.org/show_bug.cgi?id=19924">Bugzilla 19924</a>: Make core.bitop.bswap(ulong) work in betterC</li>
 1028 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20178">Bugzilla 20178</a>: Add TypeInfo_Class/TypeInfo_Interface.isBaseOf (equivalent to C#/Java isAssignableFrom)</li>
 1029 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20711">Bugzilla 20711</a>: object.update requires the "update" callback to wastefully return a copy of the updated value</li>
 1030 <li><a href="https://issues.dlang.org/show_bug.cgi?id=20741">Bugzilla 20741</a>: <span class="d_inlinecode donthyphenate notranslate">dup</span>, <span class="d_inlinecode donthyphenate notranslate">idup</span> for arrays plus <span class="d_inlinecode donthyphenate notranslate">keys</span>, <span class="d_inlinecode donthyphenate notranslate">values</span> for built-in associative arrays: if a type is known to have a postblit do not emit code for the non-postblit path and vice versa</li>
 1031  </ol></div>
 1032 
 1033 </div>
 1034 <h3><a class="anchor" title="Permalink to this section" id="contributors" href="#contributors">Contributors to this release (47)</a></h3>
 1035 <p>A huge thanks goes to all the awesome people who made this release possible.</p>
 1036 <ul>    <li>aG0aep6G</li>
 1037     <li>Andrei Alexandrescu</li>
 1038     <li>Atila Neves</li>
 1039     <li>Bastiaan Veelo</li>
 1040     <li>Ben Jones</li>
 1041     <li>Bernhard Seckinger</li>
 1042     <li>Boris Carvajal</li>
 1043     <li>Brian Schott</li>
 1044     <li>David Abdurachmanov</li>
 1045     <li>Denis Feklushkin</li>
 1046     <li>dkorpel</li>
 1047     <li>Don.Clugston</li>
 1048     <li>drug007</li>
 1049     <li>Ernesto Castellotti</li>
 1050     <li>Florian</li>
 1051     <li>H Paterson</li>
 1052     <li>Hiroki Noda</li>
 1053     <li>Iain Buclaw</li>
 1054     <li>ivan.roubicek</li>
 1055     <li>Jacob Carlborg</li>
 1056     <li>Jan Jurzitza</li>
 1057     <li>John Colvin</li>
 1058     <li>Lucien Perregaux</li>
 1059     <li>Luhrel</li>
 1060     <li>Manu Evans</li>
 1061     <li>Mark</li>
 1062     <li>Martin Kinkelin</li>
 1063     <li>Martin Nowak</li>
 1064     <li>Mathias L. Baumann</li>
 1065     <li>Mathias Lang</li>
 1066     <li>Mathis Beer</li>
 1067     <li>Mike Parker</li>
 1068     <li>MoonlightSentinel</li>
 1069     <li>Nathan Sashihara</li>
 1070     <li>Nicholas Wilson</li>
 1071     <li>Petar Kirov</li>
 1072     <li>Rainer Schuetze</li>
 1073     <li>Rasmus Thomsen</li>
 1074     <li>Razvan Nitu</li>
 1075     <li>Robert burner Schadek</li>
 1076     <li>Sebastian Wilzbach</li>
 1077     <li>Stefan Koch</li>
 1078     <li>Steven Schveighoffer</li>
 1079     <li>Vladimir Panteleev</li>
 1080     <li>Walter Bright</li>
 1081     <li>wolframw</li>
 1082     <li>سليمان السهمي (Suleyman Sahmi)</li>
 1083 </ul>
 1084 
 1085 
 1086 <div class="changelog-nav">previous version: <a href="2.091.1.html">2.091.1</a>
 1087 &ndash; next version: <a href="2.092.1.html">2.092.1</a></div>
 1088 
 1089 
 1090         <div class="smallprint" id="copyright">Copyright &copy; 1999-2020 by the <a href="../foundation_overview.html">D Language Foundation</a> | Page generated by
 1091 <a href="../spec/ddoc.html">Ddoc</a> on Fri Nov 20 21:58:07 2020
 1092 </div>
 1093     </div>
 1094 </div>
 1095 
 1096     <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
 1097     <script type="text/javascript">window.jQuery || document.write('\x3Cscript src="../js/jquery-1.7.2.min.js">\x3C/script>');</script>
 1098     <script type="text/javascript" src="../js/dlang.js"></script>
 1099     
 1100     <script type="text/javascript" src="../js/codemirror-compressed.js"></script>
 1101     <script type="text/javascript" src="../js/run.js"></script>
 1102 
 1103 
 1104 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
 1105 </body>
 1106 </html>