{"id":1924,"date":"2019-01-24T13:50:14","date_gmt":"2019-01-24T13:50:14","guid":{"rendered":"http:\/\/dlang.org\/blog\/?p=1924"},"modified":"2021-10-08T11:03:23","modified_gmt":"2021-10-08T11:03:23","slug":"last-year-in-d","status":"publish","type":"post","link":"https:\/\/dlang.org\/blog\/2019\/01\/24\/last-year-in-d\/","title":{"rendered":"Last Year In D"},"content":{"rendered":"<p><img loading=\"lazy\" class=\"alignleft size-full wp-image-180\" src=\"http:\/\/dlang.org\/blog\/wp-content\/uploads\/2016\/08\/d3.png\" alt=\"\" width=\"160\" height=\"301\" srcset=\"https:\/\/dlang.org\/blog\/wp-content\/uploads\/2016\/08\/d3.png 160w, https:\/\/dlang.org\/blog\/wp-content\/uploads\/2016\/08\/d3-159x300.png 159w\" sizes=\"(max-width: 160px) 100vw, 160px\" \/>2018 was one of the biggest years in D we\u2019ve had for a while. It was the first complete year that DMD stuck to a steady release schedule. Over the course of the year, the language got new features and cruft cleanup. The compiler even got some new user-facing features. At the same time, the community-at-large continued to evolve the surrounding ecosystem.<\/p>\n<h2 id=\"releaserundown\">Release Rundown<\/h2>\n<p>The first DMD release of the year was <a href=\"https:\/\/dlang.org\/changelog\/2.078.0.html\">version 2.078 on January 1<\/a>. It set the tone for much of the year, including more <a href=\"https:\/\/dlang.org\/changelog\/2.078.0.html#raii\">support for a stripped-down runtime<\/a> for <code>-betterC<\/code> mode, and <a href=\"https:\/\/dlang.org\/changelog\/2.078.0.html#fix11006\">a deprecation change in arithmetic rules<\/a>.<\/p>\n<p>The next major release <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html\">came out in March<\/a>, and I personally found it to be the most exciting release in a couple of years because <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html#argument-mismatch\">it came with improved error messages<\/a> &#8211; notably, calling out the specific argument to a function that mismatched a type (though I will note there is still a lot of room for further improvement!). Moreover, this release <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html#includeimports\">introduced DMD\u2019s <code>-i<\/code> flag<\/a>, which automatically includes imported modules and has proven to be a major convenience to me over the year.<\/p>\n<p>Meanwhile, more stripped-down runtime support and general language cleanup was included in the release. March also introduced <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html#dip1008\">experimental <code>@nogc<\/code> exception throwing<\/a> (as <a href=\"https:\/\/github.com\/dlang\/DIPs\/blob\/99b09355e1161a8288a9d1e4a6a99a3cc58f850f\/DIPs\/DIP1008.md\">proposed in DIP1008<\/a>). This release also <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html#lazy-gc-init\">changed the garbage collector<\/a> to be lazily initialized, part of the effort to make things cheaper and pay-as-you-go.<\/p>\n<p>March was also the first time DMD on Windows could do a total build of a 64-bit program without Visual Studio installed because <a href=\"https:\/\/dlang.org\/changelog\/2.079.0.html#lld_mingw\">it bundled the LLVM linker<\/a>.<\/p>\n<p>Keeping to the release schedule, May and July brought us new major versions, which focused on language cleanup, with a lot of deprecations. There was <a href=\"https:\/\/dlang.org\/blog\/2018\/02\/03\/the-dbugfix-campaign\/\">a #dbugfix campaign over the year<\/a>, and it brought a fix in <a href=\"https:\/\/dlang.org\/changelog\/2.080.0.html\">May\u2019s release<\/a>: allowing the <code>pow<\/code> operator (<code>^^<\/code>) and several <code>std.math<\/code> functions <a href=\"https:\/\/dlang.org\/changelog\/2.080.0.html#fix5227\">to be used at compile time<\/a>. <a href=\"https:\/\/dlang.org\/changelog\/2.081.0.html\">July\u2019s release<\/a> brought <a href=\"https:\/\/dlang.org\/changelog\/2.081.0.html#expression-based_contract_syntax\">a change in contract syntax<\/a>, based on the <a href=\"https:\/\/github.com\/dlang\/DIPs\/blob\/99b09355e1161a8288a9d1e4a6a99a3cc58f850f\/DIPs\/accepted\/DIP1009.md\">proposal in DIP 1009<\/a>, allowing small expressions instead of requiring whole blocks.<\/p>\n<p><a href=\"https:\/\/dlang.org\/changelog\/2.082.0.html\">Version 2.082<\/a>, in September, finally brought me something I have wanted for a long time: <a href=\"http:\/\/ddili.org\/ders\/d.en\/uda.html\">User Defined Attributes<\/a> on <a href=\"https:\/\/dlang.org\/changelog\/2.082.0.html#uda-function-parameters\"><code>enum<\/code> members and function parameters<\/a>, as well as the ability to <a href=\"https:\/\/dlang.org\/changelog\/2.082.0.html#exceptions-opt\">disable DRuntime\u2019s exception trapping<\/a> via the <code>--DRT-trapExceptions=0<\/code> runtime command-line switch, which allows for easier debugging of uncaught exceptions. Moreover, with this release the D Language Foundation began <a href=\"https:\/\/dlang.org\/changelog\/2.082.0.html#signed_windows_binaries\">digitally signing the Windows binary releases<\/a>, which has helped smooth out the end-user experience when installing and running DMD. It should continue to help solve the false-positive problem we have seen with some virus scanners.<\/p>\n<p>At the end of the year, <a href=\"https:\/\/dlang.org\/changelog\/2.083.0.html\">version 2.083<\/a> saw extern(C++) get a big improvement its users have been waiting for: <a href=\"https:\/\/dlang.org\/changelog\/2.083.0.html#mangle_cpp\">namespaces without scopes<\/a>, which makes C++ interoperability and code organization a lot easier. Work on making the C++ standard library accessible from D has been progressing throughout the year.<\/p>\n<p>Overall, the year brought a lot of awaited improvements. D is more usable in various runtime library situations (even Phobos has some <code>-betterC<\/code> support, like <code>RefCounted<\/code> and <code>Tuple<\/code>!). The language had over ten deprecations of old cruft like comma expressions, read-modify-write on shared, comma expressions, class allocators (did you even know D still had class allocators? To be honest, I thought they were formally deprecated years ago, but it was actually 2018 when the change officially happened!), and more.<\/p>\n<p>Debugging got better, with the uncaught exception switch, but also allowing the <code>debug<\/code> statement to escape more attribute restrictions, better error messages out of the compiler, and a <code>-verrors=context<\/code> switch to show the line right in the message. <code>-betterC<\/code> debugging aids also improved, with the C assert function being a possibility. I\u2019ll also note that 2019 is already moving further\u2014new <code>assert<\/code> printing code was merged just recently; we can choose how to control them and whether to use D or C facilities!<\/p>\n<p>Of course, the library continued to get better range support and its support for <code>@nogc<\/code> and <code>-betterC<\/code> has grown as well.<\/p>\n<p>And as a fun fact, DMD is now 98% ported to D, with another major part converted over the year.<\/p>\n<h2 id=\"thedcommunity\">The D Community<\/h2>\n<p>More companies invested in D in 2018. Hosted by <a href=\"https:\/\/www.qa-systems.de\/\">QA Systems<\/a>, <a href=\"https:\/\/dconf.org\/2018\/\">DConf 2018 was held<\/a> in Munich, Germany, the first time DConf has been to that city (and the third time in Germany, after taking place in Berlin in <a href=\"https:\/\/dconf.org\/2016\/\">2016<\/a> and <a href=\"https:\/\/dconf.org\/2017\/\">2017<\/a>). Symmetry Investments sponsored the successful <a href=\"https:\/\/dlang.org\/blog\/symmetry-autumn-of-code\/\">Symmetry Autumn of Code<\/a>, funding three students to work on D-related projects.<\/p>\n<p><a href=\"https:\/\/run.dlang.io\/\">run.dlang.io came out<\/a> at the end of 2017 and grew in popularity throughout 2018, becoming the new standard for running D code online, including from <a href=\"https:\/\/dlang.org\/\">the dlang.org homepage<\/a>. It even supports a whitelist of third-party libraries.<\/p>\n<p><a href=\"https:\/\/tour.dlang.org\/\">The dlang-tour website<\/a> gained a few new translations from the community, including Vietnamese, Portugese, French, Turkish, German, and Ukrainian.<\/p>\n<p>The D Language Foundation was busy in 2018 as well. They received <a href=\"https:\/\/opencollective.com\/dlang\">over $5000 on Open Collective<\/a>, $3000 of which was earmarked to support development of <a href=\"https:\/\/github.com\/Pure-D\/code-d\">the code-d VS Code plugin<\/a> and <a href=\"https:\/\/github.com\/Pure-D\/serve-d\">the language server<\/a> that drives it. With <a href=\"https:\/\/dlang.org\/blog\/2018\/11\/10\/the-new-fundraising-campaign\/\">a successful campaign launched through Flipcause<\/a>, the DLF was able to hire a pull request manager for three months. <a href=\"https:\/\/dlang.org\/foundation\/donate.html\">Donations through all platforms<\/a> allowed them to fund some outreach efforts as well as student work via scholarships. To increase visibility, they submitted a history of D paper to the <a href=\"https:\/\/hopl4.sigplan.org\/\">Fourth ACM SIGPLAN History of Programming Languages Conference<\/a>.<\/p>\n<p>Over 2,500 pull results have now been merged by the dlang-bot on GitHub, and the Project Tester has now gained <sub>50<\/sub> projects that it tests on every PR to give real-world data on compiler regressions and the impact of breakages.<\/p>\n<p><a href=\"https:\/\/github.com\/dlang\/DIPs\/blob\/99b09355e1161a8288a9d1e4a6a99a3cc58f850f\/DIPs\/accepted\/DIP1014.md\">DIP 1014, \u201cHooking D\u2019s struct move semantics\u201d<\/a>, was also accepted. It will open some doors that were closed by design in old D, but that many developers had found limiting. Before, the compiler could move your structs whenever it wanted. Now, it will be hookable to give more control to the programmer and avoid a nasty case of bugs.<\/p>\n<p>I opened up my <a href=\"https:\/\/dpldocs.info\/\">documentation generation website at dpldocs.info<\/a> to all DUB projects this year, and upstream linked to it, encouraging D library authors to better document their libraries and allowing users to better evaluate the libraries before downloading them.<\/p>\n<p>On Twitter, <a href=\"https:\/\/twitter.com\/dlang_ng\">@dlang_ng was started<\/a> and has gained about 200 followers. All announcement topics from the <a href=\"https:\/\/forum.dlang.org\/group\/announce\">Announce forum<\/a> (aka <a href=\"https:\/\/digitalmars.com\/NewsGroup.html\">the digitalmars.D.announce newsgroup<\/a>) are tweeted out here.<\/p>\n<p>2018 also saw community announcements of the autowrap and dpp projects. <a href=\"https:\/\/github.com\/kaleidicassociates\/autowrap\">autowrap automatically wraps<\/a> existing D code to be used from other environments, while <a href=\"https:\/\/github.com\/atilaneves\/dpp\">dpp runs a C pre-processor over D code<\/a> to make it possible to use C headers, unmodified, macros and all, directly in D. These two projects show the community\u2019s desire to integrate D more fully into existing codebases and projects.<\/p>\n<p>Of course, not all is perfect in the D development community, including a few areas where this author would like to see improvement.<\/p>\n<p>The most +1-ed PR on DMD, <a href=\"https:\/\/github.com\/dlang\/dmd\/pull\/7988\">a string interpolation implementation<\/a> (and a very elegant approach in this writer\u2019s opinion), remains open and of uncertain status, despite a renewed effort to get it merged in December. Similarly, <a href=\"https:\/\/dlang.org\/blog\/2018\/02\/28\/the-state-of-d-2018-survey\/\">the State of D 2018 Survey<\/a> identified <a href=\"https:\/\/dlang.typeform.com\/report\/H1GTak\/PY9NhHkcBFG0t6ig\">several areas for improvement<\/a>. Very few of these came to pass in 2018, though some progress was made. We deprecated some cruft, but auto-decoding, one of the top-five disliked Phobos features in the survey and one often derided in the forums, remains in place. We are still using Bugzilla, which got an average of 3.27 satisfaction rating out of a possible 5 stars in the survey. We achieved fewer regressions, but added even more to the attribute bloat. We have <a href=\"https:\/\/dlang.org\/blog\/\">an official blog<\/a> and <a href=\"https:\/\/dconf.org\">the annual DConf<\/a>, but the D Language Foundation\u2019s inner workings are still opaque.<\/p>\n<p>It would be great if some of these weak points are addressed among the improvements and changes in 2019.<\/p>\n<h2 id=\"thedubpackagemanager\">The DUB Package Manager<\/h2>\n<p><a href=\"https:\/\/code.dlang.org\/\">The code.dlang.org website<\/a> received some criticism in 2017, and it was addressed in 2018. The site got a new front page with usage statistics and project ranking based on GitHub info. The DUB program itself got faster and more stable, no longer going online on every run to check for updates, and achieving better online uptime.<\/p>\n<p><a href=\"https:\/\/github.com\/libmir\/mir\">The Mir library<\/a>, which has algorithms, collections, and more written to be 100% <code>-betterC<\/code> compatible (which, of course, means it also works in all other D environments, too), is now the fifth-most popular package on the DUB registry, while <a href=\"https:\/\/github.com\/atilaneves\/unit-threaded\">the unit testing library unit-threaded<\/a> takes the third-place slot. First, second, and fourth are all <a href=\"https:\/\/vibed.org\/\">related to vibe.d<\/a>, which is the project DUB was originally created to support.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>2018 was a really good year for D. There is still much work to do, but worthwhile developments in all facets of the language and ecosystem gave me renewed excitement going into 2019. I expect that March 2019 release of D is going to be another big step toward improving the best programming language we have on Earth today!<\/p>\n<hr \/>\n<p><em>Adam Ruppe is the author of <a href=\"http:\/\/amzn.to\/1ZTE47m\">D Cookbook<\/a> and maintainer of <a href=\"http:\/\/arsdnet.net\/this-week-in-d\">This Week in D<\/a>. Modules from his freely available <a href=\"https:\/\/github.com\/adamdruppe\/arsd\">arsd package<\/a> are used throughout the D community. He is also known for his <a href=\"http:\/\/dconf.org\/2014\/talks\/ruppe.html\">legendary DConf 2014 presentation<\/a>.<\/em><\/p>\n<hr \/>\n<h2 id=\"addendum\">Addendum<\/h2>\n<p>There were a total of 166 contributors listed on the DMD changelog in 2018. Special thanks to them and to all the others in the D community who flesh out the ecosystem and make our favorite programming language!<\/p>\n<ul>\n<li>0xEAB<\/li>\n<li>Adam D. Ruppe<\/li>\n<li>Alexandru Caciulescu<\/li>\n<li>Alexandru Jercaianu<\/li>\n<li>Alexandru ermicioi<\/li>\n<li>Alexibu<\/li>\n<li>Ali Akhtarzada<\/li>\n<li>Ali \u00c7ehreli<\/li>\n<li>Andrei Alexandrescu<\/li>\n<li>Andrei-Cristian VASILE (87585)<\/li>\n<li>Andrey Penechko<\/li>\n<li>Andy Smith<\/li>\n<li>Aravinda VK<\/li>\n<li>Arun Chandrasekaran<\/li>\n<li>Atila Neves<\/li>\n<li>BBasile<\/li>\n<li>Basile Burg<\/li>\n<li>Bastiaan Veelo<\/li>\n<li>Benoit Rostykus<\/li>\n<li>Brad Roberts<\/li>\n<li>Brian Schott<\/li>\n<li>Carsten Schlote<\/li>\n<li>Chris Coutinho<\/li>\n<li>Daniel Kozak<\/li>\n<li>Dashster<\/li>\n<li>David Bennett<\/li>\n<li>David Gileadi<\/li>\n<li>David Nadlinger<\/li>\n<li>Denis Feklushkin<\/li>\n<li>Diederik de Groot<\/li>\n<li>Dmitry Olshansky<\/li>\n<li>Dragos Carp<\/li>\n<li>Duncan Paterson<\/li>\n<li>Eduard Staniloiu<\/li>\n<li>Elias Batek<\/li>\n<li>Erik van Velzen<\/li>\n<li>Eugen Wissner<\/li>\n<li>FeepingCreature<\/li>\n<li>GabyForceQ<\/li>\n<li>Giles Bathgate<\/li>\n<li>GoaLitiuM<\/li>\n<li>Greg V<\/li>\n<li>H. S. Teoh<\/li>\n<li>Harry T. Vennik<\/li>\n<li>Hiroki Noda<\/li>\n<li>H\u00e9ctor Barreras Almarcha [Dechcaudron]<\/li>\n<li>Iain Buclaw<\/li>\n<li>Ilya Yaroshenko<\/li>\n<li>Ionut<\/li>\n<li>Jack Stouffer<\/li>\n<li>Jacob Carlborg<\/li>\n<li>Jan Jurzitza<\/li>\n<li>Jean-Louis Leroy<\/li>\n<li>JinShil<\/li>\n<li>Joakim Noah<\/li>\n<li>Johan Engelen<\/li>\n<li>Johannes Loher<\/li>\n<li>Johannes Pfau<\/li>\n<li>John Belmonte<\/li>\n<li>John Colvin<\/li>\n<li>Jon Degenhardt<\/li>\n<li>Jonathan M Davis<\/li>\n<li>Jonathan Marler<\/li>\n<li>Jordi Sayol<\/li>\n<li>Joseph Rushton Wakeling<\/li>\n<li>Kai Nacke<\/li>\n<li>Kevin De Keyser<\/li>\n<li>Kotet<\/li>\n<li>Laeeth Isharc<\/li>\n<li>Lance Bachmeier<\/li>\n<li>Leandro Lucarella<\/li>\n<li>LemonBoy<\/li>\n<li>Lucia Mcojocaru<\/li>\n<li>Lu\u00eds Marques<\/li>\n<li>Manu Evans<\/li>\n<li>Manuel Maier<\/li>\n<li>Markus F.X.J. Oberhumer<\/li>\n<li>Martin Kinkelin<\/li>\n<li>Martin Krejcirik<\/li>\n<li>Martin Nowak<\/li>\n<li>Mathias Baumann<\/li>\n<li>Mathias Lang<\/li>\n<li>Mathis Beer<\/li>\n<li>MetaLang<\/li>\n<li>Michael Parker<\/li>\n<li>Mihails Strasuns<\/li>\n<li>Mike Franklin<\/li>\n<li>Mike Parker<\/li>\n<li>M\u00e1rcio Martins<\/li>\n<li>Nathan Sashihara<\/li>\n<li>Nemanja Boric<\/li>\n<li>Nicholas Lindsay Wilson<\/li>\n<li>Nicholas Wilson<\/li>\n<li>Nick Treleaven<\/li>\n<li>Oleg Nykytenko<\/li>\n<li>Patrick Schl\u00fcter<\/li>\n<li>Paul Backus<\/li>\n<li>Per Nordl\u00f6w<\/li>\n<li>Petar Kirov<\/li>\n<li>Pjotr Prins<\/li>\n<li>Pradeep Gowda<\/li>\n<li>Quirin F. Schroll<\/li>\n<li>Rados\u0142aw Rusiniak<\/li>\n<li>Radu Racariu<\/li>\n<li>Rainer Schuetze<\/li>\n<li>Razvan Nitu<\/li>\n<li>Remi Thebault<\/li>\n<li>Robert burner Schadek<\/li>\n<li>Roman Chistokhodov<\/li>\n<li>Ryan David Sheasby<\/li>\n<li>Ryan Frame<\/li>\n<li>Sebastian Wilzbach<\/li>\n<li>Simen Kj\u00e6r\u00e5s<\/li>\n<li>Simon Naarmann<\/li>\n<li>Spoov<\/li>\n<li>Stanislav Blinov<\/li>\n<li>Stefan Koch<\/li>\n<li>Steven Schveighoffer<\/li>\n<li>Superstar64<\/li>\n<li>Temtaime<\/li>\n<li>Tero H\u00e4nninen<\/li>\n<li>Thibaut CHARLES<\/li>\n<li>Thomas Mader<\/li>\n<li>Timon Gehr<\/li>\n<li>Timoses<\/li>\n<li>Timothee Cour<\/li>\n<li>Tom\u00e1\u0161 Chaloupka<\/li>\n<li>Tyler Knott<\/li>\n<li>Unknown<\/li>\n<li>Vlad Vitan<\/li>\n<li>Vladimir Panteleev<\/li>\n<li>Walter Bright<\/li>\n<li>Yannick Koechlin<\/li>\n<li>Yuxuan Shui<\/li>\n<li>Zach Tollen<\/li>\n<li>Zevenberge<\/li>\n<li>aG0aep6G<\/li>\n<li>abaga129<\/li>\n<li>byebye<\/li>\n<li>carblue<\/li>\n<li>cedretaber<\/li>\n<li>crimaniak<\/li>\n<li>devel<\/li>\n<li>deviator<\/li>\n<li>dhasenan<\/li>\n<li>dmdw64<\/li>\n<li>drug007<\/li>\n<li>dukc<\/li>\n<li>gapdan<\/li>\n<li>glitchbunny<\/li>\n<li>growlercab<\/li>\n<li>jercaianu<\/li>\n<li>jmh530<\/li>\n<li>kinke<\/li>\n<li>leitimmel<\/li>\n<li>look-at-me<\/li>\n<li>n8sh<\/li>\n<li>rracariu<\/li>\n<li>shoo<\/li>\n<li>shove70<\/li>\n<li>skl131313<\/li>\n<li>thaven<\/li>\n<li>viktor<\/li>\n<li>wazar<\/li>\n<li>olframw<\/li>\n<li>yashikno<\/li>\n<li>\u013dudov\u00edt Lu\u010deni\u010d<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>2018 was one of the biggest years in D we\u2019ve had for a while. It was the first complete year that DMD stuck to a steady release schedule. Over the course of the year, the language got new features and cruft cleanup. The compiler even got some new user-facing features. At the same time, the [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,6,9],"tags":[],"_links":{"self":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1924"}],"collection":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/comments?post=1924"}],"version-history":[{"count":3,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1924\/revisions"}],"predecessor-version":[{"id":1927,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1924\/revisions\/1927"}],"wp:attachment":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/media?parent=1924"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/categories?post=1924"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/tags?post=1924"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}