Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://arsdnet.net/this-week-in-d/twid.rss

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>This Week in D</title><description>A weekly newsletter about what's going on in the D Programming Language</description><link>http://arsdnet.net/this-week-in-d/</link><ttl>5000</ttl><atom:link rel="self" type="application/rss+xml" href="http://arsdnet.net/this-week-in-d/twid.rss"></atom:link><lastBuildDate>Sun, 29 May 2016 12:00:00 GMT</lastBuildDate><item><title>Issue #144</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-nov-26.html</link><guid>http://arsdnet.net/this-week-in-d/2017-nov-26.html</guid><pubDate>Sun, 26 Nov 2017 12:00:00 GMT</pubDate><description>
  3. &lt;div id=&quot;body-container&quot;&gt;
  4. &lt;h1&gt;
  5. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7. &lt;span id=&quot;title-date&quot;&gt;November 26, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8. &lt;br /&gt;&lt;br /&gt;
  9. &lt;br /&gt;&lt;br /&gt;
  10. &lt;div id=&quot;preface&quot;&gt;
  11.  
  12. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13.  
  14. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  15.  
  16. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  17.  
  18. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  19.  
  20. &lt;/div&gt;
  21. &lt;br /&gt;&lt;br /&gt;
  22. &lt;h2&gt;Statistics&lt;/h2&gt;
  23. &lt;br /&gt;&lt;br /&gt;
  24. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  25. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-11-20&amp;amp;chfieldto=2017-11-26&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  26. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-11-20&amp;amp;chfieldto=2017-11-26&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  27. 48 pull requests merged into the language:
  28. &lt;br /&gt;&lt;br /&gt;
  29. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-20..2017-11-26&quot;&gt;29 into DMD&lt;/a&gt;,
  30. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-20..2017-11-26&quot;&gt;15 into Phobos&lt;/a&gt;, and
  31. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-20..2017-11-26&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  32. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-20..2017-11-26&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  33. &lt;/li&gt;&lt;/ul&gt;
  34. &lt;br /&gt;&lt;br /&gt;
  35. &lt;h2&gt;In the community&lt;/h2&gt;
  36. &lt;br /&gt;&lt;br /&gt;
  37. &lt;h3&gt;Community announcements&lt;/h3&gt;
  38. &lt;br /&gt;&lt;br /&gt;
  39. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ov6cgo$1e3e$1@digitalmars.com&quot;&gt;Beta 2.077.1&lt;/a&gt;
  40. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/a1f75df4a04349feae1c07ad42729e81@chiroptera&quot;&gt;remake of remake of Konami's Knightmare&lt;/a&gt;
  41. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dowqdrwtaklwvocjytqc@forum.dlang.org&quot;&gt;Intellij D Language v1.15.2&lt;/a&gt;
  42. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ov20hp$1ip6$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - December 14, 2017 - &amp;quot;Experimenting with Link Time Optimization&amp;quot; by Jon Degenhardt&lt;/a&gt;
  43. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mnprnqduqenxgcqowzdg@forum.dlang.org&quot;&gt;Project Highlight: Diamond MVC Framework&lt;/a&gt;
  44. &lt;/li&gt;&lt;/ul&gt;
  45. &lt;br /&gt;&lt;br /&gt;
  46. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  47. &lt;br /&gt;&lt;br /&gt;
  48. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  49. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  50. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  51. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  52. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  53. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  54. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  55. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  56. &lt;/li&gt;&lt;/ul&gt;
  57.  
  58.  
  59. &lt;/div&gt;
  60. </description></item><item><title>Issue #143</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-nov-19.html</link><guid>http://arsdnet.net/this-week-in-d/2017-nov-19.html</guid><pubDate>Sun, 19 Nov 2017 12:00:00 GMT</pubDate><description>
  61. &lt;div id=&quot;body-container&quot;&gt;
  62. &lt;h1&gt;
  63. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  64. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  65. &lt;span id=&quot;title-date&quot;&gt;November 19, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  66. &lt;br /&gt;&lt;br /&gt;
  67. &lt;br /&gt;&lt;br /&gt;
  68. &lt;div id=&quot;preface&quot;&gt;
  69.  
  70. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  71.  
  72. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  73.  
  74. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  75.  
  76. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  77.  
  78. &lt;/div&gt;
  79. &lt;br /&gt;&lt;br /&gt;
  80. &lt;h2&gt;Statistics&lt;/h2&gt;
  81. &lt;br /&gt;&lt;br /&gt;
  82. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  83. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-11-13&amp;amp;chfieldto=2017-11-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  84. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-11-13&amp;amp;chfieldto=2017-11-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;10 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  85. 47 pull requests merged into the language:
  86. &lt;br /&gt;&lt;br /&gt;
  87. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-13..2017-11-19&quot;&gt;29 into DMD&lt;/a&gt;,
  88. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-13..2017-11-19&quot;&gt;17 into Phobos&lt;/a&gt;, and
  89. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-13..2017-11-19&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  90. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-13..2017-11-19&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  91. &lt;/li&gt;&lt;/ul&gt;
  92. &lt;br /&gt;&lt;br /&gt;
  93. &lt;h2&gt;In the community&lt;/h2&gt;
  94. &lt;br /&gt;&lt;br /&gt;
  95. &lt;h3&gt;Community announcements&lt;/h3&gt;
  96. &lt;br /&gt;&lt;br /&gt;
  97. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/nacbofswxrnmlfhcjqvb@forum.dlang.org&quot;&gt;Russian AI Cup 2017 - D language support&lt;/a&gt;
  98. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ountej$14dq$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - November 30, 2017 - &amp;quot;DCompute: Harnessing all your hardware&amp;quot; by Nicholas Wilson&lt;/a&gt;
  99. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vaimwounnqenapgsctho@forum.dlang.org&quot;&gt;DConf 2018 Call for Submissions&lt;/a&gt;
  100. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bskpxhrqyfkvaqzoospx@forum.dlang.org&quot;&gt;New LDC feature: dynamic compilation&lt;/a&gt;
  101. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nbvafhncfygcqcnvjrso@forum.dlang.org&quot;&gt;Munich D Meetup November 2017&lt;/a&gt;
  102. &lt;/li&gt;&lt;/ul&gt;
  103. &lt;br /&gt;&lt;br /&gt;
  104. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  105. &lt;br /&gt;&lt;br /&gt;
  106. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  107. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  108. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  109. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  110. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  111. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  112. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  113. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  114. &lt;/li&gt;&lt;/ul&gt;
  115.  
  116.  
  117. &lt;/div&gt;
  118. </description></item><item><title>Issue #142</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-nov-12.html</link><guid>http://arsdnet.net/this-week-in-d/2017-nov-12.html</guid><pubDate>Sun, 12 Nov 2017 12:00:00 GMT</pubDate><description>
  119. &lt;div id=&quot;body-container&quot;&gt;
  120. &lt;h1&gt;
  121. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  122. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  123. &lt;span id=&quot;title-date&quot;&gt;November 12, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  124. &lt;br /&gt;&lt;br /&gt;
  125. &lt;br /&gt;&lt;br /&gt;
  126. &lt;div id=&quot;preface&quot;&gt;
  127.  
  128. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  129.  
  130. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  131.  
  132. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  133.  
  134. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  135.  
  136. &lt;/div&gt;
  137. &lt;br /&gt;&lt;br /&gt;
  138. &lt;h2&gt;Statistics&lt;/h2&gt;
  139. &lt;br /&gt;&lt;br /&gt;
  140. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  141. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-11-06&amp;amp;chfieldto=2017-11-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  142. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-11-06&amp;amp;chfieldto=2017-11-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  143. 36 pull requests merged into the language:
  144. &lt;br /&gt;&lt;br /&gt;
  145. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-06..2017-11-12&quot;&gt;19 into DMD&lt;/a&gt;,
  146. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-06..2017-11-12&quot;&gt;12 into Phobos&lt;/a&gt;, and
  147. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-06..2017-11-12&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  148. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-11-06..2017-11-12&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  149. &lt;/li&gt;&lt;/ul&gt;
  150. &lt;br /&gt;&lt;br /&gt;
  151. &lt;h2&gt;In the community&lt;/h2&gt;
  152. &lt;br /&gt;&lt;br /&gt;
  153. &lt;h3&gt;Community announcements&lt;/h3&gt;
  154. &lt;br /&gt;&lt;br /&gt;
  155. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/axymbtayheyfksurmcmn@forum.dlang.org&quot;&gt;LDC 1.6.0-beta1&lt;/a&gt;
  156. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pevnhyirmamjvzqqrasy@forum.dlang.org&quot;&gt;New QtE5 version and the test it  - mini ide ide5&lt;/a&gt;
  157. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kudnahdzvnhfovtdxjoe@forum.dlang.org&quot;&gt;The latest Terrarium TV 1.8.1 has been updated.&lt;/a&gt;
  158. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hanzvwvdbrnnsdyzucpt@forum.dlang.org&quot;&gt;The final form of the keyboard = ShionKeys&lt;/a&gt;
  159. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ou7crc$1j7a$1@digitalmars.com&quot;&gt;Boston D Meetup 11/17/2017&lt;/a&gt;
  160. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qxkzedzfhlvgbfmhwppc@forum.dlang.org&quot;&gt;mir-linux-kernel 1.0.0: Linux system call numbers for different architectures&lt;/a&gt;
  161. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wjeukumptibsfkwzbzxl@forum.dlang.org&quot;&gt;ircbod2 - easy IRC bots in D&lt;/a&gt;
  162. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/momzuthlmnkibxmayyuu@forum.dlang.org&quot;&gt;Diamond Full-stack MVC / Template Engine - v2.5.0 Released!&lt;/a&gt;
  163. &lt;/li&gt;&lt;/ul&gt;
  164. &lt;br /&gt;&lt;br /&gt;
  165. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  166. &lt;br /&gt;&lt;br /&gt;
  167. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  168. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  169. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  170. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  171. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  172. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  173. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  174. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  175. &lt;/li&gt;&lt;/ul&gt;
  176.  
  177.  
  178. &lt;/div&gt;
  179. </description></item><item><title>Issue #141</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-oct-22.html</link><guid>http://arsdnet.net/this-week-in-d/2017-oct-22.html</guid><pubDate>Mon, 23 Oct 2017 12:00:00 GMT</pubDate><description>
  180. &lt;div id=&quot;body-container&quot;&gt;
  181. &lt;h1&gt;
  182. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  183. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  184. &lt;span id=&quot;title-date&quot;&gt;October 23, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  185. &lt;br /&gt;&lt;br /&gt;
  186. &lt;br /&gt;&lt;br /&gt;
  187. &lt;div id=&quot;preface&quot;&gt;
  188.  
  189. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  190.  
  191. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  192.  
  193. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  194.  
  195. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  196.  
  197. &lt;/div&gt;
  198. &lt;br /&gt;&lt;br /&gt;
  199. &lt;h2&gt;Statistics&lt;/h2&gt;
  200. &lt;br /&gt;&lt;br /&gt;
  201. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  202. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-10-16&amp;amp;chfieldto=2017-10-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  203. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-10-16&amp;amp;chfieldto=2017-10-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  204. 24 pull requests merged into the language:
  205. &lt;br /&gt;&lt;br /&gt;
  206. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-16..2017-10-22&quot;&gt;10 into DMD&lt;/a&gt;,
  207. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-16..2017-10-22&quot;&gt;10 into Phobos&lt;/a&gt;, and
  208. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-16..2017-10-22&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  209. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-16..2017-10-22&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  210. &lt;/li&gt;&lt;/ul&gt;
  211. &lt;br /&gt;&lt;br /&gt;
  212. &lt;h2&gt;In the community&lt;/h2&gt;
  213. &lt;br /&gt;&lt;br /&gt;
  214. &lt;h3&gt;Community announcements&lt;/h3&gt;
  215. &lt;br /&gt;&lt;br /&gt;
  216. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/lpzwgfoeukxmhtvdjgog@forum.dlang.org&quot;&gt;Unit Testing in Action&lt;/a&gt;
  217. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hnevfukfalthhveonxav@forum.dlang.org&quot;&gt;LDC 1.5.0-beta1&lt;/a&gt;
  218. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ztqbasmbkqorbducrcjx@forum.dlang.org&quot;&gt;London senior DevOps job and two London [D-ish] developer roles&lt;/a&gt;
  219. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/osg34t$2l5s$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - October 26, 2017 - &amp;quot;D Fibers&amp;quot; by Ali &amp;#199;ehreli&lt;/a&gt;
  220. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wplnstgyltzzogvbttuq@forum.dlang.org&quot;&gt;DCompute target: Intel to Introduce New CPU-FPGA Hybrid Chip Supported by Acceleration Stack&lt;/a&gt;
  221. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wcdhxpktyztmznsqbzgf@forum.dlang.org&quot;&gt;Some tasks in D app&lt;/a&gt;
  222. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/os2ntt$20ao$1@digitalmars.com&quot;&gt;Beta 2.077.0&lt;/a&gt;
  223. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/osdisd$11br$1@digitalmars.com&quot;&gt;Boston D Lang Meetup 10/29/2017&lt;/a&gt;
  224. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xsucupdcozkduavwwjoi@forum.dlang.org&quot;&gt;Diamond MVC / Template Engine - v2.1.0 Released&lt;/a&gt;
  225. &lt;/li&gt;&lt;/ul&gt;
  226. &lt;br /&gt;&lt;br /&gt;
  227. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  228. &lt;br /&gt;&lt;br /&gt;
  229. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  230. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  231. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  232. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  233. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  234. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  235. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  236. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  237. &lt;/li&gt;&lt;/ul&gt;
  238.  
  239.  
  240. &lt;/div&gt;
  241. </description></item><item><title>Issue #140</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-oct-15.html</link><guid>http://arsdnet.net/this-week-in-d/2017-oct-15.html</guid><pubDate>Sun, 15 Oct 2017 12:00:00 GMT</pubDate><description>
  242. &lt;div id=&quot;body-container&quot;&gt;
  243. &lt;h1&gt;
  244. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  245. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  246. &lt;span id=&quot;title-date&quot;&gt;October 15, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  247. &lt;br /&gt;&lt;br /&gt;
  248. &lt;br /&gt;&lt;br /&gt;
  249. &lt;div id=&quot;preface&quot;&gt;
  250.  
  251. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  252.  
  253. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  254.  
  255. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  256.  
  257. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  258.  
  259. &lt;/div&gt;
  260. &lt;br /&gt;&lt;br /&gt;
  261. &lt;h2&gt;Statistics&lt;/h2&gt;
  262. &lt;br /&gt;&lt;br /&gt;
  263. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  264. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-10-09&amp;amp;chfieldto=2017-10-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  265. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-10-09&amp;amp;chfieldto=2017-10-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  266. 33 pull requests merged into the language:
  267. &lt;br /&gt;&lt;br /&gt;
  268. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-09..2017-10-15&quot;&gt;22 into DMD&lt;/a&gt;,
  269. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-09..2017-10-15&quot;&gt;6 into Phobos&lt;/a&gt;, and
  270. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-09..2017-10-15&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  271. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-10-09..2017-10-15&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  272. &lt;/li&gt;&lt;/ul&gt;
  273. &lt;br /&gt;&lt;br /&gt;
  274. &lt;h2&gt;In the community&lt;/h2&gt;
  275. &lt;br /&gt;&lt;br /&gt;
  276. &lt;h3&gt;Community announcements&lt;/h3&gt;
  277. &lt;br /&gt;&lt;br /&gt;
  278. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/os0fqu$2r8k$1@digitalmars.com&quot;&gt;GtkD 3.7.0 released, GTK+ with D.&lt;/a&gt;
  279. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/avjjswhakdiderthpzvb@forum.dlang.org&quot;&gt;DCompute v0.1.0 supporting OpenCL 2.1+ and CUDA&lt;/a&gt;
  280. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rmclxuwhqsrvrsouvfxd@forum.dlang.org&quot;&gt;Very tiny script for testing D projects with Pijul version control system.&lt;/a&gt;
  281. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/03dbfb6660ef4ed5a90c5af0674ab5b3@chiroptera&quot;&gt;sample collaborative notepad implementation&lt;/a&gt;
  282. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cihihuspqffvqkmnzytz@forum.dlang.org&quot;&gt;Books Suggest&lt;/a&gt;
  283. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ormql9$26kv$1@digitalmars.com&quot;&gt;iopipe alpha 0.0.1 version&lt;/a&gt;
  284. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/asyfhfqowtbkofmkntow@forum.dlang.org&quot;&gt;Diamond MVC / Template Engine - v2.0.4 Released&lt;/a&gt;
  285. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/orgjoj$osc$1@digitalmars.com&quot;&gt;Release D v2.076.1&lt;/a&gt;
  286. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oqdeehggdxouflqiafef@forum.dlang.org&quot;&gt;mir-algorithm v0.6.21: Python and C++ interconnection + API sugar&lt;/a&gt;
  287. &lt;/li&gt;&lt;/ul&gt;
  288. &lt;br /&gt;&lt;br /&gt;
  289. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  290. &lt;br /&gt;&lt;br /&gt;
  291. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  292. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  293. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  294. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  295. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  296. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  297. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  298. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  299. &lt;/li&gt;&lt;/ul&gt;
  300.  
  301.  
  302. &lt;/div&gt;
  303. </description></item><item><title>Issue #139</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-sep-24.html</link><guid>http://arsdnet.net/this-week-in-d/2017-sep-24.html</guid><pubDate>Sun, 24 Sep 2017 12:00:00 GMT</pubDate><description>
  304. &lt;div id=&quot;body-container&quot;&gt;
  305. &lt;h1&gt;
  306. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  307. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  308. &lt;span id=&quot;title-date&quot;&gt;September 24, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  309. &lt;br /&gt;&lt;br /&gt;
  310. &lt;br /&gt;&lt;br /&gt;
  311. &lt;div id=&quot;preface&quot;&gt;
  312.  
  313. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  314.  
  315. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  316.  
  317. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  318.  
  319. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  320.  
  321. &lt;/div&gt;
  322. &lt;br /&gt;&lt;br /&gt;
  323. &lt;h2&gt;Statistics&lt;/h2&gt;
  324. &lt;br /&gt;&lt;br /&gt;
  325. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  326. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-09-18&amp;amp;chfieldto=2017-09-24&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  327. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-09-18&amp;amp;chfieldto=2017-09-24&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  328. 18 pull requests merged into the language:
  329. &lt;br /&gt;&lt;br /&gt;
  330. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-18..2017-09-24&quot;&gt;12 into DMD&lt;/a&gt;,
  331. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-18..2017-09-24&quot;&gt;5 into Phobos&lt;/a&gt;, and
  332. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-18..2017-09-24&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  333. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-18..2017-09-24&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  334. &lt;/li&gt;&lt;/ul&gt;
  335. &lt;br /&gt;&lt;br /&gt;
  336. &lt;h2&gt;In the community&lt;/h2&gt;
  337. &lt;br /&gt;&lt;br /&gt;
  338. &lt;h3&gt;Community announcements&lt;/h3&gt;
  339. &lt;br /&gt;&lt;br /&gt;
  340. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/deouzeanraujeqwufgkl@forum.dlang.org&quot;&gt;GDC in Slackware and a bit about GDC development&lt;/a&gt;
  341. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qsjdgwiwzlmxprzyktli@forum.dlang.org&quot;&gt;DerelictSDL2 3.1.0-alpha.1&lt;/a&gt;
  342. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/uqtchuiartecoskexbsf@forum.dlang.org&quot;&gt;Godbolt.org: mir-algorithm was added&lt;/a&gt;
  343. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/opsu1u$uue$1@digitalmars.com&quot;&gt;mysqln - tagged bugfix release v1.1.1&lt;/a&gt;
  344. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/avythykaaoaqleafszdh@forum.dlang.org&quot;&gt;Munich D Meetup - October, 11, 2017: Andrei Alexandrescu: Design By Introspection&lt;/a&gt;
  345. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wzvflqmwaiatynqyeuic@forum.dlang.org&quot;&gt;Trial v0.4.0 and visual-trial v0.1.0 are out&lt;/a&gt;
  346. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/opqagr$guk$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - September 28, 2017 - &amp;quot;Open Methods: From C++ to D&amp;quot; by Jean-Louis Leroy&lt;/a&gt;
  347. &lt;/li&gt;&lt;/ul&gt;
  348. &lt;br /&gt;&lt;br /&gt;
  349. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  350. &lt;br /&gt;&lt;br /&gt;
  351. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  352. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  353. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  354. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  355. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  356. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  357. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  358. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  359. &lt;/li&gt;&lt;/ul&gt;
  360.  
  361.  
  362. &lt;/div&gt;
  363. </description></item><item><title>Issue #138</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-sep-10.html</link><guid>http://arsdnet.net/this-week-in-d/2017-sep-10.html</guid><pubDate>Sun, 10 Sep 2017 12:00:00 GMT</pubDate><description>
  364. &lt;div id=&quot;body-container&quot;&gt;
  365. &lt;h1&gt;
  366. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  367. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  368. &lt;span id=&quot;title-date&quot;&gt;September 10, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  369. &lt;br /&gt;&lt;br /&gt;
  370. &lt;br /&gt;&lt;br /&gt;
  371. &lt;div id=&quot;preface&quot;&gt;
  372.  
  373. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  374.  
  375. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  376.  
  377. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  378.  
  379. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  380.  
  381. &lt;/div&gt;
  382. &lt;br /&gt;&lt;br /&gt;
  383. &lt;h2&gt;Statistics&lt;/h2&gt;
  384. &lt;br /&gt;&lt;br /&gt;
  385. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  386. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-09-04&amp;amp;chfieldto=2017-09-10&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  387. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-09-04&amp;amp;chfieldto=2017-09-10&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  388. 26 pull requests merged into the language:
  389. &lt;br /&gt;&lt;br /&gt;
  390. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-04..2017-09-10&quot;&gt;14 into DMD&lt;/a&gt;,
  391. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-04..2017-09-10&quot;&gt;9 into Phobos&lt;/a&gt;, and
  392. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-04..2017-09-10&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  393. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-09-04..2017-09-10&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  394. &lt;/li&gt;&lt;/ul&gt;
  395. &lt;br /&gt;&lt;br /&gt;
  396. &lt;h2&gt;In the community&lt;/h2&gt;
  397. &lt;br /&gt;&lt;br /&gt;
  398. &lt;h3&gt;Community announcements&lt;/h3&gt;
  399. &lt;br /&gt;&lt;br /&gt;
  400. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/wywqvgpybnmuwzbvqtua@forum.dlang.org&quot;&gt;D on devdocs&lt;/a&gt;
  401. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/obbcfiqlmtsfwrsdprbr@forum.dlang.org&quot;&gt;A D blog post about my web server&lt;/a&gt;
  402. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ovqoxoymyrkzyakwykhy@forum.dlang.org&quot;&gt;Munich D Meetup September 2017&lt;/a&gt;
  403. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mailman.6561.1504553187.31550.digitalmars-d-announce@puremagic.com&quot;&gt;Hong Kong dlang Meetup&lt;/a&gt;
  404. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zmyzwyapytpomguiyzlr@forum.dlang.org&quot;&gt;[OT] LLVM 5.0 released - LDC mentioned in release notes&lt;/a&gt;
  405. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kotmdhvyrjdquwkdbzwi@forum.dlang.org&quot;&gt;iz 0.6.0&lt;/a&gt;
  406. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yheyujdwwehnualdfjqj@forum.dlang.org&quot;&gt;From the D Blog: The Evolution of the accessors Library&lt;/a&gt;
  407. &lt;/li&gt;&lt;/ul&gt;
  408. &lt;br /&gt;&lt;br /&gt;
  409. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  410. &lt;br /&gt;&lt;br /&gt;
  411. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  412. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  413. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  414. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  415. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  416. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  417. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  418. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  419. &lt;/li&gt;&lt;/ul&gt;
  420.  
  421.  
  422. &lt;/div&gt;
  423. </description></item><item><title>Issue #137</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-sep-03.html</link><guid>http://arsdnet.net/this-week-in-d/2017-sep-03.html</guid><pubDate>Sun, 03 Sep 2017 12:00:00 GMT</pubDate><description>
  424. &lt;div id=&quot;body-container&quot;&gt;
  425. &lt;h1&gt;
  426. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  427. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  428. &lt;span id=&quot;title-date&quot;&gt;September 3, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  429. &lt;br /&gt;&lt;br /&gt;
  430. &lt;br /&gt;&lt;br /&gt;
  431. &lt;div id=&quot;preface&quot;&gt;
  432.  
  433. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  434.  
  435. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  436.  
  437. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  438.  
  439. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  440.  
  441. &lt;/div&gt;
  442. &lt;br /&gt;&lt;br /&gt;
  443. &lt;h2&gt;Statistics&lt;/h2&gt;
  444. &lt;br /&gt;&lt;br /&gt;
  445. &lt;ul&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  446. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-08-28&amp;amp;chfieldto=2017-09-03&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;7 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  447. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-08-28&amp;amp;chfieldto=2017-09-03&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;12 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  448. 16 pull requests merged into the language:
  449. &lt;br /&gt;&lt;br /&gt;
  450. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-28..2017-09-03&quot;&gt;8 into DMD&lt;/a&gt;,
  451. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-28..2017-09-03&quot;&gt;3 into Phobos&lt;/a&gt;, and
  452. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-28..2017-09-03&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;br /&gt;&lt;br /&gt;
  453. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-28..2017-09-03&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  454. &lt;/li&gt;&lt;/ul&gt;
  455. &lt;br /&gt;&lt;br /&gt;
  456. &lt;h2&gt;In the community&lt;/h2&gt;
  457. &lt;br /&gt;&lt;br /&gt;
  458. &lt;h3&gt;Community announcements&lt;/h3&gt;
  459. &lt;br /&gt;&lt;br /&gt;
  460. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/fwsbrmkbqkolrsztxcoq@forum.dlang.org&quot;&gt;Delta - Bridge to the Delphi ecosystem&lt;/a&gt;
  461. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xflakrnydqmrjoixeqbl@forum.dlang.org&quot;&gt;dpeq - native PSQL extended query protocol client&lt;/a&gt;
  462. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ygbvnurvwezjtareevyo@forum.dlang.org&quot;&gt;GitBook about D on embedded ARM Linux&lt;/a&gt;
  463. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zxrupfwlnvpvbutyqghd@forum.dlang.org&quot;&gt;DlangUI v0.7.60 released&lt;/a&gt;
  464. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oobpf2$14c1$1@digitalmars.com&quot;&gt;Release D 2.076.0&lt;/a&gt;
  465. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rrwbbikxkqpwgljnxuxr@forum.dlang.org&quot;&gt;Open Methods: From C++ to D&lt;/a&gt;
  466. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oo5qja$2h1$1@digitalmars.com&quot;&gt;Released vibe.d 0.8.1&lt;/a&gt;
  467. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/blwnhgnhgrkpuomvlksd@forum.dlang.org&quot;&gt;D on Tiobe Index&lt;/a&gt;
  468. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ymduzapzhegdupzenttw@forum.dlang.org&quot;&gt;Phobos function and type highlighter for vim&lt;/a&gt;
  469. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/msnkwtrxfraypcegokyr@forum.dlang.org&quot;&gt;5 seconds agoDIP 1009--Improve Contract Usability--Formal Review Begins&lt;/a&gt;
  470. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/uanhthzxizvcxkhjhgov@forum.dlang.org&quot;&gt;DCompute: Driver APIs are here&lt;/a&gt;
  471. &lt;/li&gt;&lt;/ul&gt;
  472. &lt;br /&gt;&lt;br /&gt;
  473. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  474. &lt;br /&gt;&lt;br /&gt;
  475. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  476. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  477. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  478. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  479. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  480. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  481. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  482. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  483. &lt;/li&gt;&lt;/ul&gt;
  484.  
  485.  
  486. &lt;/div&gt;
  487. </description></item><item><title>Issue #136</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-aug-27.html</link><guid>http://arsdnet.net/this-week-in-d/2017-aug-27.html</guid><pubDate>Sun, 27 Aug 2017 12:00:00 GMT</pubDate><description>
  488. &lt;div id=&quot;body-container&quot;&gt;
  489. &lt;h1&gt;
  490. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  491. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  492. &lt;span id=&quot;title-date&quot;&gt;August 27, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  493.  
  494. &lt;div id=&quot;preface&quot;&gt;
  495.  
  496. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  497.  
  498. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  499.  
  500. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  501.  
  502. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  503.  
  504. &lt;/div&gt;
  505.  
  506. &lt;h2&gt;Statistics&lt;/h2&gt;
  507.  
  508. &lt;ul&gt;&lt;li&gt;
  509. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-08-21&amp;amp;chfieldto=2017-08-27&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  510. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-08-21&amp;amp;chfieldto=2017-08-27&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  511. 22 pull requests merged into the language:
  512.  
  513. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-21..2017-08-27&quot;&gt;11 into DMD&lt;/a&gt;,
  514. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-21..2017-08-27&quot;&gt;7 into Phobos&lt;/a&gt;, and
  515. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-21..2017-08-27&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  516. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-21..2017-08-27&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  517. &lt;/li&gt;&lt;/ul&gt;
  518.  
  519. &lt;h2&gt;In the community&lt;/h2&gt;
  520.  
  521. &lt;h3&gt;Community announcements&lt;/h3&gt;
  522.  
  523. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ojoyytdparflttnnaill@forum.dlang.org&quot;&gt;LDC 1.4.0-beta1&lt;/a&gt;
  524. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qogwmgdhklpolflabzal@forum.dlang.org&quot;&gt;Article: Writing Julia style multiple dispatch code in D&lt;/a&gt;
  525. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lyejkdiumtsgchagucrb@forum.dlang.org&quot;&gt;D as a Better C&lt;/a&gt;
  526. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zxgjvsgmsxszigyoenos@forum.dlang.org&quot;&gt;dub zsh completion&lt;/a&gt;
  527. &lt;/li&gt;&lt;/ul&gt;
  528.  
  529. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  530.  
  531. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  532. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  533. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  534. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  535. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  536. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  537. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  538. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  539. &lt;/li&gt;&lt;/ul&gt;
  540.  
  541.  
  542. &lt;/div&gt;
  543. </description></item><item><title>Issue #135</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-aug-13.html</link><guid>http://arsdnet.net/this-week-in-d/2017-aug-13.html</guid><pubDate>Sun, 13 Aug 2017 12:00:00 GMT</pubDate><description>
  544. &lt;div id=&quot;body-container&quot;&gt;
  545. &lt;h1&gt;
  546. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  547. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  548. &lt;span id=&quot;title-date&quot;&gt;August 13, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  549.  
  550. &lt;div id=&quot;preface&quot;&gt;
  551.  
  552. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  553.  
  554. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  555.  
  556. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  557.  
  558. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  559.  
  560. &lt;/div&gt;
  561.  
  562. &lt;h2&gt;Statistics&lt;/h2&gt;
  563.  
  564. &lt;ul&gt;&lt;li&gt;
  565. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-08-07&amp;amp;chfieldto=2017-08-13&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;18 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  566. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-08-07&amp;amp;chfieldto=2017-08-13&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  567. 34 pull requests merged into the language:
  568.  
  569. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-07..2017-08-13&quot;&gt;19 into DMD&lt;/a&gt;,
  570. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-07..2017-08-13&quot;&gt;9 into Phobos&lt;/a&gt;, and
  571. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-07..2017-08-13&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  572. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-08-07..2017-08-13&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  573. &lt;/li&gt;&lt;/ul&gt;
  574.  
  575. &lt;h2&gt;In the community&lt;/h2&gt;
  576.  
  577. &lt;h3&gt;Community announcements&lt;/h3&gt;
  578.  
  579. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/tdreypgzyonvmtlmipuj@forum.dlang.org&quot;&gt;I'm the new package maintainer for D on ArchLinux&lt;/a&gt;
  580. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ommc93$23q2$1@digitalmars.com&quot;&gt;Release candidate vibe.d 0.8.1-rc.1&lt;/a&gt;
  581. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oml9uo$73e$1@digitalmars.com&quot;&gt;bluejay - integration/application test runner&lt;/a&gt;
  582. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wleaoiovsnjsfafqqlxg@forum.dlang.org&quot;&gt;On Tilix and D: An Interview with Gerald Nunn&lt;/a&gt;
  583. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xqzruxuyocjgmjmfpzzp@forum.dlang.org&quot;&gt;DIP 1011-extern(delegate)--Formal Review Begins&lt;/a&gt;
  584. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ombthl$1h42$1@digitalmars.com&quot;&gt;Beta D 2.075.1&lt;/a&gt;
  585. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/owkuhgihfyyvukqjeidv@forum.dlang.org&quot;&gt;new russian Dlang book&lt;/a&gt;
  586. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mnootvaiikmavypbghwa@forum.dlang.org&quot;&gt;More sociomantic libraries and apps open-sourced!&lt;/a&gt;
  587. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kmzwgpemstebforqyhgf@forum.dlang.org&quot;&gt;KissRPC for dlang ver release.(Ultra high performance RPC)&lt;/a&gt;
  588. &lt;/li&gt;&lt;/ul&gt;
  589.  
  590. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  591.  
  592. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  593. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  594. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  595. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  596. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  597. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  598. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  599. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  600. &lt;/li&gt;&lt;/ul&gt;
  601.  
  602.  
  603. &lt;/div&gt;
  604. </description></item><item><title>Issue #134</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-aug-06.html</link><guid>http://arsdnet.net/this-week-in-d/2017-aug-06.html</guid><pubDate>Sun, 06 Aug 2017 12:00:00 GMT</pubDate><description>
  605. &lt;div id=&quot;body-container&quot;&gt;
  606. &lt;h1&gt;
  607. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  608. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  609. &lt;span id=&quot;title-date&quot;&gt;August 6, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  610.  
  611. &lt;div id=&quot;preface&quot;&gt;
  612.  
  613. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  614.  
  615. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  616.  
  617. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  618.  
  619. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  620.  
  621. &lt;/div&gt;
  622.  
  623. &lt;h2&gt;Statistics&lt;/h2&gt;
  624.  
  625. &lt;ul&gt;&lt;li&gt;
  626. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-07-31&amp;amp;chfieldto=2017-08-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  627. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-07-31&amp;amp;chfieldto=2017-08-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  628. 40 pull requests merged into the language:
  629.  
  630. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-31..2017-08-06&quot;&gt;20 into DMD&lt;/a&gt;,
  631. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-31..2017-08-06&quot;&gt;17 into Phobos&lt;/a&gt;, and
  632. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-31..2017-08-06&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  633. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-31..2017-08-06&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  634. &lt;/li&gt;&lt;/ul&gt;
  635.  
  636. &lt;h2&gt;In the community&lt;/h2&gt;
  637.  
  638. &lt;h3&gt;Community announcements&lt;/h3&gt;
  639.  
  640. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/cntolujvqgvqmsvlaauh@forum.dlang.org&quot;&gt;d_to_html.d&lt;/a&gt;
  641. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hndqzoqrbsixgdddrtve@forum.dlang.org&quot;&gt;Visual Studio Code code-d serve-d beta release&lt;/a&gt;
  642. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oltgb3$1jjr$1@digitalmars.com&quot;&gt;Netflix opensources its first D library: Vectorflow&lt;/a&gt;
  643. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vymkvlmgmprnyjizhapi@forum.dlang.org&quot;&gt;SVD_to_D: Generate over 100k lines of highly-optimized microcontroller mmapped-IO code in the blink of an eye&lt;/a&gt;
  644. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pmdipscdmfxvpklzyqwa@forum.dlang.org&quot;&gt;dlang-requetst: openssl 1.1 compatible release&lt;/a&gt;
  645. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oluhuf$d9c$1@digitalmars.com&quot;&gt;Visual D 0.45 released - better VS2017 integration&lt;/a&gt;
  646. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lcejzbzgfakjcravltjq@forum.dlang.org&quot;&gt;Vectorflow: a neural network library for sparse data from Netflix&lt;/a&gt;
  647. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pgslszlrnuswgdzhycpb@forum.dlang.org&quot;&gt;covered - processes output of code coverage analysis performed by the D programming language compiler&lt;/a&gt;
  648. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hwqbbuyxsiirdpxeuryg@forum.dlang.org&quot;&gt;args.d | a command line argument and config file parser&lt;/a&gt;
  649. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/olkiypbulgchbpczdgnd@forum.dlang.org&quot;&gt;A small benchmarking lib&lt;/a&gt;
  650. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ucrvydqaeeoxqesgfcug@forum.dlang.org&quot;&gt;A DUB Case Study: Compiling DMD as a Library&lt;/a&gt;
  651. &lt;/li&gt;&lt;/ul&gt;
  652.  
  653. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  654.  
  655. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  656. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  657. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  658. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  659. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  660. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  661. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  662. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  663. &lt;/li&gt;&lt;/ul&gt;
  664.  
  665.  
  666. &lt;/div&gt;
  667. </description></item><item><title>Issue #133</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jul-30.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jul-30.html</guid><pubDate>Sun, 30 Jul 2017 12:00:00 GMT</pubDate><description>
  668. &lt;div id=&quot;body-container&quot;&gt;
  669. &lt;h1&gt;
  670. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  671. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  672. &lt;span id=&quot;title-date&quot;&gt;July 30, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  673.  
  674. &lt;div id=&quot;preface&quot;&gt;
  675.  
  676. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  677.  
  678. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  679.  
  680. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  681.  
  682. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  683.  
  684. &lt;/div&gt;
  685.  
  686. &lt;h2&gt;Statistics&lt;/h2&gt;
  687.  
  688. &lt;ul&gt;&lt;li&gt;
  689. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-07-24&amp;amp;chfieldto=2017-07-30&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  690. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-07-24&amp;amp;chfieldto=2017-07-30&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  691. 31 pull requests merged into the language:
  692.  
  693. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-24..2017-07-30&quot;&gt;15 into DMD&lt;/a&gt;,
  694. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-24..2017-07-30&quot;&gt;12 into Phobos&lt;/a&gt;, and
  695. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-24..2017-07-30&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  696. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-24..2017-07-30&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  697. &lt;/li&gt;&lt;/ul&gt;
  698.  
  699. &lt;h2&gt;In the community&lt;/h2&gt;
  700.  
  701. &lt;h3&gt;Community announcements&lt;/h3&gt;
  702.  
  703. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/nwmpoxgrwjxgpxnpzfqh@forum.dlang.org&quot;&gt;Project Highlight: Funkwerk&lt;/a&gt;
  704. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dxgpdvyeptnijikbhbzs@forum.dlang.org&quot;&gt;Calling D from Ruby for GPU computing&lt;/a&gt;
  705. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jnqeueyctuvhiyxahcgg@forum.dlang.org&quot;&gt;DIP 1012--Attributes--Preliminary Review Round 1 Begins&lt;/a&gt;
  706. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xzvcbpktmaigtjmgcvwc@forum.dlang.org&quot;&gt;H2 2017 Vision Document&lt;/a&gt;
  707. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/beciatffaooebqjotzyo@forum.dlang.org&quot;&gt;GC Series Page on the Blog&lt;/a&gt;
  708. &lt;/li&gt;&lt;/ul&gt;
  709.  
  710. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  711.  
  712. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  713. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  714. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  715. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  716. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  717. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  718. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  719. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  720. &lt;/li&gt;&lt;/ul&gt;
  721.  
  722.  
  723. &lt;/div&gt;
  724. </description></item><item><title>Issue #132</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jul-23.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jul-23.html</guid><pubDate>Sun, 23 Jul 2017 12:00:00 GMT</pubDate><description>
  725. &lt;div id=&quot;body-container&quot;&gt;
  726. &lt;h1&gt;
  727. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  728. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  729. &lt;span id=&quot;title-date&quot;&gt;July 23, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  730.  
  731. &lt;div id=&quot;preface&quot;&gt;
  732.  
  733. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  734.  
  735. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  736.  
  737. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  738.  
  739. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  740.  
  741. &lt;/div&gt;
  742.  
  743. &lt;h2&gt;Statistics&lt;/h2&gt;
  744.  
  745. &lt;ul&gt;&lt;li&gt;
  746. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-07-17&amp;amp;chfieldto=2017-07-23&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  747. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-07-17&amp;amp;chfieldto=2017-07-23&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  748. 43 pull requests merged into the language:
  749.  
  750. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-17..2017-07-23&quot;&gt;12 into DMD&lt;/a&gt;,
  751. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-17..2017-07-23&quot;&gt;26 into Phobos&lt;/a&gt;, and
  752. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-17..2017-07-23&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  753. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-17..2017-07-23&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  754. &lt;/li&gt;&lt;/ul&gt;
  755.  
  756. &lt;h2&gt;In the community&lt;/h2&gt;
  757.  
  758. &lt;h3&gt;Community announcements&lt;/h3&gt;
  759.  
  760. &lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;
  761.  
  762. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  763.  
  764. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  765. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  766. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  767. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  768. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  769. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  770. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  771. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  772. &lt;/li&gt;&lt;/ul&gt;
  773.  
  774.  
  775. &lt;/div&gt;
  776. </description></item><item><title>Issue #131</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jul-16.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jul-16.html</guid><pubDate>Sun, 16 Jul 2017 12:00:00 GMT</pubDate><description>
  777. &lt;div id=&quot;body-container&quot;&gt;
  778. &lt;h1&gt;
  779. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  780. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  781. &lt;span id=&quot;title-date&quot;&gt;July 16, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  782.  
  783. &lt;div id=&quot;preface&quot;&gt;
  784.  
  785. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  786.  
  787. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  788.  
  789. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  790.  
  791. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  792.  
  793. &lt;/div&gt;
  794.  
  795. &lt;h2&gt;Statistics&lt;/h2&gt;
  796.  
  797. &lt;ul&gt;&lt;li&gt;
  798. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-07-10&amp;amp;chfieldto=2017-07-16&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;28 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  799. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-07-10&amp;amp;chfieldto=2017-07-16&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  800. 45 pull requests merged into the language:
  801.  
  802. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-10..2017-07-16&quot;&gt;12 into DMD&lt;/a&gt;,
  803. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-10..2017-07-16&quot;&gt;24 into Phobos&lt;/a&gt;, and
  804. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-10..2017-07-16&quot;&gt;9 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  805. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-10..2017-07-16&quot;&gt;12 pull requests merged into the website.&lt;/a&gt;
  806. &lt;/li&gt;&lt;/ul&gt;
  807.  
  808. &lt;h2&gt;In the community&lt;/h2&gt;
  809.  
  810. &lt;h3&gt;Community announcements&lt;/h3&gt;
  811.  
  812. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/cigbfrgipbokyetskypk@forum.dlang.org&quot;&gt;New library: open multi-methods&lt;/a&gt;
  813. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vxebeojplmspdihqlgel@forum.dlang.org&quot;&gt;DIP 1010--Static foreach--Accepted&lt;/a&gt;
  814. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/okfoid$11hv$1@digitalmars.com&quot;&gt;Release Candidate 2.075.0-rc1&lt;/a&gt;
  815. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mmfrsonxrfxwltkfvliw@forum.dlang.org&quot;&gt;Released vibe-core 1.0.0 and vibe.d 0.8.0&lt;/a&gt;
  816. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yjuugypxwnfvdsuwsldo@forum.dlang.org&quot;&gt;D IDE Coedit - version 3, update 3 released&lt;/a&gt;
  817. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/eiafqbsgnmzrpgchohfe@forum.dlang.org&quot;&gt;Hiring D programmers (with cryptography and blockchain knowledge are preferred)&lt;/a&gt;
  818. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/evoztccsbidcrddwvtvy@forum.dlang.org&quot;&gt;DIP 1011--extern(delegate)--Preliminary Review Round 1 Begins&lt;/a&gt;
  819. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ok00cd$1vrr$1@digitalmars.com&quot;&gt;Beta 2.075.0-b4&lt;/a&gt;
  820. &lt;/li&gt;&lt;/ul&gt;
  821.  
  822. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  823.  
  824. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  825. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  826. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  827. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  828. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  829. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  830. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  831. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  832. &lt;/li&gt;&lt;/ul&gt;
  833.  
  834.  
  835. &lt;/div&gt;
  836. </description></item><item><title>Issue #130</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jul-09.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jul-09.html</guid><pubDate>Sun, 09 Jul 2017 12:00:00 GMT</pubDate><description>
  837. &lt;div id=&quot;body-container&quot;&gt;
  838. &lt;h1&gt;
  839. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  840. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  841. &lt;span id=&quot;title-date&quot;&gt;July 9, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  842.  
  843. &lt;div id=&quot;preface&quot;&gt;
  844.  
  845. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  846.  
  847. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  848.  
  849. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  850.  
  851. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  852.  
  853. &lt;/div&gt;
  854.  
  855. &lt;h2&gt;Statistics&lt;/h2&gt;
  856.  
  857. &lt;ul&gt;&lt;li&gt;
  858. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-07-03&amp;amp;chfieldto=2017-07-09&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;34 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  859. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-07-03&amp;amp;chfieldto=2017-07-09&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;35 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  860. 76 pull requests merged into the language:
  861.  
  862. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-03..2017-07-09&quot;&gt;20 into DMD&lt;/a&gt;,
  863. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-03..2017-07-09&quot;&gt;36 into Phobos&lt;/a&gt;, and
  864. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-03..2017-07-09&quot;&gt;20 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  865. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-07-03..2017-07-09&quot;&gt;23 pull requests merged into the website.&lt;/a&gt;
  866. &lt;/li&gt;&lt;/ul&gt;
  867.  
  868. &lt;h2&gt;In the community&lt;/h2&gt;
  869.  
  870. &lt;h3&gt;Community announcements&lt;/h3&gt;
  871.  
  872. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/gzkbspxonvrngzspplyy@forum.dlang.org&quot;&gt;LDC 1.3.0&lt;/a&gt;
  873. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ojj9e2$2jlf$1@digitalmars.com&quot;&gt;Beta 2.075.0-b2&lt;/a&gt;
  874. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vccghnhbxhtovorhgfuy@forum.dlang.org&quot;&gt;Go Your Own Way (Part One: The Stack)&lt;/a&gt;
  875. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ojpfgi$1uk0$1@digitalmars.com&quot;&gt;DIP 1007--&amp;quot;future symbol&amp;quot;--Has Been Accepted&lt;/a&gt;
  876. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gorskyffmpgvdkwvtfbl@forum.dlang.org&quot;&gt;Work on ARM backend for DMD started&lt;/a&gt;
  877. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yxxdwubnckajibtckmoe@forum.dlang.org&quot;&gt;DCD 0.9.0 released&lt;/a&gt;
  878. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/sxxdxahqofpdnsjddnho@forum.dlang.org&quot;&gt;docarchives.dlang.io - go back in time to previous released versions of dlang.org&lt;/a&gt;
  879. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lsojezphuhebcgndlbhi@forum.dlang.org&quot;&gt;Munich D Meetup July 2017&lt;/a&gt;
  880. &lt;/li&gt;&lt;/ul&gt;
  881.  
  882. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  883.  
  884. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  885. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  886. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  887. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  888. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  889. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  890. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  891. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  892. &lt;/li&gt;&lt;/ul&gt;
  893.  
  894.  
  895. &lt;/div&gt;
  896. </description></item><item><title>Issue #129</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jul-02.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jul-02.html</guid><pubDate>Sun, 02 Jul 2017 12:00:00 GMT</pubDate><description>
  897. &lt;div id=&quot;body-container&quot;&gt;
  898. &lt;h1&gt;
  899. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  900. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  901. &lt;span id=&quot;title-date&quot;&gt;July 2, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  902.  
  903. &lt;div id=&quot;preface&quot;&gt;
  904.  
  905. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  906.  
  907. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  908.  
  909. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  910.  
  911. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  912.  
  913. &lt;/div&gt;
  914.  
  915. &lt;h2&gt;Statistics&lt;/h2&gt;
  916.  
  917. &lt;ul&gt;&lt;li&gt;
  918. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-06-26&amp;amp;chfieldto=2017-07-02&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  919. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-06-26&amp;amp;chfieldto=2017-07-02&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  920. 46 pull requests merged into the language:
  921.  
  922. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-26..2017-07-02&quot;&gt;17 into DMD&lt;/a&gt;,
  923. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-26..2017-07-02&quot;&gt;25 into Phobos&lt;/a&gt;, and
  924. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-26..2017-07-02&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  925. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-26..2017-07-02&quot;&gt;22 pull requests merged into the website.&lt;/a&gt;
  926. &lt;/li&gt;&lt;/ul&gt;
  927.  
  928. &lt;h2&gt;Major Developments&lt;/h2&gt;
  929.  
  930. &lt;p&gt;dmd's &lt;tt&gt;-betterC&lt;/tt&gt; switch has been getting a lot of attention from Walter lately. It is very close to fulfilling &lt;a href=&quot;http://arsdnet.net/this-week-in-d/2016-oct-09.html&quot;&gt;my wish list for a working betterC&lt;/a&gt;: an &lt;tt&gt;extern(C) main&lt;/tt&gt; program that only calls C functions, built with the &lt;tt&gt;-betterC&lt;/tt&gt; switch,  basically now just works, including partial struct support. It achieves this by skipping generation of certain runtime library hooks.&lt;/p&gt;
  931.  
  932. &lt;p&gt;It is still missing struct destructors from my list, but Walter made asserts and even &lt;a href=&quot;https://github.com/dlang/dmd/pull/6927&quot;&gt;range checks&lt;/a&gt; just work with &lt;tt&gt;-betterC&lt;/tt&gt;, by making them call the C assert function.&lt;/p&gt;
  933.  
  934. &lt;p&gt;(If you are targeting bare metal, there are now just 2 extern(C) functions you must implement. I'll write more at length about this in the future.)&lt;/p&gt;
  935.  
  936. &lt;p&gt;&lt;tt&gt;-betterC&lt;/tt&gt; is NOT a different language. It is just D with a few implementation details changed and some features liable to trigger linker errors if you use them. As such, any &lt;tt&gt;betterC&lt;/tt&gt; compatible libraries should also just work in normal D projects.&lt;/p&gt;
  937.  
  938. &lt;p&gt;I'll be watching this as it continues to develop.&lt;/p&gt;
  939.  
  940. &lt;h2&gt;In the community&lt;/h2&gt;
  941.  
  942. &lt;h3&gt;Community announcements&lt;/h3&gt;
  943.  
  944. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ojai9r$se7$1@digitalmars.com&quot;&gt;Boston D Meetup: Strawman Structs&lt;/a&gt;
  945. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ffdgulhwqgqvoenttkyc@forum.dlang.org&quot;&gt;Release fluent-asserts 0.6.0&lt;/a&gt;
  946. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oiqslc$1pol$1@digitalmars.com&quot;&gt;Beta 2.075.0-b1&lt;/a&gt;
  947. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xaohyfxqhrplmjjvnari@forum.dlang.org&quot;&gt;Project Highlight: Derelict&lt;/a&gt;
  948. &lt;/li&gt;&lt;/ul&gt;
  949.  
  950. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  951.  
  952. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  953. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  954. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  955. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  956. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  957. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  958. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  959. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  960. &lt;/li&gt;&lt;/ul&gt;
  961.  
  962.  
  963. &lt;/div&gt;
  964. </description></item><item><title>Issue #128</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jun-25.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jun-25.html</guid><pubDate>Sun, 25 Jun 2017 12:00:00 GMT</pubDate><description>
  965. &lt;div id=&quot;body-container&quot;&gt;
  966. &lt;h1&gt;
  967. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  968. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  969. &lt;span id=&quot;title-date&quot;&gt;June 25, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  970.  
  971. &lt;div id=&quot;preface&quot;&gt;
  972.  
  973. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  974.  
  975. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  976.  
  977. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  978.  
  979. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  980.  
  981. &lt;/div&gt;
  982.  
  983. &lt;h2&gt;Statistics&lt;/h2&gt;
  984.  
  985. &lt;ul&gt;&lt;li&gt;
  986. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-06-19&amp;amp;chfieldto=2017-06-25&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  987. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-06-19&amp;amp;chfieldto=2017-06-25&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;30 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  988. 22 pull requests merged into the language:
  989.  
  990. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-19..2017-06-25&quot;&gt;12 into DMD&lt;/a&gt;,
  991. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-19..2017-06-25&quot;&gt;8 into Phobos&lt;/a&gt;, and
  992. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-19..2017-06-25&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  993. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-19..2017-06-25&quot;&gt;12 pull requests merged into the website.&lt;/a&gt;
  994. &lt;/li&gt;&lt;/ul&gt;
  995.  
  996. &lt;h2&gt;In the community&lt;/h2&gt;
  997.  
  998. &lt;h3&gt;Community announcements&lt;/h3&gt;
  999.  
  1000. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/igqgcgdsblgmvpgceceb@forum.dlang.org&quot;&gt;Updated Derelict Documentation&lt;/a&gt;
  1001. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oimnnp$14d4$1@digitalmars.com&quot;&gt;RedMonk language rankings June 15, 2017&lt;/a&gt;
  1002. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oimnf6$13re$1@digitalmars.com&quot;&gt;Article on i-programmer.info on GDC&lt;/a&gt;
  1003. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/csawbvccymunlanmtiic@forum.dlang.org&quot;&gt;past.code123.org new service for sharing D code.&lt;/a&gt;
  1004. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bewornepcexaonukvxdn@forum.dlang.org&quot;&gt;daii - allocator-friendly closures and raii&lt;/a&gt;
  1005. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ihstusocwzexmghjenwp@forum.dlang.org&quot;&gt;The DLang Tour translated into French&lt;/a&gt;
  1006. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oig0la$1n9o$1@digitalmars.com&quot;&gt;Release candidates vibe.d 0.8.0-rc.1 and vibe-core 1.0.0-rc.1&lt;/a&gt;
  1007. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ipkwuyrgsxmdmeryeqli@forum.dlang.org&quot;&gt;D Language accepted for inclusion in GCC&lt;/a&gt;
  1008. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vtyalvieuywnahigdgud@forum.dlang.org&quot;&gt;DIP 1010--Static foreach--Preliminary Review Round 1 Begins&lt;/a&gt;
  1009. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mdrttdieojkscbczipby@forum.dlang.org&quot;&gt;Inside D's GC blog article on hacker news front page&lt;/a&gt;
  1010. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rrtvicoxefzighxhlmmc@forum.dlang.org&quot;&gt;DIP 1009--Improve Contract Usability--Preliminary Review Round 1 Begins&lt;/a&gt;
  1011. &lt;/li&gt;&lt;/ul&gt;
  1012.  
  1013. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1014.  
  1015. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1016. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1017. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1018. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1019. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1020. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1021. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1022. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1023. &lt;/li&gt;&lt;/ul&gt;
  1024.  
  1025.  
  1026. &lt;/div&gt;
  1027. </description></item><item><title>Issue #127</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jun-18.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jun-18.html</guid><pubDate>Sun, 18 Jun 2017 12:00:00 GMT</pubDate><description>
  1028. &lt;div id=&quot;body-container&quot;&gt;
  1029. &lt;h1&gt;
  1030. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1031. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1032. &lt;span id=&quot;title-date&quot;&gt;June 18, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1033.  
  1034. &lt;div id=&quot;preface&quot;&gt;
  1035.  
  1036. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1037.  
  1038. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1039.  
  1040. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1041.  
  1042. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1043.  
  1044. &lt;/div&gt;
  1045.  
  1046. &lt;h2&gt;Statistics&lt;/h2&gt;
  1047.  
  1048. &lt;ul&gt;&lt;li&gt;
  1049. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-06-12&amp;amp;chfieldto=2017-06-18&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;24 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1050. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-06-12&amp;amp;chfieldto=2017-06-18&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1051. 44 pull requests merged into the language:
  1052.  
  1053. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-12..2017-06-18&quot;&gt;22 into DMD&lt;/a&gt;,
  1054. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-12..2017-06-18&quot;&gt;17 into Phobos&lt;/a&gt;, and
  1055. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-12..2017-06-18&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1056. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-12..2017-06-18&quot;&gt;15 pull requests merged into the website.&lt;/a&gt;
  1057. &lt;/li&gt;&lt;/ul&gt;
  1058.  
  1059. &lt;h2&gt;In the community&lt;/h2&gt;
  1060.  
  1061. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1062.  
  1063. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/huuhnuwrbrtfqjivugvw@forum.dlang.org&quot;&gt;DIP News -- 1005 (Dependency-Carrying Declarations) Status and More&lt;/a&gt;
  1064. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/avykfhbzzoykyomljjdl@forum.dlang.org&quot;&gt;derelict-git2: A dynamic binding to libgit2 library&lt;/a&gt;
  1065. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lanktntbepgyantjoqpn@forum.dlang.org&quot;&gt;Life in the Fast Lane (@nogc blog post)&lt;/a&gt;
  1066. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/axacgiisczwvygyefhwy@forum.dlang.org&quot;&gt;Lubeck: Hight Level Linear Algebra for Dlang&lt;/a&gt;
  1067. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jvhplxnpimzctwkuifbn@forum.dlang.org&quot;&gt;Berlin D Meetup June 2017&lt;/a&gt;
  1068. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/weiktdahzvcqrzoejehk@forum.dlang.org&quot;&gt;Developer positions at Sociomantic Labs&lt;/a&gt;
  1069. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/burhpzdvbnxhwlqbulju@forum.dlang.org&quot;&gt;Revised DIP Info&lt;/a&gt;
  1070. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cwnrtflamnmyatjwviad@forum.dlang.org&quot;&gt;D now available on Codefights.com&lt;/a&gt;
  1071. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wvcphnuxboddtbgpvaiz@forum.dlang.org&quot;&gt;DlangUI Wiki: some docs added&lt;/a&gt;
  1072. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/icourwzzmyjgkwmdwuyo@forum.dlang.org&quot;&gt;LDC 1.3.0-beta2&lt;/a&gt;
  1073. &lt;/li&gt;&lt;/ul&gt;
  1074.  
  1075. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1076.  
  1077. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1078. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1079. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1080. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1081. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1082. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1083. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1084. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1085. &lt;/li&gt;&lt;/ul&gt;
  1086.  
  1087.  
  1088. &lt;/div&gt;
  1089. </description></item><item><title>Issue #126</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jun-11.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jun-11.html</guid><pubDate>Sun, 11 Jun 2017 12:00:00 GMT</pubDate><description>
  1090. &lt;div id=&quot;body-container&quot;&gt;
  1091. &lt;h1&gt;
  1092. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1093. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1094. &lt;span id=&quot;title-date&quot;&gt;June 11, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1095.  
  1096. &lt;div id=&quot;preface&quot;&gt;
  1097.  
  1098. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1099.  
  1100. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1101.  
  1102. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1103.  
  1104. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1105.  
  1106. &lt;/div&gt;
  1107.  
  1108. &lt;h2&gt;Statistics&lt;/h2&gt;
  1109.  
  1110. &lt;ul&gt;&lt;li&gt;
  1111. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-06-05&amp;amp;chfieldto=2017-06-11&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;22 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1112. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-06-05&amp;amp;chfieldto=2017-06-11&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1113. 55 pull requests merged into the language:
  1114.  
  1115. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-05..2017-06-11&quot;&gt;29 into DMD&lt;/a&gt;,
  1116. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-05..2017-06-11&quot;&gt;21 into Phobos&lt;/a&gt;, and
  1117. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-05..2017-06-11&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1118. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-06-05..2017-06-11&quot;&gt;25 pull requests merged into the website.&lt;/a&gt;
  1119. &lt;/li&gt;&lt;/ul&gt;
  1120.  
  1121. &lt;h2&gt;In the community&lt;/h2&gt;
  1122.  
  1123. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1124.  
  1125. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ztinwghsbnszghsnveqm@forum.dlang.org&quot;&gt;Generalized Linear Models and Stochastic Gradient Descent in D&lt;/a&gt;
  1126. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fsmbrvcmfdcuvtsmfywl@forum.dlang.org&quot;&gt;There is a new test runner in town&lt;/a&gt;
  1127. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/llpkyxdysehxsuqfkuqc@forum.dlang.org&quot;&gt;The DLang Tour translated into Russian&lt;/a&gt;
  1128. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mxlhttcggnknjsjcwmbn@forum.dlang.org&quot;&gt;tanya 0.6.0, new containers&lt;/a&gt;
  1129. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oh3gn6$tg3$1@digitalmars.com&quot;&gt;Boston D Meetup for 6/9&lt;/a&gt;
  1130. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kqlzdcfsmubmadezqnse@forum.dlang.org&quot;&gt;Compile-Time Sort in D&lt;/a&gt;
  1131. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ohb2gn$576$1@digitalmars.com&quot;&gt;Ali's talk C++Now 2017: Competitive Advantage with D on Reddit!&lt;/a&gt;
  1132. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ohcsbb$1ei0$1@digitalmars.com&quot;&gt;mysql-native v1.1.0 - small bugfix update&lt;/a&gt;
  1133. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ohclhl$1696$1@digitalmars.com&quot;&gt;Vittorio Romeo comments on his D impressions at C++Now 2017&lt;/a&gt;
  1134. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/efxkbjiepefubbgqlryp@forum.dlang.org&quot;&gt;Black Duck: DMD license corrected&lt;/a&gt;
  1135. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ttduztkhusfyxbrrbgmk@forum.dlang.org&quot;&gt;fluent-asserts 0.5.0 released&lt;/a&gt;
  1136. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pinmlxmpmbablrcbhqde@forum.dlang.org&quot;&gt;DIP 1007--&amp;quot;future symbol&amp;quot;--Formal Review Has Begun&lt;/a&gt;
  1137. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xygmlgvqsnijtetixqtz@forum.dlang.org&quot;&gt;Yu(&amp;#29577;) - 0.1.0-b1 :   COW String and Vector&amp;#8212;&amp;#8212; Dlang&amp;#8216;s Toolkit&lt;/a&gt;
  1138. &lt;/li&gt;&lt;/ul&gt;
  1139.  
  1140. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1141.  
  1142. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1143. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1144. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1145. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1146. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1147. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1148. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1149. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1150. &lt;/li&gt;&lt;/ul&gt;
  1151.  
  1152.  
  1153. &lt;/div&gt;
  1154. </description></item><item><title>Issue #125</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-may-28.html</link><guid>http://arsdnet.net/this-week-in-d/2017-may-28.html</guid><pubDate>Sun, 28 May 2017 12:00:00 GMT</pubDate><description>
  1155. &lt;div id=&quot;body-container&quot;&gt;
  1156. &lt;h1&gt;
  1157. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1158. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1159. &lt;span id=&quot;title-date&quot;&gt;May 28, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1160.  
  1161. &lt;div id=&quot;preface&quot;&gt;
  1162.  
  1163. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1164.  
  1165. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1166.  
  1167. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1168.  
  1169. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1170.  
  1171. &lt;/div&gt;
  1172.  
  1173. &lt;h2&gt;Statistics&lt;/h2&gt;
  1174.  
  1175. &lt;ul&gt;&lt;li&gt;
  1176. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-05-22&amp;amp;chfieldto=2017-05-28&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1177. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-05-22&amp;amp;chfieldto=2017-05-28&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;28 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1178. 39 pull requests merged into the language:
  1179.  
  1180. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-22..2017-05-28&quot;&gt;20 into DMD&lt;/a&gt;,
  1181. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-22..2017-05-28&quot;&gt;15 into Phobos&lt;/a&gt;, and
  1182. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-22..2017-05-28&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1183. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-22..2017-05-28&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  1184. &lt;/li&gt;&lt;/ul&gt;
  1185.  
  1186. &lt;h2&gt;In the community&lt;/h2&gt;
  1187.  
  1188. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1189.  
  1190. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/chvukhbscgamxecvpwlw@forum.dlang.org&quot;&gt;Faster Command Line Tools in D&lt;/a&gt;
  1191. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gzmepoobojxfxuequvpq@forum.dlang.org&quot;&gt;Bultins .reverse and .sort are likely going to be removed soon.&lt;/a&gt;
  1192. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ofuunk$29ha$1@digitalmars.com&quot;&gt;Trip notes from Israel&lt;/a&gt;
  1193. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nnrzlursvvdthbosekbr@forum.dlang.org&quot;&gt;Tilix 1.5.8 released&lt;/a&gt;
  1194. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/isaglahknbqlpwbwlqbh@forum.dlang.org&quot;&gt;Prettify plugin for Geany&lt;/a&gt;
  1195. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/drpdlenoyhwulmttsrtc@forum.dlang.org&quot;&gt;GDC Explorer Site Updated&lt;/a&gt;
  1196. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/og62hc$lss$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - May 25, 2017 - &amp;quot;Trip reports: DConf 2017 and C++Now 2017&amp;quot;&lt;/a&gt;
  1197. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jcebuessjhkmqpdkhjaa@forum.dlang.org&quot;&gt;101 LINQ examples in D&lt;/a&gt;
  1198. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/og2b7i$2vb0$1@digitalmars.com&quot;&gt;Beta D 2.074.1-b1&lt;/a&gt;
  1199. &lt;/li&gt;&lt;/ul&gt;
  1200.  
  1201. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1202.  
  1203. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  1204.  
  1205. &lt;p&gt;I was asked on IRC this week for a technique to make a complex string mixin without exposing a helper function by name. &lt;tt&gt;private&lt;/tt&gt; doesn't work, since privacy only takes effect across module boundaries, and the mixed in symbols are likely used in the same module... so how can we do it?&lt;/p&gt;
  1206.  
  1207. &lt;p&gt;There's a really easy answer: use an anonymous function with mixin. The syntax looks very similar to &lt;a href=&quot;https://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript&quot;&gt;common Javascript patterns&lt;/a&gt; - you must put parens around the function, as well as at the end of it to call it, like so:&lt;/p&gt;
  1208.  
  1209. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;// notice the paren before the function keyword...
  1210. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;((&lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt; () {
  1211. string code;
  1212. &lt;font color=&quot;green&quot;&gt;// can be however complex you like...
  1213. &lt;/font&gt; code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;int foo;&amp;quot;&lt;/font&gt;;
  1214. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; code;
  1215. })()); &lt;font color=&quot;green&quot;&gt;// and the closing paren there, then the immediate call
  1216. &lt;/font&gt;&lt;/pre&gt;
  1217.  
  1218. &lt;p&gt;The anonymous function will not be in scope, but can contain whatever code you need to build the string.&lt;/p&gt;
  1219.  
  1220. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1221. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1222. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1223. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1224. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1225. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1226. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1227. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1228. &lt;/li&gt;&lt;/ul&gt;
  1229.  
  1230.  
  1231. &lt;/div&gt;
  1232. </description></item><item><title>Issue #124</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-may-21.html</link><guid>http://arsdnet.net/this-week-in-d/2017-may-21.html</guid><pubDate>Sun, 21 May 2017 12:00:00 GMT</pubDate><description>
  1233. &lt;div id=&quot;body-container&quot;&gt;
  1234. &lt;h1&gt;
  1235. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1236. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1237. &lt;span id=&quot;title-date&quot;&gt;May 21, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1238.  
  1239. &lt;div id=&quot;preface&quot;&gt;
  1240.  
  1241. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1242.  
  1243. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1244.  
  1245. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1246.  
  1247. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1248.  
  1249. &lt;/div&gt;
  1250.  
  1251. &lt;h2&gt;Statistics&lt;/h2&gt;
  1252.  
  1253. &lt;ul&gt;&lt;li&gt;
  1254. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-05-15&amp;amp;chfieldto=2017-05-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1255. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-05-15&amp;amp;chfieldto=2017-05-21&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;12 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1256. 52 pull requests merged into the language:
  1257.  
  1258. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-15..2017-05-21&quot;&gt;31 into DMD&lt;/a&gt;,
  1259. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-15..2017-05-21&quot;&gt;19 into Phobos&lt;/a&gt;, and
  1260. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-15..2017-05-21&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1261. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-15..2017-05-21&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  1262. &lt;/li&gt;&lt;/ul&gt;
  1263.  
  1264. &lt;h2&gt;In the community&lt;/h2&gt;
  1265.  
  1266. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1267.  
  1268. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ofkdo9$eo6$1@digitalmars.com&quot;&gt;[OT] Fast Deterministic Selection&lt;/a&gt;
  1269. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hgftqxqrkhaocctivghl@forum.dlang.org&quot;&gt;Prettify and Resync are now open source too&lt;/a&gt;
  1270. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ofn61i$1tlb$1@digitalmars.com&quot;&gt;5 reasons the D programming language is a great choice for development&lt;/a&gt;
  1271. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nrxgszzcliafxdppiqvm@forum.dlang.org&quot;&gt;DIP 1008 Preliminary Review Round 1 Begins&lt;/a&gt;
  1272. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/szaurdvvuxdspswrskeq@forum.dlang.org&quot;&gt;DConf 2017 Ex Post Facto&lt;/a&gt;
  1273. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/offdpr$dvn$1@digitalmars.com&quot;&gt;Eric Niebler talks about C++ Ranges at Microsoft Campus Wed evening&lt;/a&gt;
  1274. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xebhylrypesmaiyxsofe@forum.dlang.org&quot;&gt;First Alexa D Skill is live&lt;/a&gt;
  1275. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/guwzpkimffaqhybxqztp@forum.dlang.org&quot;&gt;Dconf - lightning talk: Excel add-ins in D&lt;/a&gt;
  1276. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vjnxqmtfadkoshbjnzed@forum.dlang.org&quot;&gt;Yu(&amp;#29577;) - 0.0.4 :  A Dlang's Toolkit&lt;/a&gt;
  1277. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/esgjuwbrwnpnovipczvj@forum.dlang.org&quot;&gt;llvm-d 2.2 Dynamic loading (yet again)&lt;/a&gt;
  1278. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wnhqxopvkmjqjgobfjfa@forum.dlang.org&quot;&gt;dubmore: Support of local and remote archive dependencies&lt;/a&gt;
  1279. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fxmutwnvpiinwcxiwjkf@forum.dlang.org&quot;&gt;Harbored-mod 0.2.1 and DYaml 0.6.1 at dlang-community&lt;/a&gt;
  1280. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/off5jm$2vma$1@digitalmars.com&quot;&gt;Andrei's &amp;quot;Design by Introspection&amp;quot; talk now on Hacker News&lt;/a&gt;
  1281. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/arnsbgxvpdtreamouqyl@forum.dlang.org&quot;&gt;rdub V2 released&lt;/a&gt;
  1282. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dyuiblevlflqmymhxuma@forum.dlang.org&quot;&gt;Andre's Google Tel Aviv Talk&lt;/a&gt;
  1283. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ykrfyeobjggeuviiiays@forum.dlang.org&quot;&gt;Invitation to review new DIP PR&lt;/a&gt;
  1284. &lt;/li&gt;&lt;/ul&gt;
  1285.  
  1286. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1287.  
  1288. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  1289.  
  1290. &lt;p&gt;Contributed by ketmar.&lt;/p&gt;
  1291.  
  1292. &lt;p&gt;Emulating &lt;tt&gt;synchronized(obj)&lt;/tt&gt; call.&lt;/p&gt;
  1293.  
  1294. &lt;p&gt;Imagine that you have a nice thread-safe... something. Like file abstraction, for example:&lt;/p&gt;
  1295.  
  1296. &lt;pre class=&quot;d_code&quot;&gt;  &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; XFile {
  1297.    &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; SomeHiddenClass fileImpl;
  1298.  
  1299.    &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; read (&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;* ptr, size_t count) {
  1300.      &lt;font color=&quot;blue&quot;&gt;synchronized&lt;/font&gt;(fileImpl) {
  1301.        fileImpl.non_thread_safe_read(ptr, count);
  1302.      }
  1303.    }
  1304.  
  1305.    &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; write (&lt;font color=&quot;blue&quot;&gt;const&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;)* ptr, size_t count) {
  1306.      &lt;font color=&quot;blue&quot;&gt;synchronized&lt;/font&gt;(fileImpl) {
  1307.        fileImpl.non_thread_safe_write(ptr, count);
  1308.      }
  1309.    }
  1310.  }
  1311. &lt;/pre&gt;
  1312.  
  1313. &lt;p&gt;And you want to add something like &lt;tt&gt;LockedWriter&lt;/tt&gt;, so you will be able to do:&lt;/p&gt;
  1314.  
  1315. &lt;pre class=&quot;d_code&quot;&gt;  XFile fl;
  1316.  ...
  1317.  {
  1318.    &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.format : formattedWrite;
  1319.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; wr = fl.lockedWriter();
  1320.    &lt;font color=&quot;green&quot;&gt;// here, fl should be locked with `synchronize(fl.fileImpl)`
  1321. &lt;/font&gt;    formattedWrite(wr, &lt;font color=&quot;red&quot;&gt;&amp;quot;%s %s!&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;hi&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;there&amp;quot;&lt;/font&gt;);
  1322.  }
  1323. &lt;/pre&gt;
  1324.  
  1325. &lt;p&gt;Such thing may be useful for &lt;tt&gt;formattedWrite()&lt;/tt&gt;, for example, so your &lt;tt&gt;writef()&lt;/tt&gt; implementation won't be interrupted midway by another thread. But the problem is that &lt;tt&gt;synchronized()&lt;/tt&gt; is the built-in, and you can't separate it to &amp;quot;lock&amp;quot; and &amp;quot;unlock&amp;quot; parts. Likely. But compiler does locking and unlocking under the hood, so it *should* be possible! And it is really possible: you just have to import some hidden druntime functions, and make your hands dirty. Let's do the trick:&lt;/p&gt;
  1326.  
  1327. &lt;pre class=&quot;d_code&quot;&gt;  &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; _d_monitorenter (Object h) &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// magic import
  1328. &lt;/font&gt;  &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; _d_monitorexit (Object h) &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// magic import
  1329. &lt;/font&gt;
  1330.  &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; lockedWriter (XFile fl) {
  1331.    &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; LockedWriterImpl {
  1332.      &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; XFile fl;
  1333.  
  1334.      &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (XFile afl) nothow {
  1335.        _d_monitorenter(fl.fileImpl); &lt;font color=&quot;green&quot;&gt;//HERE! emulate `synchronized(fl.fileImpl)` enter
  1336. &lt;/font&gt;      }
  1337.  
  1338.      &lt;font color=&quot;green&quot;&gt;// postblit: just &amp;quot;enter&amp;quot; one more time, compiler will balance dtor calls
  1339. &lt;/font&gt;      &lt;font color=&quot;green&quot;&gt;// we are lucky: `synchronized()` mutex is reentrant
  1340. &lt;/font&gt;      &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;) nothow {
  1341.        _d_monitorenter(fl.fileImpl);
  1342.      }
  1343.  
  1344.      ~&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; () nothow {
  1345.        _d_monitorexit(fl.fileImpl); &lt;font color=&quot;green&quot;&gt;//HERE! emulate `synchronized(fl.fileImpl)` exit
  1346. &lt;/font&gt;      }
  1347.  
  1348.      &lt;font color=&quot;green&quot;&gt;// call underlying thread-unsafe implementation
  1349. &lt;/font&gt;      &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; put (&lt;font color=&quot;blue&quot;&gt;const&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;)[] s...) { fl.fileImpl.write(s.ptr, s.length); }
  1350.    }
  1351.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; LockedWriterImpl(fl);
  1352.  }
  1353. &lt;/pre&gt;
  1354.  
  1355. &lt;p&gt;What is going on here? Internally, each object has hidden field named &amp;quot;monitor&amp;quot; (this is not a real name, you cannot access the field by this name!). It is used to implement &lt;tt&gt;sychronized()&lt;/tt&gt; locks.&lt;/p&gt;
  1356. &lt;p&gt;When compiler sees &lt;tt&gt;synchronized(obj)&lt;/tt&gt;, it actually generates a code like this:&lt;/p&gt;
  1357.  
  1358. &lt;pre class=&quot;d_code&quot;&gt;  &lt;font color=&quot;blue&quot;&gt;try&lt;/font&gt; {
  1359.    _d_monitorenter(obj);
  1360.    ...your code here...
  1361.  } &lt;font color=&quot;blue&quot;&gt;finally&lt;/font&gt; {
  1362.    _d_monitorexit(obj);
  1363.  }
  1364. &lt;/pre&gt;
  1365.  
  1366. &lt;p&gt;So we can emulate &lt;tt&gt;synchronized()&lt;/tt&gt; call by doing the very same thing! And that's what &lt;tt&gt;LockedWriterImpl&lt;/tt&gt; does: calling &amp;quot;enter&amp;quot; and &amp;quot;exit&amp;quot; functions directly, by importing them from druntime. As those functions are hidden too, we have to using the trick: we are declaring external C function, and let the linker do the rest.&lt;/p&gt;
  1367.  
  1368. &lt;p&gt;IMPORTANT NOTE: current &lt;tt&gt;LockedWriterImpl&lt;/tt&gt; is just a sample code. You'd better do at least some error checking there!&lt;/p&gt;
  1369.  
  1370. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1371. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1372. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1373. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1374. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1375. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1376. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1377. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1378. &lt;/li&gt;&lt;/ul&gt;
  1379.  
  1380.  
  1381. &lt;/div&gt;
  1382. </description></item><item><title>Issue #123</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-may-14.html</link><guid>http://arsdnet.net/this-week-in-d/2017-may-14.html</guid><pubDate>Sun, 14 May 2017 12:00:00 GMT</pubDate><description>
  1383. &lt;div id=&quot;body-container&quot;&gt;
  1384. &lt;h1&gt;
  1385. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1386. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1387. &lt;span id=&quot;title-date&quot;&gt;May 14, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1388.  
  1389. &lt;div id=&quot;preface&quot;&gt;
  1390.  
  1391. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1392.  
  1393. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1394.  
  1395. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1396.  
  1397. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1398.  
  1399. &lt;/div&gt;
  1400.  
  1401. &lt;h2&gt;Statistics&lt;/h2&gt;
  1402.  
  1403. &lt;ul&gt;&lt;li&gt;
  1404. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-05-08&amp;amp;chfieldto=2017-05-14&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1405. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-05-08&amp;amp;chfieldto=2017-05-14&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1406. 36 pull requests merged into the language:
  1407.  
  1408. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-08..2017-05-14&quot;&gt;18 into DMD&lt;/a&gt;,
  1409. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-08..2017-05-14&quot;&gt;16 into Phobos&lt;/a&gt;, and
  1410. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-08..2017-05-14&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1411. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-08..2017-05-14&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  1412. &lt;/li&gt;&lt;/ul&gt;
  1413.  
  1414. &lt;h2&gt;In the community&lt;/h2&gt;
  1415.  
  1416. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1417.  
  1418. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/of9oao$230j$1@digitalmars.com&quot;&gt;DMD now has colorized syntax highlighting in error messages&lt;/a&gt;
  1419. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/icpqqecfnznvmexxmntl@forum.dlang.org&quot;&gt;Mir Algorithm v0.5.16: @safe ndslice; shortcuts; topology.pairwise instead of isSorted and isStrictlyMonotonic&lt;/a&gt;
  1420. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/of84g2$2akm$1@digitalmars.com&quot;&gt;&amp;quot;Programming in D&amp;quot; is up-to-date&lt;/a&gt;
  1421. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/coysdlikajmykmnayiik@forum.dlang.org&quot;&gt;Libdivide ported to D&lt;/a&gt;
  1422. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mtmnrafuoytipskgaxdy@forum.dlang.org&quot;&gt;Serialization in D&lt;/a&gt;
  1423. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mzbeazjosnhfxbexnsla@forum.dlang.org&quot;&gt;DIP 1003 Formal Review Has Begun&lt;/a&gt;
  1424. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yweilgshkzlonrpbvkkr@forum.dlang.org&quot;&gt;Snap packages for DMD and DUB&lt;/a&gt;
  1425. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/of19qb$2e0o$1@digitalmars.com&quot;&gt;A Look into the new CTFE Engine&lt;/a&gt;
  1426. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/eoxerbkaowxpgjubhdqq@forum.dlang.org&quot;&gt;concepts v0.0.6: use a run-time interface to specify a compile-time one&lt;/a&gt;
  1427. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pheyabivuumvqbessaok@forum.dlang.org&quot;&gt;Mir Algorithm v0.5.8: Interpolation, Timeseries and 17 new functions&lt;/a&gt;
  1428. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oeru15$2o4f$1@digitalmars.com&quot;&gt;Thank you Sociomantic for hosting DConf!&lt;/a&gt;
  1429. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dqzjlpavcexnhvhhbesm@forum.dlang.org&quot;&gt;D language usage by hour of the day and workday/weekend&lt;/a&gt;
  1430. &lt;/li&gt;&lt;/ul&gt;
  1431.  
  1432. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1433.  
  1434. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1435. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1436. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1437. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1438. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1439. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1440. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1441. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1442. &lt;/li&gt;&lt;/ul&gt;
  1443.  
  1444.  
  1445. &lt;/div&gt;
  1446. </description></item><item><title>Issue #122</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-may-07.html</link><guid>http://arsdnet.net/this-week-in-d/2017-may-07.html</guid><pubDate>Sun, 07 May 2017 12:00:00 GMT</pubDate><description>
  1447. &lt;div id=&quot;body-container&quot;&gt;
  1448. &lt;h1&gt;
  1449. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1450. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1451. &lt;span id=&quot;title-date&quot;&gt;May 7, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1452.  
  1453. &lt;div id=&quot;preface&quot;&gt;
  1454.  
  1455. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1456.  
  1457. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1458.  
  1459. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1460.  
  1461. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1462.  
  1463. &lt;/div&gt;
  1464.  
  1465. &lt;h2&gt;Statistics&lt;/h2&gt;
  1466.  
  1467. &lt;ul&gt;&lt;li&gt;
  1468. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-05-01&amp;amp;chfieldto=2017-05-07&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1469. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-05-01&amp;amp;chfieldto=2017-05-07&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1470. 32 pull requests merged into the language:
  1471.  
  1472. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-01..2017-05-07&quot;&gt;14 into DMD&lt;/a&gt;,
  1473. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-01..2017-05-07&quot;&gt;12 into Phobos&lt;/a&gt;, and
  1474. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-01..2017-05-07&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1475. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-05-01..2017-05-07&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  1476. &lt;/li&gt;&lt;/ul&gt;
  1477.  
  1478. &lt;h2&gt;In the community&lt;/h2&gt;
  1479.  
  1480. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1481.  
  1482. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/jytygrfrcimtbctzkjdz@forum.dlang.org&quot;&gt;DCOnf 2017 videos online&lt;/a&gt;
  1483. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oenjmm$lds$1@digitalmars.com&quot;&gt;Working code in an upcoming PR by Timon Gehr&lt;/a&gt;
  1484. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/eabkioguxikhzynrwffk@forum.dlang.org&quot;&gt;Basil, Genesis, Patchup, Pendown and Pepss are now open source&lt;/a&gt;
  1485. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/abbprxuwgqlmuuwdfgmg@forum.dlang.org&quot;&gt;My D tool projects have moved&lt;/a&gt;
  1486. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oemsme$2isp$1@digitalmars.com&quot;&gt;iopipe on github&lt;/a&gt;
  1487. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gjveolgzzhazzsdutept@forum.dlang.org&quot;&gt;DConf 2017 Day 3 Livestream&lt;/a&gt;
  1488. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lncsbfubsrmyfxnmmbef@forum.dlang.org&quot;&gt;profdump - Converts your 'trace.log' files into dot graphs&lt;/a&gt;
  1489. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/puhxpvbugbnqletopqif@forum.dlang.org&quot;&gt;DConf hackathon: idea list&lt;/a&gt;
  1490. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yzgplvbeakdsjqrlsaki@forum.dlang.org&quot;&gt;DConf 2017 Day 2 Livestream&lt;/a&gt;
  1491. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oeivrn$21ul$1@digitalmars.com&quot;&gt;My slides for tomorrow&lt;/a&gt;
  1492. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pawcneocdkyassykrjey@forum.dlang.org&quot;&gt;LDC 1.3.0-beta1 has been released!&lt;/a&gt;
  1493. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zvanvqpmowwkrnrdzsdb@forum.dlang.org&quot;&gt;DConf 2017 livestream&lt;/a&gt;
  1494. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ajgkptbjwfokyojzsizb@forum.dlang.org&quot;&gt;Ibis Hotel Back Room&lt;/a&gt;
  1495. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jrnnxsohjjxkjretklgm@forum.dlang.org&quot;&gt;D IDE Coedit - released version 3 update 1&lt;/a&gt;
  1496. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/aytozrwnruotpircflkj@forum.dlang.org&quot;&gt;DIP 1004 Preliminary Review Round 1 Begins&lt;/a&gt;
  1497. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/iizrzpdruqulfrdokkbh@forum.dlang.org&quot;&gt;Snap packages for LDC 1.2.0&lt;/a&gt;
  1498. &lt;/li&gt;&lt;/ul&gt;
  1499.  
  1500. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1501.  
  1502. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1503. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1504. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1505. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1506. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1507. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1508. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1509. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1510. &lt;/li&gt;&lt;/ul&gt;
  1511.  
  1512.  
  1513. &lt;/div&gt;
  1514. </description></item><item><title>Issue #121</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-apr-30.html</link><guid>http://arsdnet.net/this-week-in-d/2017-apr-30.html</guid><pubDate>Sun, 30 Apr 2017 12:00:00 GMT</pubDate><description>
  1515. &lt;div id=&quot;body-container&quot;&gt;
  1516. &lt;h1&gt;
  1517. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1518. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1519. &lt;span id=&quot;title-date&quot;&gt;April 30, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1520.  
  1521. &lt;div id=&quot;preface&quot;&gt;
  1522.  
  1523. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1524.  
  1525. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1526.  
  1527. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1528.  
  1529. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1530.  
  1531. &lt;/div&gt;
  1532.  
  1533. &lt;h2&gt;Statistics&lt;/h2&gt;
  1534.  
  1535. &lt;ul&gt;&lt;li&gt;
  1536. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-04-24&amp;amp;chfieldto=2017-04-30&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1537. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-04-24&amp;amp;chfieldto=2017-04-30&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1538. 18 pull requests merged into the language:
  1539.  
  1540. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-24..2017-04-30&quot;&gt;10 into DMD&lt;/a&gt;,
  1541. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-24..2017-04-30&quot;&gt;7 into Phobos&lt;/a&gt;, and
  1542. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-24..2017-04-30&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1543. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-24..2017-04-30&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  1544. &lt;/li&gt;&lt;/ul&gt;
  1545.  
  1546. &lt;h2&gt;In the community&lt;/h2&gt;
  1547.  
  1548. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1549.  
  1550. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/yjpgswjigrenryplyvji@forum.dlang.org&quot;&gt;llvm-d 2.1 - Support for LLVM 4.0.0&lt;/a&gt;
  1551. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jnchepzagfekunduzqvf@forum.dlang.org&quot;&gt;Blog post on automem&lt;/a&gt;
  1552. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lakqzdptnkohwiiekyhj@forum.dlang.org&quot;&gt;nogc v0.0.1: @nogc variants of &lt;tt&gt;std.exception.enforce&lt;/tt&gt;, &lt;tt&gt;std.conv.text&lt;/tt&gt; - Basically &lt;tt&gt;@nogc&lt;/tt&gt; exceptions. Sorta.&lt;/a&gt;
  1553. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/agqlarstsfjxeinwgksm@forum.dlang.org&quot;&gt;Release RDUB v1&lt;/a&gt;
  1554. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jojjdnbfqrpczdjcxjms@forum.dlang.org&quot;&gt;DIP 1007 Preliminary Review Round 1&lt;/a&gt;
  1555. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gpywdsgklsnvupyaozed@forum.dlang.org&quot;&gt;mir.array.primitives and mir.bitmanip  were added&lt;/a&gt;
  1556. &lt;/li&gt;&lt;/ul&gt;
  1557.  
  1558. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1559.  
  1560. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1561. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1562. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1563. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1564. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1565. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1566. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1567. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1568. &lt;/li&gt;&lt;/ul&gt;
  1569.  
  1570.  
  1571. &lt;/div&gt;
  1572. </description></item><item><title>Issue #120</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-apr-23.html</link><guid>http://arsdnet.net/this-week-in-d/2017-apr-23.html</guid><pubDate>Sun, 23 Apr 2017 12:00:00 GMT</pubDate><description>
  1573. &lt;div id=&quot;body-container&quot;&gt;
  1574. &lt;h1&gt;
  1575. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1576. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1577. &lt;span id=&quot;title-date&quot;&gt;April 23, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1578.  
  1579. &lt;div id=&quot;preface&quot;&gt;
  1580.  
  1581. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1582.  
  1583. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1584.  
  1585. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1586.  
  1587. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1588.  
  1589. &lt;/div&gt;
  1590.  
  1591. &lt;h2&gt;Statistics&lt;/h2&gt;
  1592.  
  1593. &lt;ul&gt;&lt;li&gt;
  1594. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-04-17&amp;amp;chfieldto=2017-04-23&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1595. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-04-17&amp;amp;chfieldto=2017-04-23&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;9 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1596. 28 pull requests merged into the language:
  1597.  
  1598. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-17..2017-04-23&quot;&gt;17 into DMD&lt;/a&gt;,
  1599. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-17..2017-04-23&quot;&gt;8 into Phobos&lt;/a&gt;, and
  1600. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-17..2017-04-23&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1601. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-17..2017-04-23&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  1602. &lt;/li&gt;&lt;/ul&gt;
  1603.  
  1604. &lt;h2&gt;In the community&lt;/h2&gt;
  1605.  
  1606. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1607.  
  1608. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/mstlabzscdnjqvkudemc@forum.dlang.org&quot;&gt;LDC 1.2.0 has been released!&lt;/a&gt;
  1609. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/prhfaqqahampbavtcyno@forum.dlang.org&quot;&gt;DIP 1005 - Preliminary Review Round 1 Begins&lt;/a&gt;
  1610. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/odec4v$2ajv$1@digitalmars.com&quot;&gt;Last Minute Tickets to DConf&lt;/a&gt;
  1611. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xfvcunlbsxiwfzkwdvfc@forum.dlang.org&quot;&gt;Cap'n Proto for D v0.1.2&lt;/a&gt;
  1612. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lcfqwqrmwwzrwavstsyf@forum.dlang.org&quot;&gt;Yu(&amp;#29577;) - 0.0.3 :  A Dlang's Toolkit  in My Used&lt;/a&gt;
  1613. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wrelnkdxwyxokvitaudl@forum.dlang.org&quot;&gt;The DConf Experience&lt;/a&gt;
  1614. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/od2e4n$2foc$1@digitalmars.com&quot;&gt;msgpack-ll: Low level @nogc, nothrow, @safe, pure, betterC MessagePack (de)serializer&lt;/a&gt;
  1615. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/agfxxgenkfniozyuvlrf@forum.dlang.org&quot;&gt;Bitbucket Pipelines&lt;/a&gt;
  1616. &lt;/li&gt;&lt;/ul&gt;
  1617.  
  1618. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1619.  
  1620. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1621. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1622. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1623. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1624. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1625. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1626. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1627. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1628. &lt;/li&gt;&lt;/ul&gt;
  1629.  
  1630.  
  1631. &lt;/div&gt;
  1632. </description></item><item><title>Issue #119</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-apr-16.html</link><guid>http://arsdnet.net/this-week-in-d/2017-apr-16.html</guid><pubDate>Sun, 16 Apr 2017 12:00:00 GMT</pubDate><description>
  1633. &lt;div id=&quot;body-container&quot;&gt;
  1634. &lt;h1&gt;
  1635. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1636. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1637. &lt;span id=&quot;title-date&quot;&gt;April 16, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1638.  
  1639. &lt;div id=&quot;preface&quot;&gt;
  1640.  
  1641. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1642.  
  1643. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1644.  
  1645. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1646.  
  1647. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1648.  
  1649. &lt;/div&gt;
  1650.  
  1651. &lt;h2&gt;Statistics&lt;/h2&gt;
  1652.  
  1653. &lt;ul&gt;&lt;li&gt;
  1654. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-04-10&amp;amp;chfieldto=2017-04-16&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1655. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-04-10&amp;amp;chfieldto=2017-04-16&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1656. 23 pull requests merged into the language:
  1657.  
  1658. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-10..2017-04-16&quot;&gt;15 into DMD&lt;/a&gt;,
  1659. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-10..2017-04-16&quot;&gt;6 into Phobos&lt;/a&gt;, and
  1660. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-10..2017-04-16&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1661. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-10..2017-04-16&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  1662. &lt;/li&gt;&lt;/ul&gt;
  1663.  
  1664. &lt;h2&gt;In the community&lt;/h2&gt;
  1665.  
  1666. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1667.  
  1668. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/vufactokakklgqavforn@forum.dlang.org&quot;&gt;unit-threaded v0.7.15 - speedy compile times&lt;/a&gt;
  1669. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ulkaztkdnawtnwmkmvay@forum.dlang.org&quot;&gt;BLAS implementation for D&lt;/a&gt;
  1670. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dxozgoqzraygjcasjnna@forum.dlang.org&quot;&gt;Update roll-up on my arsd libraries&lt;/a&gt;
  1671. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/stelbeqcrkvmbizvdveg@forum.dlang.org&quot;&gt;Article: Interfacing D with C and Fortran&lt;/a&gt;
  1672. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocqmv5$12h3$1@digitalmars.com&quot;&gt;Boston DLang Meetup Friday 4/21&lt;/a&gt;
  1673. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dsxsbdnggqsdtyzkuwpu@forum.dlang.org&quot;&gt;Chennai D Meetup April 22: Introducing D, Rust, and Swift&lt;/a&gt;
  1674. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocgr33$10qb$1@digitalmars.com&quot;&gt;Release vibe.d 0.7.31&lt;/a&gt;
  1675. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ussxeycxtahxvoqvwzcy@forum.dlang.org&quot;&gt;The New CTFE Engine on the Blog&lt;/a&gt;
  1676. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wxefziibnspypgmzgnem@forum.dlang.org&quot;&gt;DIP 1006 - Preliminary Review Round 1 Begins&lt;/a&gt;
  1677. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ochrsg$2t8v$1@digitalmars.com&quot;&gt;&amp;quot;Competitive Advantage with D&amp;quot; is one of the keynotes at C++Now 2017&lt;/a&gt;
  1678. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocgp83$q5o$1@digitalmars.com&quot;&gt;Release D 2.074.0&lt;/a&gt;
  1679. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocg120$28jc$1@digitalmars.com&quot;&gt;InfoWorld article on the open sourcing of dmd&lt;/a&gt;
  1680. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocghba$9h9$1@digitalmars.com&quot;&gt;InfoWorld: Free at last! D language's official compiler is open source&lt;/a&gt;
  1681. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocghh5$9pu$1@digitalmars.com&quot;&gt;The Strange Loop Call for Presentations&lt;/a&gt;
  1682. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ocggj0$7q6$1@digitalmars.com&quot;&gt;Programmiersprache D: Referenzcompiler DMD unter freier Lizenz&lt;/a&gt;
  1683. &lt;/li&gt;&lt;/ul&gt;
  1684.  
  1685. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1686.  
  1687. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1688. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1689. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1690. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1691. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1692. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1693. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1694. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1695. &lt;/li&gt;&lt;/ul&gt;
  1696.  
  1697.  
  1698. &lt;/div&gt;
  1699. </description></item><item><title>Issue #118</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-apr-09.html</link><guid>http://arsdnet.net/this-week-in-d/2017-apr-09.html</guid><pubDate>Sun, 09 Apr 2017 12:00:00 GMT</pubDate><description>
  1700. &lt;div id=&quot;body-container&quot;&gt;
  1701. &lt;h1&gt;
  1702. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1703. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1704. &lt;span id=&quot;title-date&quot;&gt;April 9, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1705.  
  1706. &lt;div id=&quot;preface&quot;&gt;
  1707.  
  1708. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1709.  
  1710. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1711.  
  1712. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1713.  
  1714. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1715.  
  1716. &lt;/div&gt;
  1717.  
  1718. &lt;h2&gt;Statistics&lt;/h2&gt;
  1719.  
  1720. &lt;ul&gt;&lt;li&gt;
  1721. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-04-03&amp;amp;chfieldto=2017-04-09&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1722. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-04-03&amp;amp;chfieldto=2017-04-09&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1723. 30 pull requests merged into the language:
  1724.  
  1725. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-03..2017-04-09&quot;&gt;14 into DMD&lt;/a&gt;,
  1726. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-03..2017-04-09&quot;&gt;11 into Phobos&lt;/a&gt;, and
  1727. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-03..2017-04-09&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1728. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-04-03..2017-04-09&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  1729. &lt;/li&gt;&lt;/ul&gt;
  1730.  
  1731. &lt;h2&gt;In the community&lt;/h2&gt;
  1732.  
  1733. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1734.  
  1735. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/oc8acc$1ei9$1@digitalmars.com&quot;&gt;dmd Backend converted to Boost License&lt;/a&gt;
  1736. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ylnbvxzcqxtcmyevvhyh@forum.dlang.org&quot;&gt;automem v0.0.7 - C++ style smart pointers using std.experimental.allocator&lt;/a&gt;
  1737. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pzlorrmjxiisoposzdgg@forum.dlang.org&quot;&gt;fluent-asserts released&lt;/a&gt;
  1738. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/obtv0t$1ip6$1@digitalmars.com&quot;&gt;Beta 2.074.0-b2&lt;/a&gt;
  1739. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/sebfohgpxyqujjeqvnfw@forum.dlang.org&quot;&gt;Updates to LDC snap package&lt;/a&gt;
  1740. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lixwehclcicnbirrrdft@forum.dlang.org&quot;&gt;LDC 1.2.0-beta2 has been released!&lt;/a&gt;
  1741. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/obulr3$30d8$1@digitalmars.com&quot;&gt;Mike Parker is the new DIP czar&lt;/a&gt;
  1742. &lt;/li&gt;&lt;/ul&gt;
  1743.  
  1744. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1745.  
  1746. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1747. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1748. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1749. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1750. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1751. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1752. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1753. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1754. &lt;/li&gt;&lt;/ul&gt;
  1755.  
  1756.  
  1757. &lt;/div&gt;
  1758. </description></item><item><title>Issue #117</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-apr-02.html</link><guid>http://arsdnet.net/this-week-in-d/2017-apr-02.html</guid><pubDate>Mon, 03 Apr 2017 12:00:00 GMT</pubDate><description>
  1759. &lt;div id=&quot;body-container&quot;&gt;
  1760. &lt;h1&gt;
  1761. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1762. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1763. &lt;span id=&quot;title-date&quot;&gt;April 3, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1764.  
  1765. &lt;div id=&quot;preface&quot;&gt;
  1766.  
  1767. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1768.  
  1769. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1770.  
  1771. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1772.  
  1773. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1774.  
  1775. &lt;/div&gt;
  1776.  
  1777. &lt;h2&gt;Statistics&lt;/h2&gt;
  1778.  
  1779. &lt;ul&gt;&lt;li&gt;
  1780. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-03-27&amp;amp;chfieldto=2017-04-02&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;3 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1781. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-03-27&amp;amp;chfieldto=2017-04-02&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1782. 22 pull requests merged into the language:
  1783.  
  1784. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-27..2017-04-02&quot;&gt;10 into DMD&lt;/a&gt;,
  1785. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-27..2017-04-02&quot;&gt;12 into Phobos&lt;/a&gt;, and
  1786. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-27..2017-04-02&quot;&gt;0 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1787. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-27..2017-04-02&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  1788. &lt;/li&gt;&lt;/ul&gt;
  1789.  
  1790. &lt;h2&gt;In the community&lt;/h2&gt;
  1791.  
  1792. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1793.  
  1794. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/eardwugtduhtqxasgapi@forum.dlang.org&quot;&gt;Vim has got D-Scanner support.&lt;/a&gt;
  1795. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/deslrtebpmgumckqpkny@forum.dlang.org&quot;&gt;Project Highlight: workspace-d&lt;/a&gt;
  1796. &lt;/li&gt;&lt;/ul&gt;
  1797.  
  1798. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1799.  
  1800. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1801. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1802. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1803. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1804. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1805. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1806. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1807. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1808. &lt;/li&gt;&lt;/ul&gt;
  1809.  
  1810.  
  1811. &lt;/div&gt;
  1812. </description></item><item><title>Issue #116</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-mar-26.html</link><guid>http://arsdnet.net/this-week-in-d/2017-mar-26.html</guid><pubDate>Sun, 26 Mar 2017 12:00:00 GMT</pubDate><description>
  1813. &lt;div id=&quot;body-container&quot;&gt;
  1814. &lt;h1&gt;
  1815. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1816. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1817. &lt;span id=&quot;title-date&quot;&gt;March 26, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1818.  
  1819. &lt;div id=&quot;preface&quot;&gt;
  1820.  
  1821. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1822.  
  1823. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1824.  
  1825. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1826.  
  1827. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1828.  
  1829. &lt;/div&gt;
  1830.  
  1831. &lt;h2&gt;Statistics&lt;/h2&gt;
  1832.  
  1833. &lt;ul&gt;&lt;li&gt;
  1834. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-03-20&amp;amp;chfieldto=2017-03-26&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;1 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1835. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-03-20&amp;amp;chfieldto=2017-03-26&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;9 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1836. 23 pull requests merged into the language:
  1837.  
  1838. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-20..2017-03-26&quot;&gt;13 into DMD&lt;/a&gt;,
  1839. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-20..2017-03-26&quot;&gt;9 into Phobos&lt;/a&gt;, and
  1840. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-20..2017-03-26&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1841. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-20..2017-03-26&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  1842. &lt;/li&gt;&lt;/ul&gt;
  1843.  
  1844. &lt;h2&gt;In the community&lt;/h2&gt;
  1845.  
  1846. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1847.  
  1848. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ob3let$199n$1@digitalmars.com&quot;&gt;Beta 2.074.0-b1&lt;/a&gt;
  1849. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ob3o0o$1e1e$1@digitalmars.com&quot;&gt;Dlang Boston Meetup - Hack-a-thon&lt;/a&gt;
  1850. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/sorzlyzfyazacouawpgs@forum.dlang.org&quot;&gt;sdpc - Simple/Stupid D parser combinator&lt;/a&gt;
  1851. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ubheswgdpafyeybohnyb@forum.dlang.org&quot;&gt;excel-d v0.0.1 - D API to write functions callable from Excel&lt;/a&gt;
  1852. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jbsiiryjulhtkqjkgevl@forum.dlang.org&quot;&gt;SpaceD - a racing game written in D&lt;/a&gt;
  1853. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ykvdljsksruipwhtkppu@forum.dlang.org&quot;&gt;influxdb-dlang-wrapper v0.0.1 - D API for InfluxDB&lt;/a&gt;
  1854. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jujmqaeuvlzqelaeryvm@forum.dlang.org&quot;&gt;Terminix renamed to Tilix&lt;/a&gt;
  1855. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cdgudpizidnrhukqcltt@forum.dlang.org&quot;&gt;Dont Fear the Reaper -- A gentle introduction to D's GC&lt;/a&gt;
  1856. &lt;/li&gt;&lt;/ul&gt;
  1857.  
  1858. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1859.  
  1860. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1861. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1862. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1863. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1864. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1865. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1866. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1867. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1868. &lt;/li&gt;&lt;/ul&gt;
  1869.  
  1870.  
  1871. &lt;/div&gt;
  1872. </description></item><item><title>Issue #115</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-mar-19.html</link><guid>http://arsdnet.net/this-week-in-d/2017-mar-19.html</guid><pubDate>Sun, 19 Mar 2017 12:00:00 GMT</pubDate><description>
  1873. &lt;div id=&quot;body-container&quot;&gt;
  1874. &lt;h1&gt;
  1875. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1876. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1877. &lt;span id=&quot;title-date&quot;&gt;March 19, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1878.  
  1879. &lt;div id=&quot;preface&quot;&gt;
  1880.  
  1881. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1882.  
  1883. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1884.  
  1885. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1886.  
  1887. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1888.  
  1889. &lt;/div&gt;
  1890.  
  1891. &lt;h2&gt;Statistics&lt;/h2&gt;
  1892.  
  1893. &lt;ul&gt;&lt;li&gt;
  1894. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-03-13&amp;amp;chfieldto=2017-03-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1895. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-03-13&amp;amp;chfieldto=2017-03-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1896. 42 pull requests merged into the language:
  1897.  
  1898. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-13..2017-03-19&quot;&gt;14 into DMD&lt;/a&gt;,
  1899. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-13..2017-03-19&quot;&gt;23 into Phobos&lt;/a&gt;, and
  1900. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-13..2017-03-19&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1901. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-13..2017-03-19&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  1902. &lt;/li&gt;&lt;/ul&gt;
  1903.  
  1904. &lt;h2&gt;In the community&lt;/h2&gt;
  1905.  
  1906. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1907.  
  1908. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/oa8jh5$15gf$1@digitalmars.com&quot;&gt;Introducing Diskuto - an embeddable comment system&lt;/a&gt;
  1909. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/804ad06c1203401eb772f9d08fd80140@chiroptera&quot;&gt;Amper audio player for GNU/Linux and X11&lt;/a&gt;
  1910. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oaji60$1arl$1@digitalmars.com&quot;&gt;D event in Bucharest&lt;/a&gt;
  1911. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rshpgiwcadnbducvwiwr@forum.dlang.org&quot;&gt;LDC 1.2.0-beta1 has been released!&lt;/a&gt;
  1912. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yxsxlselcphwvlzfqngt@forum.dlang.org&quot;&gt;DConf 2017 Schedule&lt;/a&gt;
  1913. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oaivhgigswcwbpwmbmbh@forum.dlang.org&quot;&gt;D IDE Coedit - version 3 released.&lt;/a&gt;
  1914. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/olpovkfjxbcvvchmineu@forum.dlang.org&quot;&gt;Need help&lt;/a&gt;
  1915. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oaaopg$1s79$1@digitalmars.com&quot;&gt;Scott Meyers blogs about his DConf 2017 keynote speech&lt;/a&gt;
  1916. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zegwwojwvxgnqmipxrsp@forum.dlang.org&quot;&gt;Update on Unums&lt;/a&gt;
  1917. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tzwutbmszyfpuhwmvonr@forum.dlang.org&quot;&gt;[OT] LLVM 4.0 released - LDC mentioned in release notes&lt;/a&gt;
  1918. &lt;/li&gt;&lt;/ul&gt;
  1919.  
  1920. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1921.  
  1922. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  1923. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  1924. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1925. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1926. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  1927. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  1928. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1929. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  1930. &lt;/li&gt;&lt;/ul&gt;
  1931.  
  1932.  
  1933. &lt;/div&gt;
  1934. </description></item><item><title>Issue #114</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-mar-12.html</link><guid>http://arsdnet.net/this-week-in-d/2017-mar-12.html</guid><pubDate>Sun, 12 Mar 2017 12:00:00 GMT</pubDate><description>
  1935. &lt;div id=&quot;body-container&quot;&gt;
  1936. &lt;h1&gt;
  1937. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  1938. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  1939. &lt;span id=&quot;title-date&quot;&gt;March 12, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  1940.  
  1941. &lt;div id=&quot;preface&quot;&gt;
  1942.  
  1943. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  1944.  
  1945. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  1946.  
  1947. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  1948.  
  1949. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  1950.  
  1951. &lt;/div&gt;
  1952.  
  1953. &lt;h2&gt;Statistics&lt;/h2&gt;
  1954.  
  1955. &lt;ul&gt;&lt;li&gt;
  1956. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-03-06&amp;amp;chfieldto=2017-03-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1957. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-03-06&amp;amp;chfieldto=2017-03-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;8 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  1958. 57 pull requests merged into the language:
  1959.  
  1960. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-06..2017-03-12&quot;&gt;28 into DMD&lt;/a&gt;,
  1961. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-06..2017-03-12&quot;&gt;18 into Phobos&lt;/a&gt;, and
  1962. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-06..2017-03-12&quot;&gt;11 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  1963. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-03-06..2017-03-12&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  1964. &lt;/li&gt;&lt;/ul&gt;
  1965.  
  1966. &lt;h2&gt;In the community&lt;/h2&gt;
  1967.  
  1968. &lt;h3&gt;Community announcements&lt;/h3&gt;
  1969.  
  1970. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/oa3dp7$icu$1@digitalmars.com&quot;&gt;Visual D 0.44 released - VC project integration and Concord debugger extension&lt;/a&gt;
  1971. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tghhocebuddqpafnzxjr@forum.dlang.org&quot;&gt;Munich D Meetup - March 28ths - Clean Code Competition&lt;/a&gt;
  1972. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pzbrzsnkozuyvqthncvl@forum.dlang.org&quot;&gt;Recently added ndslice API&lt;/a&gt;
  1973. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/trkjavscurhdesedcmkv@forum.dlang.org&quot;&gt;From the D Blog: Editable and Runnable Doc Examples on dlang.org&lt;/a&gt;
  1974. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pxaegpzhhmzbmazreqok@forum.dlang.org&quot;&gt;Intellij D Language plugin v1.11 released&lt;/a&gt;
  1975. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dmbkrfyvwghqorebhatp@forum.dlang.org&quot;&gt;Berlin D Meetup March 2017&lt;/a&gt;
  1976. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/euqchiupxmxzbtemofys@forum.dlang.org&quot;&gt;Ocean v3.0.0: First fully public release!&lt;/a&gt;
  1977. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o9shl7$24b4$1@digitalmars.com&quot;&gt;Release D 2.073.2&lt;/a&gt;
  1978. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qsjakgnbqhqlomjhwfoy@forum.dlang.org&quot;&gt;Aedi 0.2.0 release.&lt;/a&gt;
  1979. &lt;/li&gt;&lt;/ul&gt;
  1980.  
  1981. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  1982.  
  1983. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  1984.  
  1985. &lt;p&gt;Today's tip is from ketmar about avoiding false positives on the 32 bit GC implementation.&lt;/p&gt;
  1986.  
  1987. &lt;p&gt;It is often handy to have a list of something in your data types. Like list of
  1988. strings, or some structs. And you may need to access any list item by index,
  1989. fast. The obvious choice for that is dynamic array.&lt;/p&gt;
  1990.  
  1991. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[] lineOffsets;
  1992. &lt;/pre&gt;
  1993.  
  1994. &lt;p&gt;Yet if your array grows big enough, it becomes a target for &amp;quot;false positives&amp;quot;
  1995. in GC: GC sees some number on stack or in another memory area, interprets it
  1996. as a pointer, and that &amp;quot;false pointer&amp;quot; happens to point somewhere inside
  1997. &lt;tt&gt;lineOffsets&lt;/tt&gt;. Thus, while your object may be collected by GC, &amp;quot;false
  1998. positive&amp;quot; prevents collecting the array, and your program starts leaking
  1999. memory.&lt;/p&gt;
  2000.  
  2001. &lt;p&gt;Now, D GC has a nice set of flags for allocated memory blocks, including
  2002. &amp;quot;ignore interior pointers&amp;quot; (i.e. ignore all ponters that points somewhere
  2003. inside the block). If our array is private member, and we have nice getters
  2004. and setters for it, it is guaranteed that &lt;tt&gt;lineOffsets&lt;/tt&gt; is the only &amp;quot;root&amp;quot;, so
  2005. it is safe to mark the array with that flag. The following code appends
  2006. elements to array and sets the flag (if it is safe):&lt;/p&gt;
  2007.  
  2008. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; appendLineOffset (&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; newofs) {
  2009.   &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; optr = lineOffsets.ptr;
  2010.   lineOffsets ~= newofs;
  2011.   &lt;font color=&quot;green&quot;&gt;// check if runtime allocated a new memory block due to array growth
  2012. &lt;/font&gt;   &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (lineOffsets.ptr !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; optr) {
  2013.     &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; core.memory : GC;
  2014.     &lt;font color=&quot;green&quot;&gt;// check if our array really *IS* the head
  2015. &lt;/font&gt;     &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (lineOffsets.ptr &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; GC.addrOf(lineOffsets.ptr)) {
  2016.       &lt;font color=&quot;green&quot;&gt;// set the magic flag!
  2017. &lt;/font&gt;       GC.setAttr(lineOffsets.ptr, GC.BlkAttr.NO_INTERIOR);
  2018.     }
  2019.   }
  2020. }
  2021. &lt;/pre&gt;
  2022.  
  2023. &lt;p&gt;By using this code instead of simply &lt;tt&gt;lineOffsets ~= newofs;&lt;/tt&gt;, i reduced
  2024. memory leaks in some my projects to none.&lt;/p&gt;
  2025.  
  2026. &lt;p&gt;Please note that if you're using slices of &lt;tt&gt;lineOffsets&lt;/tt&gt;, they must NOT
  2027. outlive the array itself, because with &amp;quot;no interior&amp;quot; flag slices cannot
  2028. &amp;quot;anchor&amp;quot; array anymore, if they're not starting at [0] element. I.e. the only
  2029. really safe mode is to not allow &amp;quot;outside code&amp;quot; to get slices of &lt;tt&gt;lineOffsets&lt;/tt&gt;
  2030. in any way.&lt;/p&gt;
  2031.  
  2032.  
  2033.  
  2034. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2035. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2036. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2037. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2038. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2039. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2040. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2041. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2042. &lt;/li&gt;&lt;/ul&gt;
  2043.  
  2044.  
  2045. &lt;/div&gt;
  2046. </description></item><item><title>Issue #113</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-mar-05.html</link><guid>http://arsdnet.net/this-week-in-d/2017-mar-05.html</guid><pubDate>Sun, 05 Mar 2017 12:00:00 GMT</pubDate><description>
  2047. &lt;div id=&quot;body-container&quot;&gt;
  2048. &lt;h1&gt;
  2049. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2050. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2051. &lt;span id=&quot;title-date&quot;&gt;March 5, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2052.  
  2053. &lt;div id=&quot;preface&quot;&gt;
  2054.  
  2055. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2056.  
  2057. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2058.  
  2059. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2060.  
  2061. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2062.  
  2063. &lt;/div&gt;
  2064.  
  2065. &lt;h2&gt;Statistics&lt;/h2&gt;
  2066.  
  2067. &lt;ul&gt;&lt;li&gt;
  2068. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-02-27&amp;amp;chfieldto=2017-03-05&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2069. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-02-27&amp;amp;chfieldto=2017-03-05&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2070. 54 pull requests merged into the language:
  2071.  
  2072. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-27..2017-03-05&quot;&gt;16 into DMD&lt;/a&gt;,
  2073. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-27..2017-03-05&quot;&gt;33 into Phobos&lt;/a&gt;, and
  2074. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-27..2017-03-05&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2075. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-27..2017-03-05&quot;&gt;19 pull requests merged into the website.&lt;/a&gt;
  2076. &lt;/li&gt;&lt;/ul&gt;
  2077.  
  2078. &lt;h2&gt;In the community&lt;/h2&gt;
  2079.  
  2080. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2081.  
  2082. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/tlrmxljghxcvxbyrqbup@forum.dlang.org&quot;&gt;Independent Study at my university using D&lt;/a&gt;
  2083. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o9fc7j$pk1$1@digitalmars.com&quot;&gt;Beta D 2.073.2-b1&lt;/a&gt;
  2084. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o97vpe$ohe$1@digitalmars.com&quot;&gt;DConf 2017 Hotel - book now!&lt;/a&gt;
  2085. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o9cofm$19ur$1@digitalmars.com&quot;&gt;scriptlike v0.10.2&lt;/a&gt;
  2086. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qhcbtyvxlrabiqnccceo@forum.dlang.org&quot;&gt;Pegged v0.4: longest-match, left-recursion, and expandable parse trees&lt;/a&gt;
  2087. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rqkocxemgaeproerulfy@forum.dlang.org&quot;&gt;Typed D allocator based on jemalloc&lt;/a&gt;
  2088. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wmwqztamqwuzwiczcuuf@forum.dlang.org&quot;&gt;DCV v0.2.0 - adaptation to the new ndslice&lt;/a&gt;
  2089. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bbjbbehdvjczwbrxiumi@forum.dlang.org&quot;&gt;Project Highlight: vibe.d&lt;/a&gt;
  2090. &lt;/li&gt;&lt;/ul&gt;
  2091.  
  2092. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2093.  
  2094. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2095. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2096. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2097. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2098. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2099. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2100. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2101. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2102. &lt;/li&gt;&lt;/ul&gt;
  2103.  
  2104.  
  2105. &lt;/div&gt;
  2106. </description></item><item><title>Issue #112</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-feb-26.html</link><guid>http://arsdnet.net/this-week-in-d/2017-feb-26.html</guid><pubDate>Mon, 27 Feb 2017 12:00:00 GMT</pubDate><description>
  2107. &lt;div id=&quot;body-container&quot;&gt;
  2108. &lt;h1&gt;
  2109. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2110. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2111. &lt;span id=&quot;title-date&quot;&gt;February 27, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2112.  
  2113. &lt;div id=&quot;preface&quot;&gt;
  2114.  
  2115. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2116.  
  2117. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2118.  
  2119. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2120.  
  2121. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2122.  
  2123. &lt;/div&gt;
  2124.  
  2125. &lt;h2&gt;Statistics&lt;/h2&gt;
  2126.  
  2127. &lt;ul&gt;&lt;li&gt;
  2128. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-02-21&amp;amp;chfieldto=2017-02-27&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2129. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-02-21&amp;amp;chfieldto=2017-02-27&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;12 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2130. 45 pull requests merged into the language:
  2131.  
  2132. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-21..2017-02-27&quot;&gt;12 into DMD&lt;/a&gt;,
  2133. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-21..2017-02-27&quot;&gt;29 into Phobos&lt;/a&gt;, and
  2134. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-21..2017-02-27&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2135. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-21..2017-02-27&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  2136. &lt;/li&gt;&lt;/ul&gt;
  2137.  
  2138. &lt;h2&gt;In the community&lt;/h2&gt;
  2139.  
  2140. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2141.  
  2142. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ajceenphyrbvgyzvnrrq@forum.dlang.org&quot;&gt;DCompute - Native heterogeneous computing for D - is here!&lt;/a&gt;
  2143. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8ra6e$1b17$1@digitalmars.com&quot;&gt;DConf 2017 Early Bird Registration expires Monday!&lt;/a&gt;
  2144. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8v11m$1kpo$1@digitalmars.com&quot;&gt;mysql-native v1.0.0: Big refresh&lt;/a&gt;
  2145. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xplmhzoedceihoigytxu@forum.dlang.org&quot;&gt;expat-d 0.1.0&lt;/a&gt;
  2146. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gharnpvlicgpyuzbxsdo@forum.dlang.org&quot;&gt;Schema for ndslice internals&lt;/a&gt;
  2147. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8tg8g$25bv$1@digitalmars.com&quot;&gt;scriptlike v0.10.1 - Another minor update&lt;/a&gt;
  2148. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hngfeheyklalzoxkyuwq@forum.dlang.org&quot;&gt;D for BigData: the first BetterC library by Tamediadigital&lt;/a&gt;
  2149. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xdjimueqsdbvxlnzekjv@forum.dlang.org&quot;&gt;Snowflake Strings&lt;/a&gt;
  2150. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8l6jr$847$1@digitalmars.com&quot;&gt;DConf 2017 speaking proposals due Feb 28&lt;/a&gt;
  2151. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8ne2k$slu$1@digitalmars.com&quot;&gt;scriptlike v0.9.7: Minor update&lt;/a&gt;
  2152. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gudkdgasddymdhojvkli@forum.dlang.org&quot;&gt;Need a fancy domain for your project? &lt;package&gt;.dub.pm has you covered!&lt;/package&gt;&lt;/a&gt;
  2153. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mivnzooeyzxrmatezfoy@forum.dlang.org&quot;&gt;Updates to the tsv-utils toolkit&lt;/a&gt;
  2154. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ngtjyimrwmkquxqjxfay@forum.dlang.org&quot;&gt;Moonshot: a DMD fork that outputs Lua&lt;/a&gt;
  2155. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lmzfhargdvxdjrevlnia@forum.dlang.org&quot;&gt;Terminix 1.5.0 Released&lt;/a&gt;
  2156. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8eu4e$14rl$1@digitalmars.com&quot;&gt;Found on Reddit: D language gets more points than C++ in DigitalWhip benchmark on Windows.&lt;/a&gt;
  2157. &lt;/li&gt;&lt;/ul&gt;
  2158.  
  2159. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2160.  
  2161. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2162. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2163. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2164. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2165. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2166. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2167. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2168. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2169. &lt;/li&gt;&lt;/ul&gt;
  2170.  
  2171.  
  2172. &lt;/div&gt;
  2173. </description></item><item><title>Issue #111</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-feb-19.html</link><guid>http://arsdnet.net/this-week-in-d/2017-feb-19.html</guid><pubDate>Sun, 19 Feb 2017 12:00:00 GMT</pubDate><description>
  2174. &lt;div id=&quot;body-container&quot;&gt;
  2175. &lt;h1&gt;
  2176. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2177. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2178. &lt;span id=&quot;title-date&quot;&gt;February 19, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2179.  
  2180. &lt;div id=&quot;preface&quot;&gt;
  2181.  
  2182. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2183.  
  2184. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2185.  
  2186. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2187.  
  2188. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2189.  
  2190. &lt;/div&gt;
  2191.  
  2192. &lt;h2&gt;Statistics&lt;/h2&gt;
  2193.  
  2194. &lt;ul&gt;&lt;li&gt;
  2195. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-02-13&amp;amp;chfieldto=2017-02-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2196. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-02-13&amp;amp;chfieldto=2017-02-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;25 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2197. 51 pull requests merged into the language:
  2198.  
  2199. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-13..2017-02-19&quot;&gt;19 into DMD&lt;/a&gt;,
  2200. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-13..2017-02-19&quot;&gt;26 into Phobos&lt;/a&gt;, and
  2201. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-13..2017-02-19&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2202. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-13..2017-02-19&quot;&gt;10 pull requests merged into the website.&lt;/a&gt;
  2203. &lt;/li&gt;&lt;/ul&gt;
  2204.  
  2205. &lt;h2&gt;In the community&lt;/h2&gt;
  2206.  
  2207. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2208.  
  2209. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/fqhwxeegsxzwocprqnrg@forum.dlang.org&quot;&gt;Updated LDC snap package with improved Ubuntu 14.04 support&lt;/a&gt;
  2210. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bzpgriqqnmnvgscyyzuq@forum.dlang.org&quot;&gt;tanya library 0.2.0&lt;/a&gt;
  2211. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o8bgmc$1b51$1@digitalmars.com&quot;&gt;mysql-native v1.0.0-rc4&lt;/a&gt;
  2212. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/szmvnsensricelegxita@forum.dlang.org&quot;&gt;Vibrant 2.0, major update&lt;/a&gt;
  2213. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kjglnljovyotkrrczmaq@forum.dlang.org&quot;&gt;D Compiler as Docker Image&lt;/a&gt;
  2214. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o7vs48$m70$1@digitalmars.com&quot;&gt;Announcement: DConf 2017 Hackathon May 7&lt;/a&gt;
  2215. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o84nti$31jn$1@digitalmars.com&quot;&gt;Release D 2.073.1&lt;/a&gt;
  2216. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o84usm$drm$1@digitalmars.com&quot;&gt;&amp;quot;BIOS Boot to D&amp;quot; article by sarn&lt;/a&gt;
  2217. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o7ui4r$1b3f$1@digitalmars.com&quot;&gt;Book your flights soon for DConf 2017&lt;/a&gt;
  2218. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rbsmgcwqmlisrljvjrjj@forum.dlang.org&quot;&gt;Tutorial: Multiple file upload in vibe.d&lt;/a&gt;
  2219. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o7simm$16l1$1@digitalmars.com&quot;&gt;Beta D 2.073.1-b2&lt;/a&gt;
  2220. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/iprikkrpishsudltbdpy@forum.dlang.org&quot;&gt;A New Import Idiom`&lt;/a&gt;
  2221. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cxeftxnqiobpebjycthf@forum.dlang.org&quot;&gt;Berlin D Meetup February 2017&lt;/a&gt;
  2222. &lt;/li&gt;&lt;/ul&gt;
  2223.  
  2224. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2225.  
  2226. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  2227.  
  2228. &lt;p&gt;This week's tip is from Basile.&lt;/p&gt;
  2229.  
  2230. &lt;p&gt;D tooling lacks a good, reliable thing to refactor the code. However one
  2231. of the most used refactoring operation, which is to rename an identifier
  2232. or a type, can be done directly using the compiler.&lt;/p&gt;
  2233.  
  2234. &lt;p&gt;Imagine that you have a &lt;tt&gt;struct Old{}&lt;/tt&gt; that you want to rename to &lt;tt&gt;New&lt;/tt&gt;.&lt;/p&gt;
  2235.  
  2236. &lt;p&gt;- rename the old symbol: &lt;tt&gt;struct New {}&lt;/tt&gt;&lt;/p&gt;
  2237.  
  2238. &lt;p&gt;- deprecate and alias the old symbol: &lt;tt&gt;deprecated alias Old = New;&lt;/tt&gt;&lt;/p&gt;
  2239.  
  2240. &lt;p&gt;- compile the projects that depended on &lt;tt&gt;Old&lt;/tt&gt;. In the messages you'll get
  2241. the lines where you have to patch &lt;tt&gt;Old&lt;/tt&gt; to &lt;tt&gt;New&lt;/tt&gt;.&lt;/p&gt;
  2242.  
  2243. &lt;p&gt;While the changes must be done by hand you'll have a least the guarantee
  2244. of the symbol correctness, unlike when a simple replace all operation is
  2245. performed.&lt;/p&gt;
  2246.  
  2247. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2248. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2249. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2250. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2251. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2252. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2253. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2254. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2255. &lt;/li&gt;&lt;/ul&gt;
  2256.  
  2257.  
  2258. &lt;/div&gt;
  2259. </description></item><item><title>Issue #110</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-feb-12.html</link><guid>http://arsdnet.net/this-week-in-d/2017-feb-12.html</guid><pubDate>Sun, 12 Feb 2017 12:00:00 GMT</pubDate><description>
  2260. &lt;div id=&quot;body-container&quot;&gt;
  2261. &lt;h1&gt;
  2262. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2263. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2264. &lt;span id=&quot;title-date&quot;&gt;February 12, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2265.  
  2266. &lt;div id=&quot;preface&quot;&gt;
  2267.  
  2268. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2269.  
  2270. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2271.  
  2272. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2273.  
  2274. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2275.  
  2276. &lt;/div&gt;
  2277.  
  2278. &lt;h2&gt;Statistics&lt;/h2&gt;
  2279.  
  2280. &lt;ul&gt;&lt;li&gt;
  2281. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-02-06&amp;amp;chfieldto=2017-02-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2282. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-02-06&amp;amp;chfieldto=2017-02-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2283. 56 pull requests merged into the language:
  2284.  
  2285. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-06..2017-02-12&quot;&gt;18 into DMD&lt;/a&gt;,
  2286. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-06..2017-02-12&quot;&gt;33 into Phobos&lt;/a&gt;, and
  2287. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-06..2017-02-12&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2288. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-02-06..2017-02-12&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  2289. &lt;/li&gt;&lt;/ul&gt;
  2290.  
  2291. &lt;h2&gt;In the community&lt;/h2&gt;
  2292.  
  2293. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2294.  
  2295. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ucumkyfhsdenefuiwvyi@forum.dlang.org&quot;&gt;A mini book for learning computer prgramming in D (complete newbies)&lt;/a&gt;
  2296. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tyxmazpaewojbdfbvfvm@forum.dlang.org&quot;&gt;D is #3 in Github's &amp;quot;The top weekend languages 2016&amp;quot;&lt;/a&gt;
  2297. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vrdhfefazzeeijkvddil@forum.dlang.org&quot;&gt;Questionnaire&lt;/a&gt;
  2298. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tustbdfaadkeanfwaoox@forum.dlang.org&quot;&gt;GSoC 2017 Application Rejected&lt;/a&gt;
  2299. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/edtayzhnibrfjyptwspu@forum.dlang.org&quot;&gt;Game Website Server Side&lt;/a&gt;
  2300. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yndgsyadujlffgebbdgd@forum.dlang.org&quot;&gt;Updated LDC snap package with link-time optimization (LTO) support&lt;/a&gt;
  2301. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o7gd8s$251e$1@digitalmars.com&quot;&gt;Beta D 2.073.1-b1&lt;/a&gt;
  2302. &lt;/li&gt;&lt;/ul&gt;
  2303.  
  2304. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2305.  
  2306. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2307. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2308. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2309. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2310. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2311. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2312. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2313. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2314. &lt;/li&gt;&lt;/ul&gt;
  2315.  
  2316.  
  2317. &lt;/div&gt;
  2318. </description></item><item><title>Issue #109</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-feb-05.html</link><guid>http://arsdnet.net/this-week-in-d/2017-feb-05.html</guid><pubDate>Sun, 05 Feb 2017 12:00:00 GMT</pubDate><description>
  2319. &lt;div id=&quot;body-container&quot;&gt;
  2320. &lt;h1&gt;
  2321. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2322. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2323. &lt;span id=&quot;title-date&quot;&gt;February 5, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2324.  
  2325. &lt;div id=&quot;preface&quot;&gt;
  2326.  
  2327. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2328.  
  2329. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2330.  
  2331. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2332.  
  2333. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2334.  
  2335. &lt;/div&gt;
  2336.  
  2337. &lt;h2&gt;Statistics&lt;/h2&gt;
  2338.  
  2339. &lt;ul&gt;&lt;li&gt;
  2340. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-01-30&amp;amp;chfieldto=2017-02-05&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;4 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2341. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-01-30&amp;amp;chfieldto=2017-02-05&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2342. 27 pull requests merged into the language:
  2343.  
  2344. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-30..2017-02-05&quot;&gt;15 into DMD&lt;/a&gt;,
  2345. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-30..2017-02-05&quot;&gt;9 into Phobos&lt;/a&gt;, and
  2346. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-30..2017-02-05&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2347. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-30..2017-02-05&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  2348. &lt;/li&gt;&lt;/ul&gt;
  2349.  
  2350. &lt;h2&gt;In the community&lt;/h2&gt;
  2351.  
  2352. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2353.  
  2354. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/rkxyvsmgwhfkigybjpig@forum.dlang.org&quot;&gt;Snap package for LDC 1.1.0 available to test&lt;/a&gt;
  2355. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mviygxcnbzcaaaqoqxpl@forum.dlang.org&quot;&gt;Munich D Meetup - February 14, 2017: D and the Cloud - D-Lovers Special&lt;/a&gt;
  2356. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o6occ9$2shh$1@digitalmars.com&quot;&gt;Boston D Meetup 2/9: &lt;tt&gt;shared&lt;/tt&gt; Experiences&lt;/a&gt;
  2357. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tjtuwudnckrcdckqgzub@forum.dlang.org&quot;&gt;LDC 1.1.0 released&lt;/a&gt;
  2358. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o6prd1$2j71$1@digitalmars.com&quot;&gt;vibe.d 0.8.0 and 0.7.31 beta releases&lt;/a&gt;
  2359. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o6sldo$1pad$1@digitalmars.com&quot;&gt;Call for arms: Arch Linux D package maintenance&lt;/a&gt;
  2360. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rpikelacgzgtoymkqung@forum.dlang.org&quot;&gt;Project Highlight: DPaste&lt;/a&gt;
  2361. &lt;/li&gt;&lt;/ul&gt;
  2362.  
  2363. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2364.  
  2365. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2366. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2367. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2368. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2369. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2370. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2371. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2372. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2373. &lt;/li&gt;&lt;/ul&gt;
  2374.  
  2375.  
  2376. &lt;/div&gt;
  2377. </description></item><item><title>Issue #108</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jan-29.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jan-29.html</guid><pubDate>Sun, 29 Jan 2017 12:00:00 GMT</pubDate><description>
  2378. &lt;div id=&quot;body-container&quot;&gt;
  2379. &lt;h1&gt;
  2380. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2381. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2382. &lt;span id=&quot;title-date&quot;&gt;January 29, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2383.  
  2384. &lt;div id=&quot;preface&quot;&gt;
  2385.  
  2386. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2387.  
  2388. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2389.  
  2390. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2391.  
  2392. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2393.  
  2394. &lt;/div&gt;
  2395.  
  2396. &lt;h2&gt;Statistics&lt;/h2&gt;
  2397.  
  2398. &lt;ul&gt;&lt;li&gt;
  2399. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-01-23&amp;amp;chfieldto=2017-01-29&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;21 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2400. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-01-23&amp;amp;chfieldto=2017-01-29&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;10 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2401. 29 pull requests merged into the language:
  2402.  
  2403. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-23..2017-01-29&quot;&gt;15 into DMD&lt;/a&gt;,
  2404. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-23..2017-01-29&quot;&gt;9 into Phobos&lt;/a&gt;, and
  2405. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-23..2017-01-29&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2406. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-23..2017-01-29&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  2407. &lt;/li&gt;&lt;/ul&gt;
  2408.  
  2409. &lt;h2&gt;In the community&lt;/h2&gt;
  2410.  
  2411. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2412.  
  2413. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/yzfthfipouzhejfskxxp@forum.dlang.org&quot;&gt;unDE 0.2.0 - unusual command line and keybar&lt;/a&gt;
  2414. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qgefzfngowelgthjbnet@forum.dlang.org&quot;&gt;D IDE Coedit - version 3 beta 3&lt;/a&gt;
  2415. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/skperizboooxbufsgbdp@forum.dlang.org&quot;&gt;llvm-d 2.0&lt;/a&gt;
  2416. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o6c9tj$2bdp$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - January 26, 2017 - &amp;quot;High Performance Tools in D&amp;quot; by Jon Degenhardt&lt;/a&gt;
  2417. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mwkehzkdbwzygngeaonf@forum.dlang.org&quot;&gt;High-level wrapper for GNU MP (GMP)&lt;/a&gt;
  2418. &lt;/li&gt;&lt;/ul&gt;
  2419.  
  2420. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2421.  
  2422. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2423. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2424. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2425. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2426. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2427. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2428. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2429. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2430. &lt;/li&gt;&lt;/ul&gt;
  2431.  
  2432.  
  2433. &lt;/div&gt;
  2434. </description></item><item><title>Issue #107</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jan-22.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jan-22.html</guid><pubDate>Sun, 22 Jan 2017 12:00:00 GMT</pubDate><description>
  2435. &lt;div id=&quot;body-container&quot;&gt;
  2436. &lt;h1&gt;
  2437. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2438. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2439. &lt;span id=&quot;title-date&quot;&gt;January 22, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2440.  
  2441. &lt;div id=&quot;preface&quot;&gt;
  2442.  
  2443. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2444.  
  2445. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2446.  
  2447. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2448.  
  2449. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2450.  
  2451. &lt;/div&gt;
  2452.  
  2453. &lt;h2&gt;Statistics&lt;/h2&gt;
  2454.  
  2455. &lt;ul&gt;&lt;li&gt;
  2456. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-01-16&amp;amp;chfieldto=2017-01-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;24 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2457. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-01-16&amp;amp;chfieldto=2017-01-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2458. 34 pull requests merged into the language:
  2459.  
  2460. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-16..2017-01-22&quot;&gt;17 into DMD&lt;/a&gt;,
  2461. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-16..2017-01-22&quot;&gt;14 into Phobos&lt;/a&gt;, and
  2462. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-16..2017-01-22&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2463. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-16..2017-01-22&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  2464. &lt;/li&gt;&lt;/ul&gt;
  2465.  
  2466. &lt;h2&gt;Major Changes&lt;/h2&gt;
  2467.  
  2468. &lt;p&gt;The new feature release, &lt;a href=&quot;http://forum.dlang.org/post/o62rml$mju$1@digitalmars.com&quot;&gt;DMD 2.073.0&lt;/a&gt;, came out this week. The two major changes are a new command line switch, &lt;tt&gt;-mscrtlib=name&lt;/tt&gt; on Windows to choose which C runtime version you want, and a new builtin ddoc theme giving a fresh out-of-the-box experience for ddoc users.&lt;/p&gt;
  2469.  
  2470. &lt;h2&gt;DConf 2017&lt;/h2&gt;
  2471. &lt;p&gt;It was announced this week that &lt;a href=&quot;http://forum.dlang.org/post/o5r904$295d$1@digitalmars.com&quot;&gt;DConf 2017 is now open for registration&lt;/a&gt;. Get the 50 early bird registration before the end of February if you want to attend the conference, in Berlin, Germany, from May 4 to May 6!&lt;/p&gt;
  2472.  
  2473. &lt;h2&gt;In the community&lt;/h2&gt;
  2474.  
  2475. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2476.  
  2477. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/xprrdlwiseaesgmuiufv@forum.dlang.org&quot;&gt;Command line tool for weighted reservoir sampling&lt;/a&gt;
  2478. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pkbccegpqgoybvhxygsc@forum.dlang.org&quot;&gt;Iup4D 1.0 alpha&lt;/a&gt;
  2479. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fxmrgmbwacuxnqwxjxsz@forum.dlang.org&quot;&gt;Testing in the D Standard Library&lt;/a&gt;
  2480. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tpzlvszetihdxoowkbrk@forum.dlang.org&quot;&gt;Pixel Perfect Engine (formerly known as VDP-Engine) version 0.9.1-rc1 released&lt;/a&gt;
  2481. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jmwdgmbcdswrpendkvbn@forum.dlang.org&quot;&gt;LDC talk @ FOSDEM'17&lt;/a&gt;
  2482. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o5nrnd$22ne$1@digitalmars.com&quot;&gt;Release Candidate 2.073.0-rc1&lt;/a&gt;
  2483. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jkwjlywodidmqcyrxnjf@forum.dlang.org&quot;&gt;Plugin for 1C:Enterprise in dmd&lt;/a&gt;
  2484. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kbpfwygcxvxhzvrhnrwa@forum.dlang.org&quot;&gt;Berlin D Meetup January 2017&lt;/a&gt;
  2485. &lt;/li&gt;&lt;/ul&gt;
  2486.  
  2487. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2488.  
  2489. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2490. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2491. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2492. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2493. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2494. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2495. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2496. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2497. &lt;/li&gt;&lt;/ul&gt;
  2498.  
  2499.  
  2500. &lt;/div&gt;
  2501. </description></item><item><title>Issue #106</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jan-15.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jan-15.html</guid><pubDate>Sun, 15 Jan 2017 12:00:00 GMT</pubDate><description>
  2502. &lt;div id=&quot;body-container&quot;&gt;
  2503. &lt;h1&gt;
  2504. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2505. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2506. &lt;span id=&quot;title-date&quot;&gt;January 15, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2507.  
  2508. &lt;div id=&quot;preface&quot;&gt;
  2509.  
  2510. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2511.  
  2512. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2513.  
  2514. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2515.  
  2516. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2517.  
  2518. &lt;/div&gt;
  2519.  
  2520. &lt;h2&gt;Statistics&lt;/h2&gt;
  2521.  
  2522. &lt;ul&gt;&lt;li&gt;
  2523. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-01-09&amp;amp;chfieldto=2017-01-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;18 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2524. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-01-09&amp;amp;chfieldto=2017-01-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;10 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2525. 54 pull requests merged into the language:
  2526.  
  2527. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-09..2017-01-15&quot;&gt;36 into DMD&lt;/a&gt;,
  2528. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-09..2017-01-15&quot;&gt;11 into Phobos&lt;/a&gt;, and
  2529. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-09..2017-01-15&quot;&gt;7 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2530. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-09..2017-01-15&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  2531. &lt;/li&gt;&lt;/ul&gt;
  2532.  
  2533. &lt;h2&gt;Major Changes&lt;/h2&gt;
  2534.  
  2535. &lt;p&gt;Apparently, the ddoc generator in the newest dmd beta has radically changed. If you use dmd's ddoc and changed to the beta, inspect your generated code and make sure your custom style sheets still apply.&lt;/p&gt;
  2536.  
  2537. &lt;h2&gt;In the community&lt;/h2&gt;
  2538.  
  2539. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2540.  
  2541. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o5emoi$27p3$1@digitalmars.com&quot;&gt;Silvermirror to mirror websites&lt;/a&gt;
  2542. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/arpeiqgvxwucjazzifkv@forum.dlang.org&quot;&gt;SmartRef&amp;#65306; The Smart Pointer In D&lt;/a&gt;
  2543. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/aadliuqkunxwlqljlsut@forum.dlang.org&quot;&gt;Android LDC in a Container&lt;/a&gt;
  2544. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o5ej3g$27f2$1@digitalmars.com&quot;&gt;Pry v0.3.1 is out!&lt;/a&gt;
  2545. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o5ehpd$257e$1@digitalmars.com&quot;&gt;Beta 2.073.0-b2&lt;/a&gt;
  2546. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dweudrpemfllxhhisvre@forum.dlang.org&quot;&gt;Software Engineer at LinkedIn praises D&lt;/a&gt;
  2547. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/aojopzifatijnbphhemi@forum.dlang.org&quot;&gt;GSoC 2016 Postmortem&lt;/a&gt;
  2548. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lawmqiczqtcuvbdjocpd@forum.dlang.org&quot;&gt;Voting for std.experimental.checkedint&lt;/a&gt;
  2549. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rcsxnzfzseaeyghjggjb@forum.dlang.org&quot;&gt;GMP bindings for DLang&lt;/a&gt;
  2550. &lt;/li&gt;&lt;/ul&gt;
  2551.  
  2552. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2553.  
  2554. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  2555.  
  2556. &lt;p&gt;When working with class inheritance, it is possible to call a method from a base class, even when it is overridden by a child class, by using the specific class name at the call site. Observe:&lt;/p&gt;
  2557.  
  2558. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  2559. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; ClassA {
  2560.    &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; fun() { writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;A&amp;quot;&lt;/font&gt;); }
  2561. }
  2562.  
  2563. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; ClassB : ClassA {
  2564.     &lt;font color=&quot;blue&quot;&gt;override&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; fun() { writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;B&amp;quot;&lt;/font&gt;); }
  2565. }
  2566.  
  2567. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  2568.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; cb = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; ClassB;
  2569.  
  2570.    cb.fun(); &lt;font color=&quot;green&quot;&gt;// &amp;quot;B&amp;quot;
  2571. &lt;/font&gt;    cb.ClassA.fun(); &lt;font color=&quot;green&quot;&gt;// &amp;quot;A&amp;quot;
  2572. &lt;/font&gt;    cb.ClassB.fun(); &lt;font color=&quot;green&quot;&gt;// &amp;quot;B&amp;quot;
  2573. &lt;/font&gt;}
  2574. &lt;/pre&gt;
  2575.  
  2576. &lt;p&gt;The first line, &lt;tt&gt;cb.fun&lt;/tt&gt;, does a normal virtual dispatch. It will call the bottom-most class override. The second line specifically asks for the function from &lt;tt&gt;ClassA&lt;/tt&gt;, bypassing the virtual override mechanism. The third line does the same, but for &lt;tt&gt;ClassB&lt;/tt&gt;'s version.&lt;/p&gt;
  2577.  
  2578. &lt;p&gt;Usually, you wouldn't want to do this because methods are overridden in a subclass for a reason. There may be additional state to maintain, for example. Inside the class definition, you can use the &lt;tt&gt;super&lt;/tt&gt; keyword to call the parent class's implementation (e.g. &lt;tt&gt;override void fun() { super.fun(); }&lt;/tt&gt;), so you don't need to specify its name there either.&lt;/p&gt;
  2579.  
  2580. &lt;p&gt;But, this technique makes it possible at the call site for the times when you do. One of the more common use cases is if your class inherits from two interfaces and each has a method of the same name, but they do different things. You can then disambiguate with the interface name:&lt;/p&gt;
  2581.  
  2582. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;interface&lt;/font&gt; A {
  2583. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; get();
  2584. }
  2585.  
  2586. &lt;font color=&quot;blue&quot;&gt;interface&lt;/font&gt; B {
  2587. string get();
  2588. }
  2589.  
  2590. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; C : A, B {
  2591. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; get() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0; }
  2592. string get() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;red&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;; }
  2593. }
  2594.  
  2595. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  2596. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; c = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; C();
  2597. &lt;font color=&quot;green&quot;&gt;//c.get();
  2598. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;/*
  2599. $ dmd qqq
  2600. qqq.d(16): Error: qqq.C.get called with argument types () matches both:
  2601. qqq.d(10):     qqq.C.get()
  2602. and:
  2603. qqq.d(11):     qqq.C.get()
  2604. */&lt;/font&gt;
  2605.  
  2606. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a = c.A.get(); &lt;font color=&quot;green&quot;&gt;// works
  2607. &lt;/font&gt; string b = c.B.get(); &lt;font color=&quot;green&quot;&gt;// works
  2608. &lt;/font&gt;}
  2609. &lt;/pre&gt;
  2610.  
  2611. &lt;p&gt;The error message given in the first line is a tricky one! To the new reader, it would look like nonsense, has dmd lost its mind? But such can happen when a method differs only by return value. Automatic overload resolution never considers return values, so to work with such a situation, you need to specify the interface you want using the name method above.&lt;/p&gt;
  2612.  
  2613. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2614. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2615. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2616. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2617. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2618. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2619. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2620. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2621. &lt;/li&gt;&lt;/ul&gt;
  2622.  
  2623.  
  2624. &lt;/div&gt;
  2625. </description></item><item><title>Issue #105</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jan-08.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jan-08.html</guid><pubDate>Sun, 08 Jan 2017 12:00:00 GMT</pubDate><description>
  2626. &lt;div id=&quot;body-container&quot;&gt;
  2627. &lt;h1&gt;
  2628. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2629. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2630. &lt;span id=&quot;title-date&quot;&gt;January 8, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2631.  
  2632. &lt;div id=&quot;preface&quot;&gt;
  2633.  
  2634. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2635.  
  2636. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2637.  
  2638. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2639.  
  2640. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2641.  
  2642. &lt;/div&gt;
  2643.  
  2644. &lt;h2&gt;Statistics&lt;/h2&gt;
  2645.  
  2646. &lt;ul&gt;&lt;li&gt;
  2647. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2017-01-02&amp;amp;chfieldto=2017-01-08&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2648. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2017-01-02&amp;amp;chfieldto=2017-01-08&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2649. 41 pull requests merged into the language:
  2650.  
  2651. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-02..2017-01-08&quot;&gt;24 into DMD&lt;/a&gt;,
  2652. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-02..2017-01-08&quot;&gt;16 into Phobos&lt;/a&gt;, and
  2653. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-02..2017-01-08&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2654. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2017-01-02..2017-01-08&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  2655. &lt;/li&gt;&lt;/ul&gt;
  2656.  
  2657. &lt;h2&gt;In the community&lt;/h2&gt;
  2658.  
  2659. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2660.  
  2661. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/novznnqyjerwlngvefqt@forum.dlang.org&quot;&gt;Alexa Skill written in D&lt;/a&gt;
  2662. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4pdp2$15i7$1@digitalmars.com&quot;&gt;Reminder - DConf 2017 is May 4-6 !!&lt;/a&gt;
  2663. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4ji1p$p3r$1@digitalmars.com&quot;&gt;Vision document for H1 2017&lt;/a&gt;
  2664. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4p42n$i63$1@digitalmars.com&quot;&gt;GtkD 3.5.0, GTK+ with D.&lt;/a&gt;
  2665. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4pson$24db$1@digitalmars.com&quot;&gt;Beta 2.073.0-b1&lt;/a&gt;
  2666. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4r421$1ss8$1@digitalmars.com&quot;&gt;New (page-per-artifact) standard library doc examples are now editable and runnable&lt;/a&gt;
  2667. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o4q4tp$2ld6$1@digitalmars.com&quot;&gt;Monthly downloads of &amp;quot;Programming in D&amp;quot;&lt;/a&gt;
  2668. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nlrtcqbpfjuzypksdtet@forum.dlang.org&quot;&gt;IsItThere - a small tool that generates perfect hash sets&lt;/a&gt;
  2669. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nqwtqhcngnaonutmyueb@forum.dlang.org&quot;&gt;PostgreSQL native impl&lt;/a&gt;
  2670. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/andcuqtssvjrwyoerpdp@forum.dlang.org&quot;&gt;D Blog Stats&lt;/a&gt;
  2671. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hddfljshwbvqzfxbaptq@forum.dlang.org&quot;&gt;Aedi 0.1.0 release&lt;/a&gt;
  2672. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cmqempshwfckwevaobwj@forum.dlang.org&quot;&gt;Happy New Year from the D Language Foundation&lt;/a&gt;
  2673. &lt;/li&gt;&lt;/ul&gt;
  2674.  
  2675. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2676.  
  2677. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2678. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2679. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2680. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2681. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2682. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2683. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2684. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2685. &lt;/li&gt;&lt;/ul&gt;
  2686.  
  2687.  
  2688. &lt;/div&gt;
  2689. </description></item><item><title>Issue #104</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2017-jan-01.html</link><guid>http://arsdnet.net/this-week-in-d/2017-jan-01.html</guid><pubDate>Sun, 01 Jan 2017 12:00:00 GMT</pubDate><description>
  2690. &lt;div id=&quot;body-container&quot;&gt;
  2691. &lt;h1&gt;
  2692. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2693. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2694. &lt;span id=&quot;title-date&quot;&gt;January 1, 2017&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2695.  
  2696. &lt;div id=&quot;preface&quot;&gt;
  2697.  
  2698. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2699.  
  2700. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2701.  
  2702. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2703.  
  2704. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2705.  
  2706. &lt;/div&gt;
  2707.  
  2708. &lt;h2&gt;Statistics&lt;/h2&gt;
  2709.  
  2710. &lt;ul&gt;&lt;li&gt;
  2711. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-12-26&amp;amp;chfieldto=2017-01-01&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2712. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-12-26&amp;amp;chfieldto=2017-01-01&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2713. 30 pull requests merged into the language:
  2714.  
  2715. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-26..2017-01-01&quot;&gt;17 into DMD&lt;/a&gt;,
  2716. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-26..2017-01-01&quot;&gt;7 into Phobos&lt;/a&gt;, and
  2717. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-26..2017-01-01&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2718. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-26..2017-01-01&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  2719. &lt;/li&gt;&lt;/ul&gt;
  2720.  
  2721. &lt;h2&gt;Major Changes&lt;/h2&gt;
  2722.  
  2723. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/o497vm$1cua$1@digitalmars.com&quot;&gt;Release 2.072.2&lt;/a&gt; came out, which should fix the Debian issue that has plagued D for the last several weeks.&lt;/p&gt;
  2724.  
  2725. &lt;p&gt;Craig started work on organizing &lt;a href=&quot;http://forum.dlang.org/post/putgbfmkgxxvmbuouifc@forum.dlang.org&quot;&gt;Google Summer of Code 2017&lt;/a&gt;, starting to plan out potential projects and start the application preparation.&lt;/p&gt;
  2726.  
  2727. &lt;p&gt;In the dmd compiler, there's been a lot of refactoring and a PIC bug fix in dmd code gen. On the gdc side, they are now fully up to date with the C++ front end, and have been doing a lot of refactoring work to make it ready for the switch to the newer front end, written in D. The ldc team continues to keep steady pace near dmd.&lt;/p&gt;
  2728.  
  2729. &lt;h2&gt;In the community&lt;/h2&gt;
  2730.  
  2731. &lt;h3&gt;DIP status&lt;/h3&gt;
  2732.  
  2733. &lt;p&gt;The debate over DIP 1005 continues to rage, with the proposal being refined and improved in response to each criticism. Andrei is trying to make this an example for future DIP authors and reviewers as well.&lt;/p&gt;
  2734.  
  2735. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2736.  
  2737. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/bthzmwnlmynyvgfabgjj@forum.dlang.org&quot;&gt;Terminix Year In Review&lt;/a&gt;
  2738. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jhvphbwvswixahedmfyu@forum.dlang.org&quot;&gt;Project Highlight: Voxelman&lt;/a&gt;
  2739. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cmqxcjomjqyttykhuvnu@forum.dlang.org&quot;&gt;dlang-requests 0.4.0 released&lt;/a&gt;
  2740. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fwhtcpexaurmtwmrgkjz@forum.dlang.org&quot;&gt;Another XML DOM Package&lt;/a&gt;
  2741. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o44g06$2i3o$1@digitalmars.com&quot;&gt;Beta D 2.072.2-b2&lt;/a&gt;
  2742. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gkhikvwhxvihyekntkaq@forum.dlang.org&quot;&gt;Simple tutorial for starting to make D apps for Android&lt;/a&gt;
  2743. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/spdadiobrktxrzshlnsv@forum.dlang.org&quot;&gt;What are constants?&lt;/a&gt;
  2744. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tlagffnqldmaicdfsreo@forum.dlang.org&quot;&gt;Xiph's Ogg/Opus decoder&lt;/a&gt;
  2745. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o3sr68$2shj$1@digitalmars.com&quot;&gt;Beta D 2.072.2-b1&lt;/a&gt;
  2746. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/gohxghznyyvmnohsaetp@forum.dlang.org&quot;&gt;Poodinis (DI framework) 8.0.0 released&lt;/a&gt;
  2747. &lt;/li&gt;&lt;/ul&gt;
  2748.  
  2749. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2750.  
  2751. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2752. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2753. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2754. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2755. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2756. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2757. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2758. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2759. &lt;/li&gt;&lt;/ul&gt;
  2760.  
  2761.  
  2762. &lt;/div&gt;
  2763. </description></item><item><title>Issue #103</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-dec-25.html</link><guid>http://arsdnet.net/this-week-in-d/2016-dec-25.html</guid><pubDate>Mon, 26 Dec 2016 12:00:00 GMT</pubDate><description>
  2764. &lt;div id=&quot;body-container&quot;&gt;
  2765. &lt;h1&gt;
  2766. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2767. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2768. &lt;span id=&quot;title-date&quot;&gt;December 26, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2769.  
  2770. &lt;div id=&quot;preface&quot;&gt;
  2771.  
  2772. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2773.  
  2774. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2775.  
  2776. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2777.  
  2778. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2779.  
  2780. &lt;/div&gt;
  2781.  
  2782. &lt;h2&gt;Statistics&lt;/h2&gt;
  2783.  
  2784. &lt;ul&gt;&lt;li&gt;
  2785. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-12-20&amp;amp;chfieldto=2016-12-26&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;33 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2786. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-12-20&amp;amp;chfieldto=2016-12-26&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;44 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2787. 40 pull requests merged into the language:
  2788.  
  2789. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-20..2016-12-26&quot;&gt;18 into DMD&lt;/a&gt;,
  2790. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-20..2016-12-26&quot;&gt;18 into Phobos&lt;/a&gt;, and
  2791. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-20..2016-12-26&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2792. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-20..2016-12-26&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  2793. &lt;/li&gt;&lt;/ul&gt;
  2794.  
  2795. &lt;h2&gt;In the community&lt;/h2&gt;
  2796.  
  2797. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2798.  
  2799. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o3p7dj$802$1@digitalmars.com&quot;&gt;New GDC binaries: 2.068.2, shared library support, multilib support &amp;amp; a new gdmd tool&lt;/a&gt;
  2800. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/srpxqoexjeyjobiuknjl@forum.dlang.org&quot;&gt;Blog Post - profiling with perf and&amp;#160;friends&lt;/a&gt;
  2801. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o3969r$2qed$1@digitalmars.com&quot;&gt;Many documentation examples can now be run online&lt;/a&gt;
  2802. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o3mdat$27bo$1@digitalmars.com&quot;&gt;32 byte vectors - first blood&lt;/a&gt;
  2803. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ebibpkkligfqowaejmkc@forum.dlang.org&quot;&gt;Joakim's Interview with Dicebot&lt;/a&gt;
  2804. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/joyrtdvmxddfeqvjqimr@forum.dlang.org&quot;&gt;Deimos bindings for MPFR&lt;/a&gt;
  2805. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/opasprnqwexyuubnydqc@forum.dlang.org&quot;&gt;Terminix 1.4.0 Released&lt;/a&gt;
  2806. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o39d1d$41m$1@digitalmars.com&quot;&gt;[your donation here]&lt;/a&gt;
  2807. &lt;/li&gt;&lt;/ul&gt;
  2808.  
  2809. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2810.  
  2811. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2812. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2813. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2814. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2815. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2816. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2817. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2818. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2819. &lt;/li&gt;&lt;/ul&gt;
  2820.  
  2821.  
  2822. &lt;/div&gt;
  2823. </description></item><item><title>Issue #102</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-dec-18.html</link><guid>http://arsdnet.net/this-week-in-d/2016-dec-18.html</guid><pubDate>Sun, 18 Dec 2016 12:00:00 GMT</pubDate><description>
  2824. &lt;div id=&quot;body-container&quot;&gt;
  2825. &lt;h1&gt;
  2826. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2827. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2828. &lt;span id=&quot;title-date&quot;&gt;December 18, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2829.  
  2830. &lt;div id=&quot;preface&quot;&gt;
  2831.  
  2832. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2833.  
  2834. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2835.  
  2836. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2837.  
  2838. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2839.  
  2840. &lt;/div&gt;
  2841.  
  2842. &lt;h2&gt;Statistics&lt;/h2&gt;
  2843.  
  2844. &lt;ul&gt;&lt;li&gt;
  2845. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-12-12&amp;amp;chfieldto=2016-12-18&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;4 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2846. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-12-12&amp;amp;chfieldto=2016-12-18&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2847. 30 pull requests merged into the language:
  2848.  
  2849. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-12..2016-12-18&quot;&gt;17 into DMD&lt;/a&gt;,
  2850. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-12..2016-12-18&quot;&gt;8 into Phobos&lt;/a&gt;, and
  2851. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-12..2016-12-18&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2852. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-12..2016-12-18&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  2853. &lt;/li&gt;&lt;/ul&gt;
  2854.  
  2855. &lt;h2&gt;In the community&lt;/h2&gt;
  2856.  
  2857. &lt;h3&gt;Major Threads&lt;/h3&gt;
  2858.  
  2859. &lt;p&gt;After a few relatively quiet weeks, there was a flurry of activity on the forums with announcements, DIPs, and library strategies discussed. Here are a few more the bigger ones:&lt;/p&gt;
  2860.  
  2861. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/o2psvk$1m96$1@digitalmars.com&quot;&gt;DIP1005: Dependency-Carrying Declarations is now available for community feedback&lt;/a&gt; where Andrei Alexandrescu tried to convince the community to back his proposal for local imports that still work in function argument and template constraint lists. Much of the crowd was skeptical of the value, but Andrei continued to refine his case. It is possible something will come from this.&lt;/p&gt;
  2862.  
  2863. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/hkmxrppbmzzryspgdtxs@forum.dlang.org&quot;&gt;DIP 1007 - keywords as identifiers with an escape symbol - feedback&lt;/a&gt; was also discussed, and likely shot down because you can use &lt;tt&gt;_&lt;/tt&gt; as an escape symbol now, changing the keyword. But, it is still possible a compelling case will arise.&lt;/p&gt;
  2864.  
  2865. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/phexetutyelrssyrucvw@forum.dlang.org&quot;&gt;A betterC modular standard library?&lt;/a&gt; comes from the Mir library team, wishing druntime and Phobos were more &amp;quot;pay as you go&amp;quot; than they are now. The term &amp;quot;betterC&amp;quot; is controversial since it comes from a barely implemented and nearly undocumented dmd switch and thus doesn't have an agreed upon definition. So much of the thread is trying to figure that out, and the rest is about how that'd apply to the library situation. I expect some kind of compromise will be reached eventually.&lt;/p&gt;
  2866.  
  2867. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/tdhdsvmknnpiugnngkex@forum.dlang.org&quot;&gt;CTFE Status&lt;/a&gt; is Stefan Koch's ongoing blog thread about his CTFE improvements. It has been around for a while, and he continues to make progress in massive performance boosts in CTFE in his private compiler fork, hoping to get it merged once it is stable.&lt;/p&gt;
  2868.  
  2869. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/o36etv$1dkf$1@digitalmars.com&quot;&gt;ModuleInfo, factories, and unittesting&lt;/a&gt; takes us back down the betterC road, looking at a specific proposal: just what good is ModuleInfo? I will have to weigh in on that thread, because I fear some of the commentators aren't totally familiar with the issues, but it shows there's a decent amount of interest in overhauling this glue between the compiler and runtime libraries and I think we can work it out as part of the betterC win/win compromise.&lt;/p&gt;
  2870.  
  2871. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/o2uohn$1bhg$1@digitalmars.com&quot;&gt;Making preconditions better specified and faster&lt;/a&gt; comes out of the &lt;tt&gt;assert&lt;/tt&gt; thread last week, wondering if we can improve its use in &lt;tt&gt;in&lt;/tt&gt; contracts. The topic of moving the calls of these contracts to calling code instead of the current position of part of the function being called in generated object code was brought up - this would result in better user errors and compiles. It may also lead to a speed optimization and allowing assert through @nogc's static checks.&lt;/p&gt;
  2872.  
  2873. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/o377hp$2gu5$1@digitalmars.com&quot;&gt;Our students could use your reviews!&lt;/a&gt; is Andrei exhorting people to review the PRs of the scholarship students, discussed &lt;a href=&quot;https://dlang.org/blog/2016/12/05/the-d-language-foundations-scholarship-program/&quot;&gt;in the blog last week&lt;/a&gt;. A good refresher of what the D foundation is doing with its funding now.&lt;/p&gt;
  2874.  
  2875. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/58be13e9-91cc-9cdd-0c1f-e6c439aa8c53@erdani.org&quot;&gt;[WIP] A Big O notation and algebra for D&lt;/a&gt; previews the technical work Andrei has been working on lately, making performance complexity a part of a function's statically analyzed signature.&lt;/p&gt;
  2876.  
  2877. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2878.  
  2879. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/tmofjecvnqdthvetezfp@forum.dlang.org&quot;&gt;Linker-hacking out the D runtime&lt;/a&gt;
  2880. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jjzxpvzdbbsqpmhasmef@forum.dlang.org&quot;&gt;D books for &lt;/a&gt;
  2881. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jholyhdrpchaflmztlcl@forum.dlang.org&quot;&gt;unDE 0.1.0: original file manager, image and text viewer&lt;/a&gt;
  2882. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fycpekmuleyuhqvpczfl@forum.dlang.org&quot;&gt;concepts v0.0.1&lt;/a&gt;
  2883. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nbsoerzljyxznxetgtji@forum.dlang.org&quot;&gt;Mir GLAS v0.0.6: easy usage with DMD and LDC&lt;/a&gt;
  2884. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/sfvgrtfowternnjwyxvf@forum.dlang.org&quot;&gt;Quick-and-Dirty Xiph Tremor decoder port&lt;/a&gt;
  2885. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ksfcjxmoabvyegybptnw@forum.dlang.org&quot;&gt;test_allocator v0.0.1 - don't leak memory in your std.experimental.allocator using code&lt;/a&gt;
  2886. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o2sq7k$mr1$1@digitalmars.com&quot;&gt;Milestone - DMD front end is now 100% D!&lt;/a&gt;
  2887. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tpguqydruxsocqxtclis@forum.dlang.org&quot;&gt;std.experimental.checkedint Formal Review&lt;/a&gt;
  2888. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o2tjom$20mk$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - December 22, 2016 - &amp;quot;The Curse of Knowledge: Et tu, D?&amp;quot; by Adam Wilson&lt;/a&gt;
  2889. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lkxukqzofrwvmcxxaytf@forum.dlang.org&quot;&gt;Fix suggestions for missing imports // code-d 0.15.0 &amp;amp; workspace-d 2.9.1 released&lt;/a&gt;
  2890. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cvkskcxnknpcvzqvkecf@forum.dlang.org&quot;&gt;LDC 1.1.0-beta6&lt;/a&gt;
  2891. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ehbmpoznmukucvibnepj@forum.dlang.org&quot;&gt;Mir Blog: Writing efficient numerical code in D&lt;/a&gt;
  2892. &lt;/li&gt;&lt;/ul&gt;
  2893.  
  2894. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2895.  
  2896. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2897. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2898. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2899. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2900. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2901. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2902. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2903. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2904. &lt;/li&gt;&lt;/ul&gt;
  2905.  
  2906.  
  2907. &lt;/div&gt;
  2908. </description></item><item><title>Issue #101</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-dec-11.html</link><guid>http://arsdnet.net/this-week-in-d/2016-dec-11.html</guid><pubDate>Sun, 11 Dec 2016 12:00:00 GMT</pubDate><description>
  2909. &lt;div id=&quot;body-container&quot;&gt;
  2910. &lt;h1&gt;
  2911. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2912. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2913. &lt;span id=&quot;title-date&quot;&gt;December 11, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2914.  
  2915. &lt;div id=&quot;preface&quot;&gt;
  2916.  
  2917. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2918.  
  2919. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2920.  
  2921. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2922.  
  2923. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2924.  
  2925. &lt;/div&gt;
  2926.  
  2927. &lt;h2&gt;Statistics&lt;/h2&gt;
  2928.  
  2929. &lt;ul&gt;&lt;li&gt;
  2930. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-12-05&amp;amp;chfieldto=2016-12-11&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2931. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-12-05&amp;amp;chfieldto=2016-12-11&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2932. 33 pull requests merged into the language:
  2933.  
  2934. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-05..2016-12-11&quot;&gt;16 into DMD&lt;/a&gt;,
  2935. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-05..2016-12-11&quot;&gt;15 into Phobos&lt;/a&gt;, and
  2936. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-05..2016-12-11&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2937. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-12-05..2016-12-11&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  2938. &lt;/li&gt;&lt;/ul&gt;
  2939.  
  2940. &lt;h2&gt;In the community&lt;/h2&gt;
  2941.  
  2942. &lt;h3&gt;Community announcements&lt;/h3&gt;
  2943.  
  2944. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/tatjluuwdvkdqiakoywk@forum.dlang.org&quot;&gt;Tutorial: Form upload in vibe.d&lt;/a&gt;
  2945. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zdcrkrktfsmvghmidamf@forum.dlang.org&quot;&gt;Getters/setters generator&lt;/a&gt;
  2946. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/izomqniqiefzhcqdjmzc@forum.dlang.org&quot;&gt;Andrei on the new D Foundation Scholarships&lt;/a&gt;
  2947. &lt;/li&gt;&lt;/ul&gt;
  2948.  
  2949. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  2950.  
  2951. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  2952. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  2953. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2954. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2955. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  2956. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  2957. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2958. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  2959. &lt;/li&gt;&lt;/ul&gt;
  2960.  
  2961.  
  2962. &lt;/div&gt;
  2963. </description></item><item><title>Issue #100</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-dec-04.html</link><guid>http://arsdnet.net/this-week-in-d/2016-dec-04.html</guid><pubDate>Sun, 04 Dec 2016 12:00:00 GMT</pubDate><description>
  2964. &lt;div id=&quot;body-container&quot;&gt;
  2965. &lt;h1&gt;
  2966. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  2967. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  2968. &lt;span id=&quot;title-date&quot;&gt;December 4, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  2969.  
  2970. &lt;div id=&quot;preface&quot;&gt;
  2971.  
  2972. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  2973.  
  2974. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  2975.  
  2976. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  2977.  
  2978. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  2979.  
  2980. &lt;/div&gt;
  2981.  
  2982. &lt;h2&gt;Statistics&lt;/h2&gt;
  2983.  
  2984. &lt;ul&gt;&lt;li&gt;
  2985. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-11-28&amp;amp;chfieldto=2016-12-04&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;4 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2986. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-11-28&amp;amp;chfieldto=2016-12-04&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  2987. 9 pull requests merged into the language:
  2988.  
  2989. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-28..2016-12-04&quot;&gt;6 into DMD&lt;/a&gt;,
  2990. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-28..2016-12-04&quot;&gt;0 into Phobos&lt;/a&gt;, and
  2991. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-28..2016-12-04&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  2992. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-28..2016-12-04&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  2993. &lt;/li&gt;&lt;/ul&gt;
  2994.  
  2995. &lt;h2&gt;Major Changes&lt;/h2&gt;
  2996.  
  2997. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/o1nl7n$2t4b$1@digitalmars.com&quot;&gt;Release D 2.072.1&lt;/a&gt; came out this week, a bug fix release fixing some regressions.&lt;/p&gt;
  2998.  
  2999. &lt;p&gt;In dmd master, steps were &lt;a href=&quot;https://github.com/dlang/dmd/commit/d39fe96018c9cc11b6b49ba790479ab07576c701&quot;&gt;taken&lt;/a&gt; to add support for the AVX instruction set, enabling more efficient SIMD (array and large number) processing.&lt;/p&gt;
  3000.  
  3001. &lt;h2&gt;In the community&lt;/h2&gt;
  3002.  
  3003. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3004.  
  3005. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o1rbn5$6kk$1@digitalmars.com&quot;&gt;Release DUB 1.1.1&lt;/a&gt;
  3006. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kwvuuusodlljhtrwzutj@forum.dlang.org&quot;&gt;Mir Random v0.0.1 release&lt;/a&gt;
  3007. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o1k44r$2j7c$1@digitalmars.com&quot;&gt;Boston Dlang Meetup December 15th&lt;/a&gt;
  3008. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o1gale$3cf$1@digitalmars.com&quot;&gt;D programming jobs site&lt;/a&gt;
  3009. &lt;/li&gt;&lt;/ul&gt;
  3010.  
  3011. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3012.  
  3013. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3014. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3015. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3016. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3017. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3018. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3019. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3020. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3021. &lt;/li&gt;&lt;/ul&gt;
  3022.  
  3023.  
  3024. &lt;/div&gt;
  3025. </description></item><item><title>Issue #99</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-nov-27.html</link><guid>http://arsdnet.net/this-week-in-d/2016-nov-27.html</guid><pubDate>Sun, 27 Nov 2016 12:00:00 GMT</pubDate><description>
  3026. &lt;div id=&quot;body-container&quot;&gt;
  3027. &lt;h1&gt;
  3028. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3029. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3030. &lt;span id=&quot;title-date&quot;&gt;November 27, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3031.  
  3032. &lt;div id=&quot;preface&quot;&gt;
  3033.  
  3034. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3035.  
  3036. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3037.  
  3038. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3039.  
  3040. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3041.  
  3042. &lt;/div&gt;
  3043.  
  3044. &lt;h2&gt;Statistics&lt;/h2&gt;
  3045.  
  3046. &lt;ul&gt;&lt;li&gt;
  3047. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-11-21&amp;amp;chfieldto=2016-11-27&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3048. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-11-21&amp;amp;chfieldto=2016-11-27&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3049. 26 pull requests merged into the language:
  3050.  
  3051. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-21..2016-11-27&quot;&gt;17 into DMD&lt;/a&gt;,
  3052. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-21..2016-11-27&quot;&gt;7 into Phobos&lt;/a&gt;, and
  3053. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-21..2016-11-27&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3054. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-21..2016-11-27&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  3055. &lt;/li&gt;&lt;/ul&gt;
  3056.  
  3057. &lt;h2&gt;In the community&lt;/h2&gt;
  3058.  
  3059. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3060.  
  3061. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o1g5a9$2r3l$1@digitalmars.com&quot;&gt;DIP1004: Inherited Constructors&lt;/a&gt;
  3062. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hbyrabczrpjaeyspdntc@forum.dlang.org&quot;&gt;Mir Random announce - Professional RNGs&lt;/a&gt;
  3063. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ywjxilsaqfkzqlqysmow@forum.dlang.org&quot;&gt;D IDE - Coedit 3 first beta&lt;/a&gt;
  3064. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o11f5q$369$1@digitalmars.com&quot;&gt;Beta D 2.072.1-b1&lt;/a&gt;
  3065. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nkyvlwboafmhapmbesss@forum.dlang.org&quot;&gt;Dlang dynamic compilation&lt;/a&gt;
  3066. &lt;/li&gt;&lt;/ul&gt;
  3067.  
  3068. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3069.  
  3070. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3071.  
  3072. &lt;p&gt;D structs have an initializer, even if they are used for interfacing with C. This is a small blob of data called something like &lt;tt&gt;_Dxxstruct_name__initZ&lt;/tt&gt;, or can be all zeroes, and is generated with the interface module.&lt;/p&gt;
  3073.  
  3074. &lt;p&gt;So if you use the initializer from the interface module, but do not link it in, you get an undefined symbol.&lt;/p&gt;
  3075.  
  3076.  
  3077. &lt;p&gt;Easiest fix: just link in that .d file and use the automatic features.&lt;/p&gt;
  3078.  
  3079.  
  3080. &lt;p&gt;Why does your struct have an initializer data symbol instead of being all zeroes? I'm not entirely sure, but I think it is because the contents are structs and it didn't look inside those structs to see if they too are zeroes, it just assumed struct = fancy initialized. That's arguably an enhancement request, but I wouldn't call it a bug.&lt;/p&gt;
  3081.  
  3082. &lt;p&gt;You can often bypass the initializer by using &lt;tt&gt;=0&lt;/tt&gt; or &lt;tt&gt;=void&lt;/tt&gt; in definitions, but not here... and that is arguably a bug, if you &lt;tt&gt;=void&lt;/tt&gt; all fields, it should be free to zero initialize the whole thing, but it doesn't.&lt;/p&gt;
  3083.  
  3084.  
  3085. &lt;p&gt;When do you use the initializer? Any time an item is default initialized: struct variable definitions, static arrays, or dynamic array appends. When nothing is default initialized, you don't use it, such as pointers and dynamic arrays which start as null (and thus point to no actual struct data). If you are explicitly initializing it, no default needed.&lt;/p&gt;
  3086.  
  3087. &lt;p&gt;You can bypass defalt initialization this with &lt;tt&gt;=void&lt;/tt&gt; at the end of that variable definition.&lt;/p&gt;
  3088.  
  3089. &lt;p&gt;Dynamic array length increases and appends also default initializes the new items you add. Just don't use that length function if you don't want to link in the other .d file.&lt;/p&gt;
  3090.  
  3091. &lt;p&gt;But while the associated linker errors can be annoying, it isn't really a bug - it is D's auto initialize feature creating some data that you didn't link. Avoiding D-specific features and bypassing initialization with =void can skip it, but I recommend just linking in the module.&lt;/p&gt;
  3092.  
  3093. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3094. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3095. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3096. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3097. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3098. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3099. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3100. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3101. &lt;/li&gt;&lt;/ul&gt;
  3102.  
  3103.  
  3104. &lt;/div&gt;
  3105. </description></item><item><title>Issue #98</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-nov-20.html</link><guid>http://arsdnet.net/this-week-in-d/2016-nov-20.html</guid><pubDate>Sun, 20 Nov 2016 12:00:00 GMT</pubDate><description>
  3106. &lt;div id=&quot;body-container&quot;&gt;
  3107. &lt;h1&gt;
  3108. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3109. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3110. &lt;span id=&quot;title-date&quot;&gt;November 20, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3111.  
  3112. &lt;div id=&quot;preface&quot;&gt;
  3113.  
  3114. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3115.  
  3116. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3117.  
  3118. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3119.  
  3120. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3121.  
  3122. &lt;/div&gt;
  3123.  
  3124. &lt;h2&gt;Statistics&lt;/h2&gt;
  3125.  
  3126. &lt;ul&gt;&lt;li&gt;
  3127. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-11-14&amp;amp;chfieldto=2016-11-20&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3128. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-11-14&amp;amp;chfieldto=2016-11-20&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3129. 22 pull requests merged into the language:
  3130.  
  3131. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-14..2016-11-20&quot;&gt;11 into DMD&lt;/a&gt;,
  3132. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-14..2016-11-20&quot;&gt;10 into Phobos&lt;/a&gt;, and
  3133. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-14..2016-11-20&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3134. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-14..2016-11-20&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  3135. &lt;/li&gt;&lt;/ul&gt;
  3136.  
  3137. &lt;h2&gt;In the community&lt;/h2&gt;
  3138.  
  3139. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3140.  
  3141. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o0bn81$qbq$1@digitalmars.com&quot;&gt;Nov 16 - Memory Safety and the D Programming Language&lt;/a&gt;
  3142. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qgxvrbxrvkxtimzvnetu@forum.dlang.org&quot;&gt;DIP 1003: remove &lt;tt&gt;body&lt;/tt&gt; as a keyword&lt;/a&gt;
  3143. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o0k4p6$139d$1@digitalmars.com&quot;&gt;Formal review of DIP1002&lt;/a&gt;
  3144. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o0d4g7$caf$1@digitalmars.com&quot;&gt;DConf 2017: Bigger, Badder, and Berliner! Call for Submissions now open&lt;/a&gt;
  3145. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hnsibgygsuqvecyttxco@forum.dlang.org&quot;&gt;Project Highlight: The New CTFE Engine&lt;/a&gt;
  3146. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lrlygefolnqfhzaeswxi@forum.dlang.org&quot;&gt;Russian AI Cup 2016&lt;/a&gt;
  3147. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/o0k4lm$1329$1@digitalmars.com&quot;&gt;Formal review of DIP1001&lt;/a&gt;
  3148. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/toqymwtuffqvqpdxijnw@forum.dlang.org&quot;&gt;Low-level and Hight-level Kafka bindings&lt;/a&gt;
  3149. &lt;/li&gt;&lt;/ul&gt;
  3150.  
  3151. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3152.  
  3153. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3154. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3155. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3156. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3157. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3158. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3159. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3160. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3161. &lt;/li&gt;&lt;/ul&gt;
  3162.  
  3163.  
  3164. &lt;/div&gt;
  3165. </description></item><item><title>Issue #97</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-nov-13.html</link><guid>http://arsdnet.net/this-week-in-d/2016-nov-13.html</guid><pubDate>Sun, 13 Nov 2016 12:00:00 GMT</pubDate><description>
  3166. &lt;div id=&quot;body-container&quot;&gt;
  3167. &lt;h1&gt;
  3168. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3169. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3170. &lt;span id=&quot;title-date&quot;&gt;November 13, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3171.  
  3172. &lt;div id=&quot;preface&quot;&gt;
  3173.  
  3174. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3175.  
  3176. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3177.  
  3178. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3179.  
  3180. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3181.  
  3182. &lt;/div&gt;
  3183.  
  3184. &lt;h2&gt;Statistics&lt;/h2&gt;
  3185.  
  3186. &lt;ul&gt;&lt;li&gt;
  3187. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-11-07&amp;amp;chfieldto=2016-11-13&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3188. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-11-07&amp;amp;chfieldto=2016-11-13&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3189. 15 pull requests merged into the language:
  3190.  
  3191. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-07..2016-11-13&quot;&gt;8 into DMD&lt;/a&gt;,
  3192. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-07..2016-11-13&quot;&gt;4 into Phobos&lt;/a&gt;, and
  3193. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-07..2016-11-13&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3194. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-11-07..2016-11-13&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  3195. &lt;/li&gt;&lt;/ul&gt;
  3196.  
  3197. &lt;h2&gt;In the community&lt;/h2&gt;
  3198.  
  3199. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3200.  
  3201. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/o08esa$osd$1@digitalmars.com&quot;&gt;SecureD - A simple cryptography library for D&lt;/a&gt;
  3202. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/drqdrobcoaanenocycgp@forum.dlang.org&quot;&gt;Article: Running D without its runtime&lt;/a&gt;
  3203. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/edzoqcprdqtewqqaabge@forum.dlang.org&quot;&gt;Link Time Optimization in LDC&lt;/a&gt;
  3204. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/usvbmwrfbhfdcndrhsor@forum.dlang.org&quot;&gt;Optimizing std.regex&lt;/a&gt;
  3205. &lt;/li&gt;&lt;/ul&gt;
  3206.  
  3207. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3208.  
  3209. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3210.  
  3211. &lt;p&gt;This week's tip comes from p0nce's &lt;a href=&quot;https://p0nce.github.io/d-idioms/&quot;&gt;D idioms page&lt;/a&gt; and is on &lt;b&gt;assuming @nogc&lt;/b&gt;.&lt;/p&gt;
  3212.  
  3213. &lt;p&gt;One of the problems with using @nogc in practice is that a lot of functions that could be annotated with it aren't. (I have argued before that I feel this is a major design flaw in &lt;tt&gt;@nogc&lt;/tt&gt; and I don't expect the situation to change much, but today we're talking about moving forward with the status quo regardless.) Unlike &lt;tt&gt;@safe&lt;/tt&gt; which has &lt;tt&gt;@trusted&lt;/tt&gt; to let you escape, &lt;tt&gt;@nogc&lt;/tt&gt; has no middle ground.&lt;/p&gt;
  3214.  
  3215. &lt;p&gt;But, you can hack it with some library magic:&lt;/p&gt;
  3216.  
  3217. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits;
  3218.  
  3219. &lt;font color=&quot;green&quot;&gt;// Casts @nogc out of a function or delegate type.
  3220. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; assumeNoGC(T) (T t) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (isFunctionPointer!T || isDelegate!T)
  3221. {
  3222.    &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; attrs = functionAttributes!T | FunctionAttribute.nogc;
  3223.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(SetFunctionAttributes!(T, functionLinkage!T, attrs)) t;
  3224. }
  3225.  
  3226. &lt;font color=&quot;green&quot;&gt;// This function can't be marked @nogc but you know with application knowledge it won't use the GC.
  3227. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; funcThatMightUseGC(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; timeout)
  3228. {
  3229.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (unlikelyCondition(timeout))
  3230.        &lt;font color=&quot;blue&quot;&gt;throw&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Exception(&lt;font color=&quot;red&quot;&gt;&amp;quot;The world actually imploded.&amp;quot;&lt;/font&gt;);
  3231.  
  3232.    doMoreStuff();
  3233. }
  3234.  
  3235. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; funcThatCantAffortGC() @nogc
  3236. {
  3237.    &lt;font color=&quot;green&quot;&gt;// using a casted delegate literal to call non-@nogc code
  3238. &lt;/font&gt;    assumeNoGC( (&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; timeout)
  3239.                {
  3240.                    funcThatMightUseGC(timeout);
  3241.                })(10000);
  3242. }
  3243. &lt;/pre&gt;
  3244.  
  3245. &lt;p&gt;If you do this, of course, you should inspect the source and/or use runtime profilers or debuggers to ensure it actually does what you want, but by using this brute-force cast solution, you can introduce the middle ground that the language neglected to open up more of the library ecosystem to your nogc code.&lt;/p&gt;
  3246.  
  3247. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3248. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3249. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3250. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3251. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3252. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3253. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3254. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3255. &lt;/li&gt;&lt;/ul&gt;
  3256.  
  3257.  
  3258. &lt;/div&gt;
  3259. </description></item><item><title>Issue #96</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-nov-06.html</link><guid>http://arsdnet.net/this-week-in-d/2016-nov-06.html</guid><pubDate>Sun, 06 Nov 2016 12:00:00 GMT</pubDate><description>
  3260. &lt;div id=&quot;body-container&quot;&gt;
  3261. &lt;h1&gt;
  3262. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3263. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3264. &lt;span id=&quot;title-date&quot;&gt;November 6, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3265.  
  3266. &lt;div id=&quot;preface&quot;&gt;
  3267.  
  3268. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3269.  
  3270. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3271.  
  3272. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3273.  
  3274. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3275.  
  3276. &lt;/div&gt;
  3277.  
  3278. &lt;h2&gt;Statistics&lt;/h2&gt;
  3279.  
  3280. &lt;ul&gt;&lt;li&gt;
  3281. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-10-31&amp;amp;chfieldto=2016-11-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3282. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-10-31&amp;amp;chfieldto=2016-11-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3283. 31 pull requests merged into the language:
  3284.  
  3285. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-31..2016-11-06&quot;&gt;23 into DMD&lt;/a&gt;,
  3286. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-31..2016-11-06&quot;&gt;6 into Phobos&lt;/a&gt;, and
  3287. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-31..2016-11-06&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3288. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-31..2016-11-06&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  3289. &lt;/li&gt;&lt;/ul&gt;
  3290.  
  3291. &lt;h2&gt;In the community&lt;/h2&gt;
  3292.  
  3293. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3294.  
  3295. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/nvibdq$1hve$1@digitalmars.com&quot;&gt;Boston D Language Meetup in Back Bay&lt;/a&gt;
  3296. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pkqxalsxegexlwpbrmyw@forum.dlang.org&quot;&gt;Got a post for the D Blog?&lt;/a&gt;
  3297. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nv89kv$mjs$1@digitalmars.com&quot;&gt;Release vibe.d 0.7.30&lt;/a&gt;
  3298. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/trxrewjxncocihftjkra@forum.dlang.org&quot;&gt;JavaScript ( QScript Qt-5 ) in GUI framework QtE5&lt;/a&gt;
  3299. &lt;/li&gt;&lt;/ul&gt;
  3300.  
  3301. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3302.  
  3303. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3304.  
  3305. &lt;p&gt;D allows trailing commas in most places where it needs a comma separated list, including arrays and function definitions:&lt;/p&gt;
  3306.  
  3307. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; test(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; b,) {} &lt;font color=&quot;green&quot;&gt;// legal
  3308. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a = [1, 2, 3,]; &lt;font color=&quot;green&quot;&gt;// legal
  3309. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; Cool {
  3310. a,
  3311. b,
  3312. c, &lt;font color=&quot;green&quot;&gt;// legal
  3313. &lt;/font&gt; }
  3314. &lt;/pre&gt;
  3315.  
  3316. &lt;p&gt;I really like this for copy/pasting lines, rearranging elements, or generating code strings: you can just always put the comma at en end of every line and then move them around as you please.&lt;/p&gt;
  3317.  
  3318. &lt;p&gt;In my opinion, it is little niceties like this that reduce mental friction to make writing D a bit nicer.&lt;/p&gt;
  3319.  
  3320. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3321. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3322. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3323. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3324. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3325. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3326. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3327. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3328. &lt;/li&gt;&lt;/ul&gt;
  3329.  
  3330.  
  3331. &lt;/div&gt;
  3332. </description></item><item><title>Issue #95</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-oct-30.html</link><guid>http://arsdnet.net/this-week-in-d/2016-oct-30.html</guid><pubDate>Sun, 30 Oct 2016 12:00:00 GMT</pubDate><description>
  3333. &lt;div id=&quot;body-container&quot;&gt;
  3334. &lt;h1&gt;
  3335. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3336. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3337. &lt;span id=&quot;title-date&quot;&gt;October 30, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3338.  
  3339. &lt;div id=&quot;preface&quot;&gt;
  3340.  
  3341. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3342.  
  3343. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3344.  
  3345. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3346.  
  3347. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3348.  
  3349. &lt;/div&gt;
  3350.  
  3351. &lt;h2&gt;Statistics&lt;/h2&gt;
  3352.  
  3353. &lt;ul&gt;&lt;li&gt;
  3354. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-10-24&amp;amp;chfieldto=2016-10-30&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3355. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-10-24&amp;amp;chfieldto=2016-10-30&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3356. 18 pull requests merged into the language:
  3357.  
  3358. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-24..2016-10-30&quot;&gt;9 into DMD&lt;/a&gt;,
  3359. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-24..2016-10-30&quot;&gt;7 into Phobos&lt;/a&gt;, and
  3360. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-24..2016-10-30&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3361. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-24..2016-10-30&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  3362. &lt;/li&gt;&lt;/ul&gt;
  3363.  
  3364. &lt;h2&gt;In the community&lt;/h2&gt;
  3365.  
  3366. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3367.  
  3368. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/dfzaipkxqajzbwhgzjri@forum.dlang.org&quot;&gt;Box2D Lite D Port (Yet Another)&lt;/a&gt;
  3369. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nv66le$hdi$1@digitalmars.com&quot;&gt;Release D 2.072.0&lt;/a&gt;
  3370. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nuolih$5eu$1@digitalmars.com&quot;&gt;The DLang UPB Languages and Systems Research Scholarship&lt;/a&gt;
  3371. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nrwacywlkvxpvvpheady@forum.dlang.org&quot;&gt;SoundTab Theremin software synthesizer&lt;/a&gt;
  3372. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bxuduoksgxmbjuwumumh@forum.dlang.org&quot;&gt;[Slides] Generic Low Level  Programming with D - The Better C for your Business&lt;/a&gt;
  3373. &lt;/li&gt;&lt;/ul&gt;
  3374.  
  3375. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3376.  
  3377. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3378. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3379. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3380. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3381. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3382. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3383. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3384. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3385. &lt;/li&gt;&lt;/ul&gt;
  3386.  
  3387.  
  3388. &lt;/div&gt;
  3389. </description></item><item><title>Issue #94</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-oct-23.html</link><guid>http://arsdnet.net/this-week-in-d/2016-oct-23.html</guid><pubDate>Sun, 23 Oct 2016 12:00:00 GMT</pubDate><description>
  3390. &lt;div id=&quot;body-container&quot;&gt;
  3391. &lt;h1&gt;
  3392. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3393. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3394. &lt;span id=&quot;title-date&quot;&gt;October 23, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3395.  
  3396. &lt;div id=&quot;preface&quot;&gt;
  3397.  
  3398. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3399.  
  3400. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3401.  
  3402. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3403.  
  3404. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3405.  
  3406. &lt;/div&gt;
  3407.  
  3408. &lt;h2&gt;Statistics&lt;/h2&gt;
  3409.  
  3410. &lt;ul&gt;&lt;li&gt;
  3411. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-10-17&amp;amp;chfieldto=2016-10-23&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;7 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3412. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-10-17&amp;amp;chfieldto=2016-10-23&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3413. 19 pull requests merged into the language:
  3414.  
  3415. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-17..2016-10-23&quot;&gt;11 into DMD&lt;/a&gt;,
  3416. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-17..2016-10-23&quot;&gt;6 into Phobos&lt;/a&gt;, and
  3417. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-17..2016-10-23&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3418. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-17..2016-10-23&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  3419. &lt;/li&gt;&lt;/ul&gt;
  3420.  
  3421. &lt;h2&gt;In the community&lt;/h2&gt;
  3422.  
  3423. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3424.  
  3425. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/nu5p7b$hjk$1@digitalmars.com&quot;&gt;Please say hello to our third team member: Razvan Nitu&lt;/a&gt;
  3426. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nudt1e$27v6$1@digitalmars.com&quot;&gt;For those who cannot reach github today due to DNS DDOS attack&lt;/a&gt;
  3427. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wdgsohkrughgtqcoovcq@forum.dlang.org&quot;&gt;Project Highlight: libasync&lt;/a&gt;
  3428. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nubcou$t6p$1@digitalmars.com&quot;&gt;mysql-native v0.1.7&lt;/a&gt;
  3429. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ypkirugfacyoxynkfgvg@forum.dlang.org&quot;&gt;d.godbolt.org compiler explorer now has LDC too&lt;/a&gt;
  3430. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zqjecojvhaipsqgxxtrm@forum.dlang.org&quot;&gt;Comparing compilation time of random code in C++, D, Go, Pascal and Rust&lt;/a&gt;
  3431. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nu8qq8$2i1a$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup - October 27, 2016 - &amp;quot;D runtime infrastructure for your projects&amp;quot; by Ilya Yaroshenko&lt;/a&gt;
  3432. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qyqihwenqyuqvcngtstd@forum.dlang.org&quot;&gt;Munich D October Meetup&lt;/a&gt;
  3433. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/psjotfaflashxrhaynui@forum.dlang.org&quot;&gt;Berlin D Meetup October 2016&lt;/a&gt;
  3434. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nu5bce$2qmn$1@digitalmars.com&quot;&gt;Boston D Meetup&lt;/a&gt;
  3435. &lt;/li&gt;&lt;/ul&gt;
  3436.  
  3437. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3438.  
  3439. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3440. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3441. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3442. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3443. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3444. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3445. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3446. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3447. &lt;/li&gt;&lt;/ul&gt;
  3448.  
  3449.  
  3450. &lt;/div&gt;
  3451. </description></item><item><title>Issue #93</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-oct-16.html</link><guid>http://arsdnet.net/this-week-in-d/2016-oct-16.html</guid><pubDate>Sun, 16 Oct 2016 12:00:00 GMT</pubDate><description>
  3452. &lt;div id=&quot;body-container&quot;&gt;
  3453. &lt;h1&gt;
  3454. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3455. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3456. &lt;span id=&quot;title-date&quot;&gt;October 16, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3457.  
  3458. &lt;div id=&quot;preface&quot;&gt;
  3459.  
  3460. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3461.  
  3462. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3463.  
  3464. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3465.  
  3466. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3467.  
  3468. &lt;/div&gt;
  3469.  
  3470. &lt;h2&gt;Statistics&lt;/h2&gt;
  3471.  
  3472. &lt;ul&gt;&lt;li&gt;
  3473. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-10-10&amp;amp;chfieldto=2016-10-16&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;19 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3474. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-10-10&amp;amp;chfieldto=2016-10-16&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3475. 25 pull requests merged into the language:
  3476.  
  3477. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-10..2016-10-16&quot;&gt;12 into DMD&lt;/a&gt;,
  3478. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-10..2016-10-16&quot;&gt;12 into Phobos&lt;/a&gt;, and
  3479. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-10..2016-10-16&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3480. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-10..2016-10-16&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  3481. &lt;/li&gt;&lt;/ul&gt;
  3482.  
  3483. &lt;h2&gt;In the community&lt;/h2&gt;
  3484.  
  3485. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3486.  
  3487. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ntoj02$2c8h$1@digitalmars.com&quot;&gt;New team member: Lucia&lt;/a&gt;
  3488. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mbkollxudouxppdylzuo@forum.dlang.org&quot;&gt;cpuid v0.3.0: Better C, Virtual Machines, AVX2 &amp;amp; AVX512, GDC&lt;/a&gt;
  3489. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/cygqcvlylcskjdkdznbg@forum.dlang.org&quot;&gt;GSoC Report: std.experimental.xml&lt;/a&gt;
  3490. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oegnxzcpfnrggdndceur@forum.dlang.org&quot;&gt;Article: Increasing the performance of D math code&lt;/a&gt;
  3491. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ntj737$fkt$1@digitalmars.com&quot;&gt;Auto-gen list of D compiler versions: Improvements&lt;/a&gt;
  3492. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/puqtdefdgbpiwcwjckyd@forum.dlang.org&quot;&gt;scone 1.2.0&lt;/a&gt;
  3493. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/owsuyantjedwudygfijq@forum.dlang.org&quot;&gt;DStatsD - A fast, memory efficent, vibe.d compatible client for etsy's statsd.&lt;/a&gt;
  3494. &lt;/li&gt;&lt;/ul&gt;
  3495.  
  3496. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3497.  
  3498. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3499. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3500. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3501. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3502. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3503. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3504. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3505. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3506. &lt;/li&gt;&lt;/ul&gt;
  3507.  
  3508.  
  3509. &lt;/div&gt;
  3510. </description></item><item><title>Issue #92</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-oct-09.html</link><guid>http://arsdnet.net/this-week-in-d/2016-oct-09.html</guid><pubDate>Sun, 09 Oct 2016 12:00:00 GMT</pubDate><description>
  3511. &lt;div id=&quot;body-container&quot;&gt;
  3512. &lt;h1&gt;
  3513. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3514. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3515. &lt;span id=&quot;title-date&quot;&gt;October 9, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3516.  
  3517. &lt;div id=&quot;preface&quot;&gt;
  3518.  
  3519. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3520.  
  3521. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3522.  
  3523. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3524.  
  3525. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3526.  
  3527. &lt;/div&gt;
  3528.  
  3529. &lt;h2&gt;Statistics&lt;/h2&gt;
  3530.  
  3531. &lt;ul&gt;&lt;li&gt;
  3532. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-10-03&amp;amp;chfieldto=2016-10-09&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3533. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-10-03&amp;amp;chfieldto=2016-10-09&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3534. 32 pull requests merged into the language:
  3535.  
  3536. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-03..2016-10-09&quot;&gt;15 into DMD&lt;/a&gt;,
  3537. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-03..2016-10-09&quot;&gt;11 into Phobos&lt;/a&gt;, and
  3538. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-03..2016-10-09&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3539. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-10-03..2016-10-09&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  3540. &lt;/li&gt;&lt;/ul&gt;
  3541.  
  3542. &lt;h2&gt;Major Changes&lt;/h2&gt;
  3543.  
  3544. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/ntdghg$12pj$1@digitalmars.com&quot;&gt;Beta 2.072.0-b2&lt;/a&gt; and &lt;a href=&quot;http://forum.dlang.org/post/kpakddqjgumxpwnxazwk@forum.dlang.org&quot;&gt;LDC 1.1.0-beta3&lt;/a&gt; were released this week.&lt;/p&gt;
  3545.  
  3546. &lt;h2&gt;In the community&lt;/h2&gt;
  3547.  
  3548. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3549.  
  3550. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ptjowjogectqmrazjigl@forum.dlang.org&quot;&gt;tanya event loop v0.1.0&lt;/a&gt;
  3551. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jkpzfgsurbsjohngyyaf@forum.dlang.org&quot;&gt;code-d 0.12.0 - The user friendly release (code-d for noobs)&lt;/a&gt;
  3552. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nt1cci$pqu$1@digitalmars.com&quot;&gt;Please say hello to Alexandru&lt;/a&gt;
  3553. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/haahzwjgpbmfxrdwtaiw@forum.dlang.org&quot;&gt;Project Highlight: DlangUI&lt;/a&gt;
  3554. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pqdzftascsvjgfhwzuuu@forum.dlang.org&quot;&gt;WinTab (wacom tablet API) and Windows Core Audio bindings - new DUB packages&lt;/a&gt;
  3555. &lt;/li&gt;&lt;/ul&gt;
  3556.  
  3557. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3558.  
  3559. &lt;h2&gt;Editorial&lt;/h2&gt;
  3560.  
  3561. &lt;p&gt;I want to write a little about the &lt;tt&gt;-betterC&lt;/tt&gt; switch to dmd today. This switch started out as an undocumented hack that Walter used for testing code, but it was eventually discovered by the community and is now documented - though still unsupported.&lt;/p&gt;
  3562.  
  3563. &lt;p&gt;Walter is considering changing that, and I have mixed feelings on it. On one hand, yeah, I think I'd enjoy using it if it worked well, but on the other hand, virtually all my practical, real world code wouldn't touch it.&lt;/p&gt;
  3564.  
  3565. &lt;p&gt;However, on the gripping hand, having something fun to play with is a way to get developers excited about the language, which, in turn, can convert them to become true missionaries for the church of D, and that's something I want. So let's take a look at this.&lt;/p&gt;
  3566.  
  3567. &lt;p&gt;I find &lt;tt&gt;-betterC&lt;/tt&gt; to be disappointing right now because:&lt;/p&gt;
  3568.  
  3569. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; core.stdc.stdio;
  3570.  
  3571. &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C)
  3572. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; main() {
  3573.    printf(&lt;font color=&quot;red&quot;&gt;&amp;quot;Hello, world!\n&amp;quot;&lt;/font&gt;);
  3574.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0;
  3575. }
  3576. &lt;/pre&gt;
  3577.  
  3578. &lt;p&gt;Fails to compile with any version of dmd without druntime on Linux (it does, however, work on Windows! I haven't tried other systems). &lt;tt&gt;dmd test.d -betterC -defaultlib=&lt;/tt&gt; gives &lt;tt&gt;undefined reference to '_d_dso_registry'&lt;/tt&gt;. &lt;tt&gt;_d_dso_registry&lt;/tt&gt; is an internal druntime function that gets called with information about the executable or shared object - it is part of D's dll support and generally useful, but I don't think it should be required for a C hello world program.&lt;/p&gt;
  3579.  
  3580. &lt;p&gt;Well, that's easy to hack around, we can define the function to do nothing:&lt;/p&gt;
  3581.  
  3582. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt;(linux) &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;__gshared&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; _d_dso_registry() {}
  3583. &lt;/pre&gt;
  3584.  
  3585. &lt;p&gt;Add that, and now it compiles and runs. Cool! Though, this step should not be necessary. If we want to promote &lt;tt&gt;-betterC&lt;/tt&gt; (Walter told me via email that he would like a better name if we actually start promoting this, by the way, and the internal team does have one in mind: DPrime), it should just work out of the box at least for a C-style hello.&lt;/p&gt;
  3586.  
  3587. &lt;p&gt;But, we need to go a step further. D without structs is almost useless; &lt;tt&gt;struct&lt;/tt&gt; is a must-have, even C has that! So, let's add one:&lt;/p&gt;
  3588.  
  3589. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Foo {}
  3590. &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; main() {
  3591.  Foo foo;
  3592.  &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0;
  3593. }
  3594. &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt;(linux) &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;__gshared&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; _d_dso_registry() {}
  3595. &lt;/pre&gt;
  3596.  
  3597. &lt;p&gt;Same compile: &lt;tt&gt;dmd -betterC -defaultlib= test.d&lt;/tt&gt;....  new error: &lt;tt&gt; undefined reference to '_D15TypeInfo_Struct6__vtblZ'&lt;/tt&gt;. Yes, it insists on generating typeinfo, which the compiler makes a subclass of a parent class, which is assumed to be defined in druntime. Since we aren't using druntime, the reference to the parent class causes a linker error.&lt;/p&gt;
  3598.  
  3599. &lt;p&gt;This needs to change. As you use more types, more typeinfo linker errors will pop up. If we want to enjoy using this switch, all this needs to just work - the compiler must suppress generation of type info unless it is sure it will actually be necessary. (Such as using classes - typeinfo is needed for dynamic casting, so if you declare a class, it is fair game. At that point, my preference would be for the compiler to magically generate all the info - I'm not sure why it is library defined at all, since the library definition must exactly match the compiler's layout anyway. But, I can also live with it generating the data and issuing the linker error. The developer can then bring in some of the info from druntime or implement it themselves. Yes, I see this as being an advanced hacker's toy, where linker errors are allowed to happen and the user is assumed to know how to deal with it. I am just annoyed when the happen &lt;i&gt;unnecessarily&lt;/i&gt;.)&lt;/p&gt;
  3600.  
  3601. &lt;p&gt;A recent &lt;a href=&quot;https://github.com/dlang/dmd/pull/6159/files&quot;&gt;commit&lt;/a&gt; to dmd made it stop emitting exception handling info unless it was actually needed. I applaud this, and believe it helps here (though to be honest, I haven't proven it, I accidentally overwrote my old dmd with a new dmd so I didn't do a fair before and after comparison) - we don't need to add any exception handling hacks unless we want exceptions....&lt;/p&gt;
  3602.  
  3603. &lt;p&gt;...almost. Exception handling code is actually used in dmd in two places that you might not expect: &lt;tt&gt;scope&lt;/tt&gt; guard statements and destructors. Go back to our struct example and add a destructor. You'll get a link error:
  3604. &lt;tt&gt;r.o:(.eh_frame+0x6b): undefined reference to '__dmd_personality_v0'&lt;/tt&gt; which is referring to DWARF exception info (or &lt;tt&gt;Symbol Undefined __d_framehandle&lt;/tt&gt; on Windows, same thing, different platform).&lt;/p&gt;
  3605.  
  3606. &lt;p&gt;Yes, internally, the compiler rewrites struct destructors (as well as scope guards) into &lt;tt&gt;try&lt;/tt&gt;/&lt;tt&gt;finally&lt;/tt&gt; blocks, meaning it reuses the exception handling logic. (BTW, don't freak out about this, the implementation is quite efficient.) I'm not sure what is best here... on the one hand, C doesn't have struct destructors, so we aren't behind, but they are REALLY nice to have, so I'd love to see them work too.&lt;/p&gt;
  3607.  
  3608. &lt;p&gt;Finally, some of the stuff like &lt;tt&gt;assert&lt;/tt&gt; and &lt;tt&gt;invariant&lt;/tt&gt; blocks may trigger runtime code, and &lt;tt&gt;assert&lt;/tt&gt; in particular pops up in a few places unless you use &lt;tt&gt;-release&lt;/tt&gt; to dmd. I have said before that I don't like &lt;tt&gt;-release&lt;/tt&gt; and very rarely recommend its use because the benefits of bounds checking and assertions IMO FAR outweigh the cost in 98% of cases... but this is one of those situations where I do think it is a fair thing to use. &lt;tt&gt;-release&lt;/tt&gt; suppresses automatic checks, which again, just puts us on the same level as C, while keeping the door open to stop using the switch and bring in assert functions from druntime when you want it.&lt;/p&gt;
  3609.  
  3610. &lt;p&gt;In summary, I cannot promote &lt;tt&gt;-betterC&lt;/tt&gt; today... but I could, given the following conditions:&lt;/p&gt;
  3611.  
  3612. &lt;p&gt;Hello world with a struct compiles and links out-of-the-box using &lt;tt&gt;dmd -betterC -defaultlib= -release&lt;/tt&gt;.&lt;/p&gt;
  3613.  
  3614. &lt;p&gt;Yes, that's all I ask. Here's the concrete items I see as needed:&lt;/p&gt;
  3615.  
  3616. &lt;ul&gt;&lt;li&gt; TypeInfo generation is suppressed unless actually necessary.&lt;/li&gt;&lt;li&gt;
  3617. &lt;tt&gt;_d_dso_registry&lt;/tt&gt; isn't referenced.&lt;/li&gt;&lt;li&gt;
  3618. MAYBE: destructors are rigged somehow. Simply adding &lt;tt&gt;extern(C) __gshared void* __dmd_personality_v0;&lt;/tt&gt; to your project is enough to hack around this and make them work, so I don't feel this is strictly necessary - it is a minor hack to ask. Perhaps the compiler could output a weak symbol to satisfy the linker, while being easily overridden by a user- or library-defined proper implementation.
  3619. &lt;/li&gt;&lt;/ul&gt;
  3620.  
  3621. &lt;p&gt;That isn't a long list. TypeInfo is the hardest one - it might necessitate &lt;tt&gt;= void&lt;/tt&gt; initialization by the user in cases of structs with non-zero initializers... but I'm OK with that. Actually, I kinda like it. (All-zero initializers do not need an init block, the compiler just memset(0) it to auto initialize. &lt;tt&gt;float&lt;/tt&gt; and &lt;tt&gt;char&lt;/tt&gt; data types are the most common non-zero initializers, and you can force them to be zero with &lt;tt&gt;=0&lt;/tt&gt; in the struct definition. So this is easy to work with.)&lt;/p&gt;
  3622.  
  3623. &lt;p&gt;I can't promise Walter would accept patches... but the impression I get from our emails is that he would, and if these things started to work, you'd have my backing too.&lt;/p&gt;
  3624.  
  3625. &lt;p&gt;Again, I don't think this is super useful in real life, so I wouldn't spend a great deal of time on this... but I do honestly think it'd give a fun boost to a bunch of us, so it is reasonably high bang for buck.&lt;/p&gt;
  3626.  
  3627. &lt;p&gt;Any takers?&lt;/p&gt;
  3628.  
  3629.  
  3630.  
  3631. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3632. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3633. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3634. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3635. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3636. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3637. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3638. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3639. &lt;/li&gt;&lt;/ul&gt;
  3640.  
  3641.  
  3642. &lt;/div&gt;
  3643. </description></item><item><title>Issue #91</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-oct-02.html</link><guid>http://arsdnet.net/this-week-in-d/2016-oct-02.html</guid><pubDate>Sun, 02 Oct 2016 12:00:00 GMT</pubDate><description>
  3644. &lt;div id=&quot;body-container&quot;&gt;
  3645. &lt;h1&gt;
  3646. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3647. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3648. &lt;span id=&quot;title-date&quot;&gt;October 2, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3649.  
  3650. &lt;div id=&quot;preface&quot;&gt;
  3651.  
  3652. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3653.  
  3654. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3655.  
  3656. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3657.  
  3658. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3659.  
  3660. &lt;/div&gt;
  3661.  
  3662. &lt;h2&gt;Statistics&lt;/h2&gt;
  3663.  
  3664. &lt;ul&gt;&lt;li&gt;
  3665. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-09-26&amp;amp;chfieldto=2016-10-02&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3666. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-09-26&amp;amp;chfieldto=2016-10-02&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;25 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3667. 31 pull requests merged into the language:
  3668.  
  3669. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-26..2016-10-02&quot;&gt;10 into DMD&lt;/a&gt;,
  3670. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-26..2016-10-02&quot;&gt;17 into Phobos&lt;/a&gt;, and
  3671. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-26..2016-10-02&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3672. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-26..2016-10-02&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  3673. &lt;/li&gt;&lt;/ul&gt;
  3674.  
  3675. &lt;h2&gt;Major Changes&lt;/h2&gt;
  3676.  
  3677. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/nsp82c$t2g$1@digitalmars.com&quot;&gt;Beta 2.072.0-b1&lt;/a&gt; came out this week, the beta of the next major release (as opposed to last week, which was a bug fix release). This has some new features, including &lt;b&gt;dub included in the package&lt;/b&gt;, extensions to &lt;b&gt;std.experimental.ndslice&lt;/b&gt;, and a few deprecations to clean up legacy cruft in the language and open the door for new features.&lt;/p&gt;
  3678.  
  3679. &lt;p&gt;A notable deprecation is using the result of a comma operator now triggers a deprecation warning. The compiler devs are hoping to weed out uses of that old C operator in order to open the possibility of adding a tuple unpacking syntax to the core language. I'd speculate that might happen in about a year.&lt;/p&gt;
  3680.  
  3681. &lt;h2&gt;In the community&lt;/h2&gt;
  3682.  
  3683. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3684.  
  3685. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/mkaawymlhemlmhhbtrta@forum.dlang.org&quot;&gt;PowerNex - The Userspace update! (also first birthday)&lt;/a&gt;
  3686. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/truqsvvveermdrqfljxf@forum.dlang.org&quot;&gt;Terminix 1.30 Released&lt;/a&gt;
  3687. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nshaek$17vi$1@digitalmars.com&quot;&gt;GC blessed for C++ (again)&lt;/a&gt;
  3688. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/eqkssjabfxtrwarmrouk@forum.dlang.org&quot;&gt;New user, even she does not know yet&lt;/a&gt;
  3689. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pmbbsbmmklenbhfepmtm@forum.dlang.org&quot;&gt;How to Write @trusted Code in D&lt;/a&gt;
  3690. &lt;/li&gt;&lt;/ul&gt;
  3691.  
  3692. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3693.  
  3694. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3695.  
  3696. &lt;p&gt;This week's tip is an old one, about member function pointers, by Walter Bright.&lt;/p&gt;
  3697.  
  3698. &lt;p&gt;The tip is here: &lt;a href=&quot;http://digitalmars.com/articles/b68.html&quot;&gt;Member Function Pointers in D&lt;/a&gt;, and summarized, it suggests:&lt;/p&gt;
  3699.  
  3700. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; C {
  3701.  &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a;
  3702.  &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; foo(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; i) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; i + a; }
  3703. }
  3704.  
  3705. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; mfp = &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;(C self, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; i) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; self.foo(i); };
  3706. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; c = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; C();
  3707. mfp(c, 1);
  3708. &lt;/pre&gt;
  3709.  
  3710. &lt;p&gt;Yes, using a &lt;tt&gt;function&lt;/tt&gt; pointer that takes an explicit &lt;tt&gt;this&lt;/tt&gt; (or &lt;tt&gt;self&lt;/tt&gt; since &lt;tt&gt;this&lt;/tt&gt; is a keyword) argument that simply forwards the call. This simple code is pretty easy to write and works equally well to the C++ option.&lt;/p&gt;
  3711.  
  3712. &lt;p&gt;A few notes: using the &lt;tt&gt;function&lt;/tt&gt; keyword ensures you don't accidentally reference a local variable, which would change the type to &lt;tt&gt;delegate&lt;/tt&gt; and possibly allocate memory for a closure.&lt;/p&gt;
  3713.  
  3714. &lt;p&gt;There are other ways to do member function pointers in D, including taking a delegate directly off the class and poking its &lt;tt&gt;ptr&lt;/tt&gt; member, or casting it to a &lt;tt&gt;function&lt;/tt&gt; that takes the hidden argument explicitly, but those ways are less reliably safe to do than the simple wrapper Walter describes.&lt;/p&gt;
  3715.  
  3716. &lt;p&gt;Walter's pattern is a good arrow in your D quiver.&lt;/p&gt;
  3717.  
  3718. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3719. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3720. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3721. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3722. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3723. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3724. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3725. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3726. &lt;/li&gt;&lt;/ul&gt;
  3727.  
  3728.  
  3729. &lt;/div&gt;
  3730. </description></item><item><title>Issue #90</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-sep-25.html</link><guid>http://arsdnet.net/this-week-in-d/2016-sep-25.html</guid><pubDate>Sun, 25 Sep 2016 12:00:00 GMT</pubDate><description>
  3731. &lt;div id=&quot;body-container&quot;&gt;
  3732. &lt;h1&gt;
  3733. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3734. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3735. &lt;span id=&quot;title-date&quot;&gt;September 25, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3736.  
  3737. &lt;div id=&quot;preface&quot;&gt;
  3738.  
  3739. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3740.  
  3741. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3742.  
  3743. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3744.  
  3745. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3746.  
  3747. &lt;/div&gt;
  3748.  
  3749. &lt;h2&gt;Statistics&lt;/h2&gt;
  3750.  
  3751. &lt;ul&gt;&lt;li&gt;
  3752. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-09-19&amp;amp;chfieldto=2016-09-25&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3753. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-09-19&amp;amp;chfieldto=2016-09-25&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;29 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3754. 36 pull requests merged into the language:
  3755.  
  3756. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-19..2016-09-25&quot;&gt;11 into DMD&lt;/a&gt;,
  3757. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-19..2016-09-25&quot;&gt;22 into Phobos&lt;/a&gt;, and
  3758. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-19..2016-09-25&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3759. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-19..2016-09-25&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  3760. &lt;/li&gt;&lt;/ul&gt;
  3761.  
  3762. &lt;h2&gt;Major Changes&lt;/h2&gt;
  3763.  
  3764. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/nroh1p$2dqj$1@digitalmars.com&quot;&gt;DMD Release 2.071.2&lt;/a&gt; came out this week, a bug fix release to quash several regressions.&lt;/p&gt;
  3765.  
  3766. &lt;h2&gt;In the community&lt;/h2&gt;
  3767.  
  3768. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3769.  
  3770. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ns9i45$1dah$1@digitalmars.com&quot;&gt;SDLang-D v0.10.0 - Big convenience improvements&lt;/a&gt;
  3771. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/yhfbuxnrqkiqtvsnvngf@forum.dlang.org&quot;&gt;Numerical age for D: Mir v0.18.0 is faster then OpenBLAS&lt;/a&gt;
  3772. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ns34ob$30b9$1@digitalmars.com&quot;&gt;Diet-NG 1.0.0 released&lt;/a&gt;
  3773. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wooffcihcfaqvzkcjmhn@forum.dlang.org&quot;&gt;The Origins of Learning D&lt;/a&gt;
  3774. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ns2ptn$2f25$1@digitalmars.com&quot;&gt;undeaD is now an official D repository!&lt;/a&gt;
  3775. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pkywkhumjrzwaegsioyp@forum.dlang.org&quot;&gt;Ocean v2.1.1 released&lt;/a&gt;
  3776. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fkqlfbgsvcdlpincmxhg@forum.dlang.org&quot;&gt;V0.5.2 of Emsi's containers library is released&lt;/a&gt;
  3777. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nrv1pj$2rif$1@digitalmars.com&quot;&gt;Cppcon tonight at 8:30 in Bellevue&lt;/a&gt;
  3778. &lt;/li&gt;&lt;/ul&gt;
  3779.  
  3780. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3781.  
  3782. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3783.  
  3784. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/post/fkqlfbgsvcdlpincmxhg@forum.dlang.org&quot;&gt;V0.5.2 of Emsi's containers library was released&lt;/a&gt; this week, a library which I feel should get a little more attention.&lt;/p&gt;
  3785.  
  3786. &lt;p&gt;Emsi is a company which uses D in data analysis software with some performance needs. To achieve their goal, they needed a collection of data containers to work with their data efficiently and wanted flexibility on memory allocation strategies to optimize in that area.&lt;/p&gt;
  3787.  
  3788. &lt;p&gt;Not finding anything that quite fit them in D at the time, they wrote their own lib and released it to the public. This container library uses &lt;tt&gt;std.experimental.allocator&lt;/tt&gt; as the base for its memory needs and contains modules like cyclic buffer, dynamic array, hash maps, trees, and more.&lt;/p&gt;
  3789.  
  3790. &lt;p&gt;It has found some popularity among the D user base... at least the ones who know it exists! And it has proven to work pretty well.&lt;/p&gt;
  3791.  
  3792. &lt;p&gt;If you need a container lib, check out Emsi's code.&lt;/p&gt;
  3793.  
  3794. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  3795. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  3796. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3797. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3798. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  3799. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  3800. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3801. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  3802. &lt;/li&gt;&lt;/ul&gt;
  3803.  
  3804.  
  3805. &lt;/div&gt;
  3806. </description></item><item><title>Issue #89</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-sep-18.html</link><guid>http://arsdnet.net/this-week-in-d/2016-sep-18.html</guid><pubDate>Sun, 18 Sep 2016 12:00:00 GMT</pubDate><description>
  3807. &lt;div id=&quot;body-container&quot;&gt;
  3808. &lt;h1&gt;
  3809. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  3810. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  3811. &lt;span id=&quot;title-date&quot;&gt;September 18, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  3812.  
  3813. &lt;div id=&quot;preface&quot;&gt;
  3814.  
  3815. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  3816.  
  3817. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  3818.  
  3819. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  3820.  
  3821. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  3822.  
  3823. &lt;/div&gt;
  3824.  
  3825. &lt;h2&gt;Statistics&lt;/h2&gt;
  3826.  
  3827. &lt;ul&gt;&lt;li&gt;
  3828. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-09-12&amp;amp;chfieldto=2016-09-18&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3829. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-09-12&amp;amp;chfieldto=2016-09-18&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  3830. 48 pull requests merged into the language:
  3831.  
  3832. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-12..2016-09-18&quot;&gt;16 into DMD&lt;/a&gt;,
  3833. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-12..2016-09-18&quot;&gt;25 into Phobos&lt;/a&gt;, and
  3834. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-12..2016-09-18&quot;&gt;7 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  3835. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-12..2016-09-18&quot;&gt;15 pull requests merged into the website.&lt;/a&gt;
  3836. &lt;/li&gt;&lt;/ul&gt;
  3837.  
  3838. &lt;h2&gt;In the community&lt;/h2&gt;
  3839.  
  3840. &lt;h3&gt;Community announcements&lt;/h3&gt;
  3841.  
  3842. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/wdhuftpqjlkllcwbvanq@forum.dlang.org&quot;&gt;LDC: Speed up incremental builds with object file caching&lt;/a&gt;
  3843. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dzlprerjwaftuiupvufx@forum.dlang.org&quot;&gt;Flycheck DMD Coverage and Dscanner Support&lt;/a&gt;
  3844. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nri1sd$2u9t$1@digitalmars.com&quot;&gt;Beta D 2.071.2-b6&lt;/a&gt;
  3845. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/troqerbcrwgioswvcyaa@forum.dlang.org&quot;&gt;Berlin D Meetup September 2016&lt;/a&gt;
  3846. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mqrhsxvtaodsnixaxgxw@forum.dlang.org&quot;&gt;Project Highlight: Timur Gafarov&lt;/a&gt;
  3847. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/udddfosypmcmkifurjxa@forum.dlang.org&quot;&gt;Beta D 2.071.2-b5&lt;/a&gt;
  3848. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jckzgfwmcasglbkwalaf@forum.dlang.org&quot;&gt;Beta D 2.071.2-b4&lt;/a&gt;
  3849. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ipukulxdpcijdywjgchi@forum.dlang.org&quot;&gt;small promotion for Dlang and Mir&lt;/a&gt;
  3850. &lt;/li&gt;&lt;/ul&gt;
  3851.  
  3852. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  3853.  
  3854. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  3855.  
  3856. &lt;p&gt;This week's tip is courtesy of ketmar, writing about an event system. The following his his writing:&lt;/p&gt;
  3857.  
  3858. &lt;p&gt;This is simple &amp;quot;event bus&amp;quot; system, which works somewhat similar to &amp;quot;signals&amp;quot; concept,
  3859. but is slightly easier to use.&lt;/p&gt;
  3860.  
  3861. &lt;p&gt;Programmes has to subclass &lt;tt&gt;Event&lt;/tt&gt; object and define the necessary properties in it,
  3862. like this:&lt;/p&gt;
  3863.  
  3864. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; EventChat : Event {
  3865.      string msg;
  3866.      &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (ChatServer asrv, string amsg) { source = asrv; msg = amsg; }
  3867.    }
  3868. &lt;/pre&gt;
  3869.  
  3870. &lt;p&gt;Then one must post it with &lt;tt&gt;.post()&lt;/tt&gt; method. This can be combined into one-liner:&lt;/p&gt;
  3871.  
  3872. &lt;pre class=&quot;d_code&quot;&gt;    (&lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; EventChat(srv0, &lt;font color=&quot;red&quot;&gt;&amp;quot;message #0&amp;quot;&lt;/font&gt;)).post;
  3873. &lt;/pre&gt;
  3874.  
  3875. &lt;p&gt;To process all posted (queued) events, one has to call &lt;tt&gt;processEvents()&lt;/tt&gt; function.&lt;/p&gt;
  3876.  
  3877. &lt;p&gt;Now the most interesting part: receiving and processing events. To receive event,
  3878. programmer has to register event listener for it:&lt;/p&gt;
  3879.  
  3880. &lt;pre class=&quot;d_code&quot;&gt;    addEventListener(&lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;, (EventChat evt) {
  3881.      &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  3882.      writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;server #&amp;quot;&lt;/font&gt;, (&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(ChatServer)evt.source).id, &lt;font color=&quot;red&quot;&gt;&amp;quot;: &amp;quot;&lt;/font&gt;, evt.msg);
  3883.      log ~= evt.msg;
  3884.    });
  3885. &lt;/pre&gt;
  3886.  
  3887. &lt;p&gt;Note the smart trick there: we are specifying event type to catch right in the
  3888. delegate, and event system will route only EventChat (and it's subclasses) to
  3889. this listener.&lt;/p&gt;
  3890.  
  3891. &lt;p&gt;The implementation of the above scheme require some trickery, though. In runtime,
  3892. we can check object type via cast: &lt;tt&gt;cast(MyObj)obj&lt;/tt&gt;, which can return &lt;tt&gt;null&lt;/tt&gt; if
  3893. &lt;tt&gt;obj&lt;/tt&gt; cannot be casted to the given type. Our event system stores all handlers
  3894. in common structure:&lt;/p&gt;
  3895.  
  3896. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; EventListenerInfo {
  3897.      TypeInfo_Class ti;
  3898.      &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt; (&lt;font color=&quot;green&quot;&gt;/*Event*/&lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;* e) dg; &lt;font color=&quot;green&quot;&gt;// actually, `e` is any `Event` subclass; cheater!
  3899. &lt;/font&gt;      &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; id;
  3900.    }
  3901. &lt;/pre&gt;
  3902.  
  3903. &lt;p&gt;Here, we have class type, but not class itself. If we'll try to do &lt;tt&gt;cast(ti)obj&lt;/tt&gt;, compiler
  3904. will complain. So how can we emulate dynamic casting in this case? Well, the compiler is
  3905. emiting a call to druntime function for such casts, and that function accepts TypeInfo_Class!
  3906. So we will just emulate what the compiler does:&lt;/p&gt;
  3907.  
  3908. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;green&quot;&gt;// import druntime casting function
  3909. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;* _d_dynamic_cast (Object o, ClassInfo c);
  3910.    &lt;font color=&quot;green&quot;&gt;// and call it!
  3911. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; cobj = _d_dynamic_cast(obj, ti);
  3912.    &lt;font color=&quot;green&quot;&gt;// now, cobj is `null` if `obj` has inappropriate type
  3913. &lt;/font&gt;&lt;/pre&gt;
  3914.  
  3915. &lt;p&gt;Of course, we can create internal delegate in &lt;tt&gt;addEventListener()&lt;/tt&gt; and do the casting in it,
  3916. as we have exact type there, but then I won't have a chance to show you this cool casting trick! ;-)&lt;/p&gt;
  3917.  
  3918. &lt;p&gt;Also the source code includes &amp;quot;weak reference&amp;quot; implementation, so adding event listener for
  3919. some object won't make it &amp;quot;always alive&amp;quot;.&lt;/p&gt;
  3920.  
  3921.  
  3922. &lt;p&gt;Now, the full source for &amp;quot;event bus&amp;quot;, with example:&lt;/p&gt;
  3923.  
  3924. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  3925. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; eventbus;
  3926.  
  3927. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  3928. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// sample usage
  3929. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; ChatServer {
  3930.  &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; id;
  3931.  &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; aid) { id = aid; }
  3932. }
  3933.  
  3934. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; EventChat : Event {
  3935.  string msg;
  3936.  &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (ChatServer asrv, string amsg) { source = asrv; msg = amsg; }
  3937. }
  3938.  
  3939. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; ChatTextPane {
  3940.  string[] log;
  3941.  &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; lid;
  3942.  
  3943.  &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; () {
  3944.    lid = addEventListener(&lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;, (EventChat evt) {
  3945.      &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  3946.      writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;server #&amp;quot;&lt;/font&gt;, (&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(ChatServer)evt.source).id, &lt;font color=&quot;red&quot;&gt;&amp;quot;: &amp;quot;&lt;/font&gt;, evt.msg);
  3947.      log ~= evt.msg;
  3948.    });
  3949.  }
  3950.  
  3951.  ~&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; () { removeEventListener(lid); }
  3952. }
  3953.  
  3954.  
  3955. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main () {
  3956.  &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; srv0 = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; ChatServer(0);
  3957.  &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; srv1 = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; ChatServer(1);
  3958.  &lt;font color=&quot;green&quot;&gt;// text pane will receive all chat events
  3959. &lt;/font&gt;  &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; textlog = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; ChatTextPane();
  3960.  &lt;font color=&quot;green&quot;&gt;// this will receive only server1 chat events
  3961. &lt;/font&gt;  addEventListener(srv1, (EventChat evt) {
  3962.    &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(evt.source &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; srv1);
  3963.    &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  3964.    writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;LOG for server #1: &amp;quot;&lt;/font&gt;, evt.msg);
  3965.  });
  3966.  
  3967.  &lt;font color=&quot;green&quot;&gt;// now send some events
  3968. &lt;/font&gt;  (&lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; EventChat(srv0, &lt;font color=&quot;red&quot;&gt;&amp;quot;message #0&amp;quot;&lt;/font&gt;)).post;
  3969.  (&lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; EventChat(srv1, &lt;font color=&quot;red&quot;&gt;&amp;quot;message #1&amp;quot;&lt;/font&gt;)).post;
  3970.  
  3971.  &lt;font color=&quot;green&quot;&gt;// process queued events
  3972. &lt;/font&gt;  processEvents();
  3973. }
  3974.  
  3975.  
  3976. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  3977. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Event {
  3978.  Object source; &lt;font color=&quot;green&quot;&gt;// can be null
  3979. &lt;/font&gt;
  3980.  &lt;font color=&quot;green&quot;&gt;// propagation flags
  3981. &lt;/font&gt;  &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; PFlags : &lt;font color=&quot;blue&quot;&gt;ubyte&lt;/font&gt; {
  3982.    Eaten     = 1U&amp;lt;&amp;lt;0, &lt;font color=&quot;green&quot;&gt;// event is processed, but not cancelled
  3983. &lt;/font&gt;    Cancelled = 1U&amp;lt;&amp;lt;1, &lt;font color=&quot;green&quot;&gt;// event is cancelled (it may be *both* processed and cancelled!)
  3984. &lt;/font&gt;    Posted    = 1U&amp;lt;&amp;lt;7, &lt;font color=&quot;green&quot;&gt;// event is posted
  3985. &lt;/font&gt;  }
  3986.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;ubyte&lt;/font&gt; flags;
  3987.  
  3988.  &lt;font color=&quot;blue&quot;&gt;final&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; post () {
  3989.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (posted) &lt;font color=&quot;blue&quot;&gt;throw&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Exception(&lt;font color=&quot;red&quot;&gt;&amp;quot;can't post already posted event&amp;quot;&lt;/font&gt;);
  3990.    flags |= PFlags.Posted;
  3991.    events ~= &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;;
  3992.  }
  3993.  
  3994. &lt;font color=&quot;blue&quot;&gt;final&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;pure&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; @safe @nogc:
  3995.  &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; eat () { flags |= PFlags.Eaten; }
  3996.  &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; cancel () { flags |= PFlags.Cancelled; }
  3997.  
  3998. &lt;font color=&quot;blue&quot;&gt;const&lt;/font&gt; @property:
  3999.  &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; eaten () { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; ((flags&amp;amp;(PFlags.Eaten|PFlags.Cancelled)) == PFlags.Eaten); }
  4000.  &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; cancelled () { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; ((flags&amp;amp;PFlags.Cancelled) != 0); }
  4001.  &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; processed () { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (eaten || cancelled); }
  4002.  &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; posted () { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; ((flags&amp;amp;PFlags.Posted) != 0); }
  4003. }
  4004.  
  4005.  
  4006. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  4007. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// this returns event listener id which can be used in `removeEventListener()` or 0
  4008. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; addEventListener(E:Event) (Object srcobj, &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt; (E evt) dg) {
  4009.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (dg &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0;
  4010.  &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; EventListenerInfo eli; llist) {
  4011.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;typeid&lt;/font&gt;(E) == eli.ti &amp;amp;&amp;amp; eli.dg &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(EventListenerInfo.DgType)dg) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; eli.id;
  4012.  }
  4013.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (lastid == lastid.max) lastid = 1; &lt;font color=&quot;green&quot;&gt;// wrapping
  4014. &lt;/font&gt;  llist ~= EventListenerInfo(&lt;font color=&quot;blue&quot;&gt;typeid&lt;/font&gt;(E), &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(EventListenerInfo.DgType)dg, srcobj);
  4015.  &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; llist[$-1].id;
  4016. }
  4017.  
  4018.  
  4019. &lt;font color=&quot;green&quot;&gt;// returns `true` if a listener was succesfully removed
  4020. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// this is @nogc, so it can be called in dtors
  4021. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; removeEventListener (&lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; id) @nogc {
  4022.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (id == 0) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4023.  &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; EventListenerInfo eli; llist) {
  4024.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (eli.id == id) {
  4025.      needListenerCleanup = &lt;font color=&quot;blue&quot;&gt;true&lt;/font&gt;;
  4026.      eli.id = 0;
  4027.      eli.dg = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  4028.      &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;true&lt;/font&gt;;
  4029.    }
  4030.  }
  4031.  &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4032. }
  4033.  
  4034.  
  4035. &lt;font color=&quot;green&quot;&gt;// call this to process all queued events
  4036. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// note that if event handlers will keep adding events,
  4037. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// this function will never return
  4038. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;public&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; processEvents () {
  4039.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (events.length == 0) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt;;
  4040.  cleanupListeners();
  4041.  &lt;font color=&quot;blue&quot;&gt;while&lt;/font&gt; (events.length &amp;gt; 0) {
  4042.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; evt = events.ptr[0];
  4043.    &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt; c; 1..events.length) events.ptr[c-1] = events.ptr[c];
  4044.    events[$-1] = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  4045.    events.length -= 1;
  4046.    events.assumeSafeAppend;
  4047.    &lt;font color=&quot;blue&quot;&gt;try&lt;/font&gt; {
  4048.      callEventListeners(evt);
  4049.    } &lt;font color=&quot;blue&quot;&gt;catch&lt;/font&gt; (Exception e) {
  4050.      &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio : stderr;
  4051.      stderr.writefln(&lt;font color=&quot;red&quot;&gt;&amp;quot;EVENT PROCESSING ERROR: %s&amp;quot;&lt;/font&gt;, e.msg);
  4052.    }
  4053.  }
  4054.  cleanupListeners();
  4055. }
  4056.  
  4057.  
  4058. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  4059. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// private implementation part
  4060. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt;:
  4061.  
  4062. Event[] events; &lt;font color=&quot;green&quot;&gt;// queued events
  4063. &lt;/font&gt;
  4064.  
  4065. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  4066. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// get druntime dynamic cast function
  4067. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;* _d_dynamic_cast (Object o, ClassInfo c);
  4068.  
  4069.  
  4070.  
  4071. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; EventListenerInfo {
  4072.  &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; DgType = &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt; (&lt;font color=&quot;green&quot;&gt;/*Event*/&lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;* e); &lt;font color=&quot;green&quot;&gt;// actually, `e` is any `Event` subclass
  4073. &lt;/font&gt;  TypeInfo_Class ti;
  4074.  DgType dg;
  4075.  &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; id;
  4076.  Weak!Object srcobj;
  4077.  &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (TypeInfo_Class ati, DgType adg, Object sobj) {
  4078.    ti = ati;
  4079.    id = ++lastid;
  4080.    dg = adg;
  4081.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (sobj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) srcobj = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Weak!Object(sobj);
  4082.  }
  4083. }
  4084.  
  4085. &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt; lastid;
  4086. EventListenerInfo[] llist;
  4087. &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; needListenerCleanup = &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4088.  
  4089.  
  4090. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; cleanupListeners () {
  4091.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (!needListenerCleanup) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt;;
  4092.  needListenerCleanup = &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4093.  size_t pos = 0;
  4094.  &lt;font color=&quot;blue&quot;&gt;while&lt;/font&gt; (pos &amp;lt; llist.length) {
  4095.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (llist.ptr[pos].srcobj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt; &amp;amp;&amp;amp; llist.ptr[pos].srcobj.empty) { llist.ptr[pos].id = 0; }
  4096.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (llist.ptr[pos].id == 0) {
  4097.      &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt; c; pos+1..llist.length) llist.ptr[c-1] = llist.ptr[c];
  4098.      llist[$-1] = EventListenerInfo.init;
  4099.      llist.length -= 1;
  4100.      llist.assumeSafeAppend;
  4101.    } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  4102.      ++pos;
  4103.    }
  4104.  }
  4105. }
  4106.  
  4107.  
  4108. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; callEventListeners (Event evt) {
  4109.  &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (evt &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt; || evt.processed) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt;;
  4110.  &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; EventListenerInfo eli; llist) {
  4111.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (eli.id == 0) &lt;font color=&quot;blue&quot;&gt;continue&lt;/font&gt;;
  4112.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (eli.srcobj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) {
  4113.      &lt;font color=&quot;green&quot;&gt;// if our source object died, mark this listener for deletion
  4114. &lt;/font&gt;      &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (eli.srcobj.empty) { needListenerCleanup = &lt;font color=&quot;blue&quot;&gt;true&lt;/font&gt;; eli.id = 0; eli.dg = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;; &lt;font color=&quot;blue&quot;&gt;continue&lt;/font&gt;; }
  4115.      &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (evt.source &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) &lt;font color=&quot;blue&quot;&gt;continue&lt;/font&gt;;
  4116.      &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (evt.source !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; eli.srcobj.object) &lt;font color=&quot;blue&quot;&gt;continue&lt;/font&gt;;
  4117.    }
  4118.    &lt;font color=&quot;green&quot;&gt;// the following line does `cast(ObjType)evt` using `TypeInfo_Class`
  4119. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; ecc = _d_dynamic_cast(evt, eli.ti);
  4120.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (ecc !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) {
  4121.      eli.dg(ecc);
  4122.      &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (evt.processed) &lt;font color=&quot;blue&quot;&gt;break&lt;/font&gt;;
  4123.    }
  4124.  }
  4125. }
  4126.  
  4127.  
  4128. &lt;font color=&quot;green&quot;&gt;// ////////////////////////////////////////////////////////////////////////// //
  4129. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// a thread-safe weak reference implementation
  4130. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// based on the code from http://forum.dlang.org/thread/jjote0$1cql$1@digitalmars.com
  4131. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; core.atomic, core.memory;
  4132.  
  4133. &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt; (Object) DEvent;
  4134. &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; (C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; rt_attachDisposeEvent (Object h, DEvent e);
  4135. &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; (C) &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; rt_detachDisposeEvent (Object h, DEvent e);
  4136.  
  4137. &lt;font color=&quot;blue&quot;&gt;final&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Weak(T : Object) {
  4138.  &lt;font color=&quot;green&quot;&gt;// Note: This class uses a clever trick which works fine for
  4139. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// a conservative GC that was never intended to do
  4140. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// compaction/copying in the first place. However, if compaction is
  4141. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// ever added to D's GC, this class will break horribly. If D ever
  4142. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// gets such a GC, we should push strongly for built-in weak
  4143. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// references.
  4144. &lt;/font&gt;
  4145.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; size_t mObject;
  4146.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; size_t mPtr;
  4147.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; size_t mHash;
  4148.  
  4149.  &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; (T obj=&lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) @trusted {
  4150.    hook(obj);
  4151.  }
  4152.  
  4153.  @property T object () &lt;font color=&quot;blue&quot;&gt;const&lt;/font&gt; @trusted &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; {
  4154.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; obj = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(T)&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*)(atomicLoad(*&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;shared&lt;/font&gt;)&amp;amp;mObject)^0xa5a5a5a5u);
  4155.    &lt;font color=&quot;green&quot;&gt;// we've moved obj into the GC-scanned stack space, so it's now
  4156. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// safe to ask the GC whether the object is still alive.
  4157. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// note that even if the cast and assignment of the obj local
  4158. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// doesn't put the object on the stack, this call will.
  4159. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// so, either way, this is safe.
  4160. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (obj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt; &amp;amp;&amp;amp; GC.addrOf(&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*)obj)) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; obj;
  4161.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  4162.  }
  4163.  
  4164.  @property &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; object (T obj) @trusted {
  4165.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; oobj = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(T)&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*)(atomicLoad(*&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;shared&lt;/font&gt;)&amp;amp;mObject)^0xa5a5a5a5u);
  4166.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (oobj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt; &amp;amp;&amp;amp; GC.addrOf(&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*)oobj)) unhook(oobj);
  4167.    oobj = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  4168.    hook(obj);
  4169.  }
  4170.  
  4171.  @property &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; empty () &lt;font color=&quot;blue&quot;&gt;const&lt;/font&gt; @trusted &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; {
  4172.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (object &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;);
  4173.  }
  4174.  
  4175.  &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; clear () @trusted { object = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;; }
  4176.  
  4177.  &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; opAssign (T obj) @trusted { object = obj; }
  4178.  
  4179.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; hook (Object obj) @trusted {
  4180.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (obj !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) {
  4181.      &lt;font color=&quot;green&quot;&gt;//auto ptr = cast(size_t)cast(void*)obj;
  4182. &lt;/font&gt;      &lt;font color=&quot;green&quot;&gt;// fix from Andrej Mitrovic
  4183. &lt;/font&gt;      &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; ptr = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(size_t)*(&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;**)&amp;amp;obj);
  4184.      &lt;font color=&quot;green&quot;&gt;// we use atomics because not all architectures may guarantee atomic store and load of these values
  4185. &lt;/font&gt;      atomicStore(*&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;shared&lt;/font&gt;)&amp;amp;mObject, ptr^0xa5a5a5a5u);
  4186.      &lt;font color=&quot;green&quot;&gt;// only assigned once, so no atomics
  4187. &lt;/font&gt;      mPtr = ptr^0xa5a5a5a5u;
  4188.      mHash = &lt;font color=&quot;blue&quot;&gt;typeid&lt;/font&gt;(T).getHash(&amp;amp;obj);
  4189.      rt_attachDisposeEvent(obj, &amp;amp;unhook);
  4190.      GC.setAttr(&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*)&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;, GC.BlkAttr.NO_SCAN);
  4191.    } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  4192.      atomicStore(*&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;shared&lt;/font&gt;)&amp;amp;mObject, &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(size_t)0^0xa5a5a5a5u);
  4193.    }
  4194.  }
  4195.  
  4196.  &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; unhook (Object obj) @trusted {
  4197.    rt_detachDisposeEvent(obj, &amp;amp;unhook);
  4198.    &lt;font color=&quot;green&quot;&gt;// this assignment is important.
  4199. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// if we don't null mObject when it is collected, the check
  4200. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// in object could return false positives where the GC has
  4201. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// reused the memory for a new object.
  4202. &lt;/font&gt;    atomicStore(*&lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;shared&lt;/font&gt;)&amp;amp;mObject, &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(size_t)0^0xa5a5a5a5u);
  4203.  }
  4204.  
  4205.  &lt;font color=&quot;blue&quot;&gt;override&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; opEquals (Object o) @trusted &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; {
  4206.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; o) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;true&lt;/font&gt;;
  4207.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; weak = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(Weak!T)o) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (mPtr == weak.mPtr);
  4208.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4209.  }
  4210.  
  4211.  &lt;font color=&quot;blue&quot;&gt;override&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; opCmp (Object o) @trusted &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; {
  4212.    &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (&lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; weak = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(Weak!T)o) &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (mPtr &amp;gt; weak.mPtr ? 1 : mPtr &amp;lt; weak.mPtr ? -1 : 0);
  4213.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 1;
  4214.  }
  4215.  
  4216.  &lt;font color=&quot;blue&quot;&gt;override&lt;/font&gt; size_t toHash () @trusted &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; {
  4217.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; obj = object;
  4218.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (obj ? &lt;font color=&quot;blue&quot;&gt;typeid&lt;/font&gt;(T).getHash(&amp;amp;obj) : mHash);
  4219.  }
  4220.  
  4221.  &lt;font color=&quot;blue&quot;&gt;override&lt;/font&gt; string toString () @trusted {
  4222.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; obj = object;
  4223.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; (obj ? obj.toString() : toString());
  4224.  }
  4225. }
  4226. &lt;/pre&gt;
  4227.  
  4228. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4229. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4230. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4231. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4232. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4233. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4234. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4235. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4236. &lt;/li&gt;&lt;/ul&gt;
  4237.  
  4238.  
  4239. &lt;/div&gt;
  4240. </description></item><item><title>Issue #88</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-sep-11.html</link><guid>http://arsdnet.net/this-week-in-d/2016-sep-11.html</guid><pubDate>Sun, 11 Sep 2016 12:00:00 GMT</pubDate><description>
  4241. &lt;div id=&quot;body-container&quot;&gt;
  4242. &lt;h1&gt;
  4243. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4244. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4245. &lt;span id=&quot;title-date&quot;&gt;September 11, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4246.  
  4247. &lt;div id=&quot;preface&quot;&gt;
  4248.  
  4249. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4250.  
  4251. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4252.  
  4253. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4254.  
  4255. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4256.  
  4257. &lt;/div&gt;
  4258.  
  4259. &lt;h2&gt;Statistics&lt;/h2&gt;
  4260.  
  4261. &lt;ul&gt;&lt;li&gt;
  4262. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-09-05&amp;amp;chfieldto=2016-09-11&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;2 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4263. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-09-05&amp;amp;chfieldto=2016-09-11&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4264. 13 pull requests merged into the language:
  4265.  
  4266. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-05..2016-09-11&quot;&gt;3 into DMD&lt;/a&gt;,
  4267. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-05..2016-09-11&quot;&gt;7 into Phobos&lt;/a&gt;, and
  4268. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-05..2016-09-11&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4269. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-09-05..2016-09-11&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  4270. &lt;/li&gt;&lt;/ul&gt;
  4271.  
  4272. &lt;h2&gt;In the community&lt;/h2&gt;
  4273.  
  4274. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4275.  
  4276. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/kpsplufcavjprjcbgjtn@forum.dlang.org&quot;&gt;workspace-d 2.7.2 &amp;amp; code-d 0.10.14&lt;/a&gt;
  4277. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nqs26p$10co$1@digitalmars.com&quot;&gt;mysql-native v0.1.5&lt;/a&gt;
  4278. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/blsrxiltwzhnlfgzmyfx@forum.dlang.org&quot;&gt;From the D Blog -- GSoC Report: Step&lt;/a&gt;
  4279. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/lbilqqcqbojzfqhanjdf@forum.dlang.org&quot;&gt;DlangUI 0.9.0: Console backend added&lt;/a&gt;
  4280. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nqmi8e$2mj2$1@digitalmars.com&quot;&gt;D Boston September Meetup&lt;/a&gt;
  4281. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/thkzglpwsxxfrsgsjnxy@forum.dlang.org&quot;&gt;Chennai Meetup&lt;/a&gt;
  4282. &lt;/li&gt;&lt;/ul&gt;
  4283.  
  4284. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4285.  
  4286. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  4287.  
  4288. &lt;p&gt;Never name anything &lt;tt&gt;init&lt;/tt&gt;. The language will allow it, but you'll get random breakage that is a pain to debug unless you have some idea where to look.&lt;/p&gt;
  4289.  
  4290. &lt;p&gt;All types in D have a built in property called &lt;tt&gt;init&lt;/tt&gt; that returns the initial value for it. However, this is not a keyword so there is nothing preventing you from defining your own member with the name... which breaks all the code that expects &lt;tt&gt;item.init&lt;/tt&gt; to return the built in value. Among the things that make this assumption is &lt;tt&gt;std.range&lt;/tt&gt;.. which is used heavily throughout Phobos.&lt;/p&gt;
  4291.  
  4292. &lt;p&gt;If you do this wrong, you will get bizarre errors. Try compiling this, with and without the &lt;tt&gt;init&lt;/tt&gt; method commented:&lt;/p&gt;
  4293.  
  4294. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.array;
  4295.  
  4296. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Test {
  4297.        &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; front;
  4298.        &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; popFront() {}
  4299.        &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; empty() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;true&lt;/font&gt;; }
  4300.        &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; init() {}
  4301. }
  4302.  
  4303. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4304.        Test test;
  4305.        &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[] arr = test.array;
  4306. }
  4307. &lt;/pre&gt;
  4308.  
  4309. &lt;p&gt;With &lt;tt&gt;init&lt;/tt&gt;, it gives:&lt;/p&gt;
  4310.  
  4311. &lt;pre class=&quot;d_code&quot;&gt;iii.d(12): Error: &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; std.array.array cannot deduce &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt; from argument types !()(Test), candidates are:
  4312. /home/me/d/dmd2/linux/bin32/../../src/phobos/std/array.d(97):        std.array.array(Range)(Range r) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (isIterable!Range &amp;amp;&amp;amp; !isNarrowString!Range &amp;amp;&amp;amp; !isInfinite!Range)
  4313. /home/me/d/dmd2/linux/bin32/../../src/phobos/std/array.d(199):        std.array.array(String)(String str) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (isNarrowString!String)
  4314. &lt;/pre&gt;
  4315.  
  4316. &lt;p&gt;Without &lt;tt&gt;init&lt;/tt&gt;, it compiles normally - we have a plain input range and Phobos recognizes it as such. But with init, it fails... because &lt;tt&gt;isInputRange&lt;/tt&gt; happens to be implemented in terms of &lt;tt&gt;is(typeof(T.init))&lt;/tt&gt;. Internal implementation gives random external failure, all because there's a seemingly innocuous method called &lt;tt&gt;init&lt;/tt&gt; on the type.&lt;/p&gt;
  4317.  
  4318. &lt;p&gt;So just take my advice and pretend &lt;tt&gt;init&lt;/tt&gt; is a keyword and never use it. It will end in misery otherwise.&lt;/p&gt;
  4319.  
  4320. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4321. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4322. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4323. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4324. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4325. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4326. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4327. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4328. &lt;/li&gt;&lt;/ul&gt;
  4329.  
  4330.  
  4331. &lt;/div&gt;
  4332. </description></item><item><title>Issue #87</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-sep-04.html</link><guid>http://arsdnet.net/this-week-in-d/2016-sep-04.html</guid><pubDate>Sun, 04 Sep 2016 12:00:00 GMT</pubDate><description>
  4333. &lt;div id=&quot;body-container&quot;&gt;
  4334. &lt;h1&gt;
  4335. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4336. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4337. &lt;span id=&quot;title-date&quot;&gt;September 4, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4338.  
  4339. &lt;div id=&quot;preface&quot;&gt;
  4340.  
  4341. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4342.  
  4343. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4344.  
  4345. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4346.  
  4347. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4348.  
  4349. &lt;/div&gt;
  4350.  
  4351. &lt;h2&gt;Statistics&lt;/h2&gt;
  4352.  
  4353. &lt;ul&gt;&lt;li&gt;
  4354. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-08-29&amp;amp;chfieldto=2016-09-04&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4355. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-08-29&amp;amp;chfieldto=2016-09-04&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4356. 27 pull requests merged into the language:
  4357.  
  4358. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-29..2016-09-04&quot;&gt;10 into DMD&lt;/a&gt;,
  4359. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-29..2016-09-04&quot;&gt;11 into Phobos&lt;/a&gt;, and
  4360. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-29..2016-09-04&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4361. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-29..2016-09-04&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  4362. &lt;/li&gt;&lt;/ul&gt;
  4363.  
  4364. &lt;h2&gt;In the community&lt;/h2&gt;
  4365.  
  4366. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4367.  
  4368. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/qqtpcsqnpqoqttdmphya@forum.dlang.org&quot;&gt;[OT] LLVM 3.9 released - you can try the release already with LDC!&lt;/a&gt;
  4369. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/xyzxvgzlvxtwsazbhyly@forum.dlang.org&quot;&gt;Beta D 2.071.2-b3&lt;/a&gt;
  4370. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/fqwjvcolyphnlyuhkfgt@forum.dlang.org&quot;&gt;Poodinis (DI framework) 7.0.0 released&lt;/a&gt;
  4371. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nqem8f$1hm6$2@digitalmars.com&quot;&gt;DIP1001: DoExpression&lt;/a&gt;
  4372. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hdwwkzqswwtffjehenjt@forum.dlang.org&quot;&gt;[GSoC] Precise GC&lt;/a&gt;
  4373. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tcqurricwhlmuovzigne@forum.dlang.org&quot;&gt;Joakim Intreviews Walter for the D Blog&lt;/a&gt;
  4374. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nq666d$1sgq$1@digitalmars.com&quot;&gt;Beta release vibe.d 0.7.30-beta.1&lt;/a&gt;
  4375. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dcfmhyhlrmduufyibohm@forum.dlang.org&quot;&gt;Eclipse Paho D Library (finally) started&lt;/a&gt;
  4376. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nq1pt6$1mba$1@digitalmars.com&quot;&gt;The D Language Foundation is now a tax exempt non-profit organization&lt;/a&gt;
  4377. &lt;/li&gt;&lt;/ul&gt;
  4378.  
  4379. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4380.  
  4381. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  4382.  
  4383. &lt;p&gt;This week's tip actually comes from Walter Bright himself: you can use identity template specializations with constraints to make a generic fallback.&lt;/p&gt;
  4384.  
  4385. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; core.stdc.stdio;
  4386.  
  4387. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; f(T:T)(T t) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T == &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)) { printf(&lt;font color=&quot;red&quot;&gt;&amp;quot;case int\n&amp;quot;&lt;/font&gt;); }
  4388. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; f(T:T)(T t) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T == &lt;font color=&quot;blue&quot;&gt;uint&lt;/font&gt;)) { printf(&lt;font color=&quot;red&quot;&gt;&amp;quot;case uint\n&amp;quot;&lt;/font&gt;); }
  4389. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; f(T)(T t) { printf(&lt;font color=&quot;red&quot;&gt;&amp;quot;case default\n&amp;quot;&lt;/font&gt;); }
  4390.  
  4391. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main()
  4392. {
  4393.    f(1);
  4394.    f(1u);
  4395.    f(1.0);
  4396. }
  4397. &lt;/pre&gt;
  4398.  
  4399. &lt;p&gt;This works because specializations are preferred over non-specializations, and T:T is the identity specialization.&lt;/p&gt;
  4400.  
  4401. &lt;p&gt;(Adam writing again from here on) The problem of the fallback is normally that the compiler will complain that there are two equal matches for the template parameters. Constraints are a binary condition to take a template out of consideration entirely, but if it passes, if it is considered, it holds equal weight to all other passing options.&lt;/p&gt;
  4402.  
  4403. &lt;p&gt;&lt;a href=&quot;http://dlang.org/spec/template.html#TemplateTypeParameterSpecialization&quot;&gt;Specialization&lt;/a&gt; changes the weight of a template in consideration. When one is present and matching, that template gets a higher match weight than ones without or with a less specific specialization, overcoming the &amp;quot;multiple templates match&amp;quot; error - now they match, but since one is a higher weight, it isn't an equal match and thus not an error.&lt;/p&gt;
  4404.  
  4405. &lt;p&gt;So, to use this technique, you use the &lt;tt&gt;T:T&lt;/tt&gt; specialization on one of the arguments (it doesn't matter which one, all this does is increase the match weight without changing anything else, specializing to itself will only match itself anyway) for each of the better matches with the constraint. Then, the fallback is written without it.&lt;/p&gt;
  4406.  
  4407. &lt;p&gt;Using a fallback and specialization from across modules may need local aliases to merge the overload sets. Consider the following:&lt;/p&gt;
  4408.  
  4409. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; u;
  4410. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; fallback(T)() {
  4411.        &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;fallback&amp;quot;&lt;/font&gt;);
  4412. }
  4413. &lt;/pre&gt;
  4414.  
  4415. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; uu.d;
  4416. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; fallback(T:T)() &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T == &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)) {
  4417.        &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;int&amp;quot;&lt;/font&gt;);
  4418. }
  4419. &lt;/pre&gt;
  4420.  
  4421. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; u;
  4422. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; uu;
  4423.  
  4424. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4425.        fallback!&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;;
  4426. }
  4427. &lt;/pre&gt;
  4428.  
  4429. &lt;p&gt;Compiling those three modules together will result in the fallback message being printed, without error.&lt;/p&gt;
  4430.  
  4431. &lt;p&gt;Change the &lt;tt&gt;main&lt;/tt&gt; function to use &lt;tt&gt;fallback!int&lt;/tt&gt; instead of &lt;tt&gt;char&lt;/tt&gt; and recompile. Now, you'll get an error: &lt;tt&gt;uuu.d(5): Error: uu.fallback!int.fallback at uu.d(1) conflicts with u.fallback!int.fallback at u.d(3)&lt;/tt&gt;&lt;/p&gt;
  4432.  
  4433. &lt;p&gt;The reason for this error is that there's two matches in different modules, triggering D's &lt;a href=&quot;http://dlang.org/hijack.html&quot;&gt;hijacking&lt;/a&gt; rules. Both templates match, the &lt;tt&gt;if int&lt;/tt&gt; one is NOT taken out of consideration, but since they are in different modules, the specialization doesn't automatically apply; despite the higher weight, the fact they are in separate modules still triggers the error, just like with function overloads.&lt;/p&gt;
  4434.  
  4435. &lt;p&gt;Thankfully, the solution is the same as with function overloads too: you can &lt;tt&gt;alias&lt;/tt&gt; the template from both modules together to explicitly resolve the problem:&lt;/p&gt;
  4436.  
  4437. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; u;
  4438. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; uu;
  4439.  
  4440. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; fallback = u.fallback;
  4441. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; fallback = uu.fallback;
  4442.  
  4443. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4444.        fallback!&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;;
  4445. }
  4446. &lt;/pre&gt;
  4447.  
  4448. &lt;p&gt;Now, both work! Alternatively, the module with the specialization can import the fallback and do the aliasing there:&lt;/p&gt;
  4449.  
  4450. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; u; &lt;font color=&quot;green&quot;&gt;// note, you must import the module with the non-specialized fallback
  4451. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// but it does NOT have to be a public import; the alias below is enough
  4452. &lt;/font&gt;
  4453. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; fallback = u.fallback; &lt;font color=&quot;green&quot;&gt;// add the fallback to the overload set
  4454. &lt;/font&gt;
  4455. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; fallback(T:T)() &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T == &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)) {
  4456.        &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;int&amp;quot;&lt;/font&gt;);
  4457. }
  4458. &lt;/pre&gt;
  4459.  
  4460. &lt;p&gt;Alternatively, you can edit the fallback module to import the specialization module, and do the alias there. Either way though, one module must be aware of the other(s) to merge the overload sets.&lt;/p&gt;
  4461.  
  4462. &lt;p&gt;Once that is done, import JUST the one module with the aliases (still importing both would trigger the ambiguity again) and compile - boom, it works!&lt;/p&gt;
  4463.  
  4464. &lt;p&gt;I must confess, when Walter posted this, I was a bit jealous that I never considered this option before myself!&lt;/p&gt;
  4465.  
  4466.  
  4467. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4468. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4469. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4470. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4471. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4472. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4473. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4474. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4475. &lt;/li&gt;&lt;/ul&gt;
  4476.  
  4477.  
  4478. &lt;/div&gt;
  4479. </description></item><item><title>Issue #86</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-aug-28.html</link><guid>http://arsdnet.net/this-week-in-d/2016-aug-28.html</guid><pubDate>Sun, 28 Aug 2016 12:00:00 GMT</pubDate><description>
  4480. &lt;div id=&quot;body-container&quot;&gt;
  4481. &lt;h1&gt;
  4482. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4483. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4484. &lt;span id=&quot;title-date&quot;&gt;August 28, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4485.  
  4486. &lt;div id=&quot;preface&quot;&gt;
  4487.  
  4488. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4489.  
  4490. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4491.  
  4492. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4493.  
  4494. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4495.  
  4496. &lt;/div&gt;
  4497.  
  4498. &lt;h2&gt;Statistics&lt;/h2&gt;
  4499.  
  4500. &lt;ul&gt;&lt;li&gt;
  4501. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-08-22&amp;amp;chfieldto=2016-08-28&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4502. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-08-22&amp;amp;chfieldto=2016-08-28&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4503. 34 pull requests merged into the language:
  4504.  
  4505. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-22..2016-08-28&quot;&gt;19 into DMD&lt;/a&gt;,
  4506. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-22..2016-08-28&quot;&gt;15 into Phobos&lt;/a&gt;, and
  4507. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-22..2016-08-28&quot;&gt;0 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4508. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-22..2016-08-28&quot;&gt;13 pull requests merged into the website.&lt;/a&gt;
  4509. &lt;/li&gt;&lt;/ul&gt;
  4510.  
  4511. &lt;h2&gt;In the community&lt;/h2&gt;
  4512.  
  4513. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4514.  
  4515. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/mgdxxyfdtvhezwowmamj@forum.dlang.org&quot;&gt;[GSoC] Improvements for dstep&lt;/a&gt;
  4516. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ktwiubljhmsotbdestvc@forum.dlang.org&quot;&gt;[GSoC] std.experimental.xml is now a PR!&lt;/a&gt;
  4517. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/hqytrqlogcfnzliweiov@forum.dlang.org&quot;&gt;yet another event loop&lt;/a&gt;
  4518. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/npkrrv$1u92$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup August 25, 2016 - Fireside Chat with Andrei Alexandrescu&lt;/a&gt;
  4519. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/npht20$qgn$1@digitalmars.com&quot;&gt;Minor updates: gen-package-version v1.0.4 and sdlang-d v0.9.6&lt;/a&gt;
  4520. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/ckwjysezxagpnrdkbtpq@forum.dlang.org&quot;&gt;[GSoC] Mir.random.flex - Generic non-uniform random sampling&lt;/a&gt;
  4521. &lt;/li&gt;&lt;/ul&gt;
  4522.  
  4523. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4524.  
  4525. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  4526.  
  4527. &lt;p&gt;Today's tip is courtesy of Richard Andrew Cattermole on the topic of bindable events.&lt;/p&gt;
  4528.  
  4529. &lt;p&gt;So you want to have bindable events for your program, what do you do? Well naturally of course you jump into delegates and maybe a getter and setter for it as well. Or how about going the Java way with a heavy OOP approach? Well all of these are generally hard to work with and generally require manual registration processes with a side of boiler plate for the end user.&lt;/p&gt;
  4530.  
  4531. &lt;a href=&quot;https://cloud.githubusercontent.com/assets/992755/17892800/2c2e34c4-6997-11e6-9de7-4e125b6fcf51.png&quot;&gt;&lt;img src=&quot;https://cloud.githubusercontent.com/assets/992755/17892800/2c2e34c4-6997-11e6-9de7-4e125b6fcf51.png&quot; style=&quot;float: right; margin: 1em; height: 300px;&quot; /&gt;&lt;/a&gt;
  4532.  
  4533. &lt;p&gt;But we don't like boilerplate for our users or extra work now do we? So we look at reflection, well D doesn't do runtime reflection :) but it does do compile time reflection, however this does mean you need some form of container and to 'register' them. So sure you could use the 'get checker' pattern from Developing with compile time in &lt;a href=&quot;https://leanpub.com/ctfe&quot;&gt;mind&lt;/a&gt; but how about actually making it enjoyable for our end users? Well for that there is a little known template feature where by an argument of &lt;tt&gt;&lt;/tt&gt;this T&lt;tt&gt;&lt;/tt&gt; which initializes for 'real' instance type of a class. Which is wonderful when used for the constructor for a root class as it is required to be called from inherited classes.&lt;/p&gt;
  4534.  
  4535. &lt;p&gt;So let's get to work with a nice example of this:&lt;/p&gt;
  4536.  
  4537. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; UDA {
  4538. string text;
  4539. }
  4540.  
  4541. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Root {
  4542. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)() {
  4543. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits : getUDAs, hasUDA;
  4544. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(m; &lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(allMembers, T)) {
  4545. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (hasUDA!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4546. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(uda; getUDAs!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4547. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, m);
  4548. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;\t&amp;quot;&lt;/font&gt; ~ uda.stringof);
  4549. }
  4550. }
  4551. }
  4552. }
  4553. }
  4554.  
  4555. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Child : Root {
  4556. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {
  4557. &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;();
  4558. }
  4559. @UDA(&lt;font color=&quot;red&quot;&gt;&amp;quot;abcd&amp;quot;&lt;/font&gt;)
  4560. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; func() {}
  4561. }
  4562.  
  4563. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4564. Child child = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Child;
  4565. }
  4566. &lt;/pre&gt;
  4567.  
  4568. &lt;p&gt;As you can see, the Child class does not have any form of mixin's string or otherwise. It doesn't declare that it is registering itself either. This is the beauty of this approach. It allows the root class to register the child class instance automatically for you. Making it very nice and easy to use for the end developer.&lt;/p&gt;
  4569.  
  4570. &lt;p&gt;But of course what we would like to do is have multiple inheritance levels. Sadly this hits a bug with the this template argument.&lt;/p&gt;
  4571. &lt;p&gt;So to around this you can utilise three constructors per inheritable class.&lt;/p&gt;
  4572.  
  4573. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; UDA {
  4574. string text;
  4575. }
  4576.  
  4577. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Root {
  4578. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(){}
  4579. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)() { __ctor!T; }
  4580. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(T)() {
  4581. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits : getUDAs, hasUDA;
  4582. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, T);
  4583. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(m; &lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(allMembers, T)) {
  4584. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (hasUDA!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4585. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(uda; getUDAs!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4586. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, m);
  4587. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;\t&amp;quot;&lt;/font&gt; ~ uda.stringof);
  4588. }
  4589. }
  4590. }
  4591. }
  4592. }
  4593.  
  4594. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Child : Root {
  4595. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)() {&lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;. __ctor!T(); }
  4596. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(T)() { &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;.__ctor!T(); }
  4597. @UDA(&lt;font color=&quot;red&quot;&gt;&amp;quot;abcd&amp;quot;&lt;/font&gt;)
  4598. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; func() {}
  4599. }
  4600.  
  4601. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Child2 : Child {
  4602. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {
  4603. &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;();
  4604. }
  4605. @UDA(&lt;font color=&quot;red&quot;&gt;&amp;quot;1234&amp;quot;&lt;/font&gt;)
  4606. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; func2() {}
  4607. }
  4608.  
  4609. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4610. Child2 child = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Child2;
  4611. }
  4612. &lt;/pre&gt;
  4613.  
  4614. &lt;p&gt;You will notice a couple of differences beyond the reach of Child2. Instead of the usual one constructor, you will need three if it can be (after the first one) inherited from.&lt;/p&gt;
  4615.  
  4616. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(){}
  4617. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)() { &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;.__ctor!T; }
  4618. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(T)() { &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;.__ctor!T(); }
  4619. &lt;/pre&gt;
  4620.  
  4621. &lt;p&gt;Add with the appropriate arguments you also need two new templated constructors.
  4622. The third empty constructor is required because super is not being called explicitly so the compiler adds an implicit call in.
  4623. Sadly the three constructors are required as a workaround for &lt;a href=&quot;https://issues.dlang.org/show_bug.cgi?id=13635&quot;&gt;bug 13635&lt;/a&gt; but none the less useful and fairly easy to work with.&lt;/p&gt;
  4624.  
  4625. &lt;p&gt;As an example of supporting arguments here it is:&lt;/p&gt;
  4626.  
  4627. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; UDA {
  4628. string text;
  4629. }
  4630.  
  4631. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Root {
  4632. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {}
  4633. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x) { __ctor!T(x); }
  4634. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(T)(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x) {
  4635. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits : getUDAs, hasUDA;
  4636. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio : writeln;
  4637. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, T);
  4638. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(m; &lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(allMembers, T)) {
  4639. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; (hasUDA!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4640. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(uda; getUDAs!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, T, m), UDA)) {
  4641. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, m);
  4642. &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, &lt;font color=&quot;red&quot;&gt;&amp;quot;\t&amp;quot;&lt;/font&gt; ~ uda.stringof);
  4643. }
  4644. }
  4645. }
  4646. writeln(x);
  4647. }
  4648. }
  4649.  
  4650. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Child : Root {
  4651. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {}
  4652. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; T)(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x) { &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;.__ctor!T(x); }
  4653. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(T)(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x) { &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;.__ctor!T(x); }
  4654. @UDA(&lt;font color=&quot;red&quot;&gt;&amp;quot;abcd&amp;quot;&lt;/font&gt;)
  4655. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; func() {}
  4656. }
  4657.  
  4658. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Child2 : Child {
  4659. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x) {
  4660. &lt;font color=&quot;blue&quot;&gt;super&lt;/font&gt;(x);
  4661. }
  4662. @UDA(&lt;font color=&quot;red&quot;&gt;&amp;quot;1234&amp;quot;&lt;/font&gt;)
  4663. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; func2() {}
  4664. }
  4665.  
  4666. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4667. Child2 child = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Child2(3);
  4668. }
  4669. &lt;/pre&gt;
  4670.  
  4671.  
  4672.  
  4673.  
  4674.  
  4675.  
  4676. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4677. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4678. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4679. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4680. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4681. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4682. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4683. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4684. &lt;/li&gt;&lt;/ul&gt;
  4685.  
  4686.  
  4687. &lt;/div&gt;
  4688. </description></item><item><title>Issue #85</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-aug-21.html</link><guid>http://arsdnet.net/this-week-in-d/2016-aug-21.html</guid><pubDate>Sun, 21 Aug 2016 12:00:00 GMT</pubDate><description>
  4689. &lt;div id=&quot;body-container&quot;&gt;
  4690. &lt;h1&gt;
  4691. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4692. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4693. &lt;span id=&quot;title-date&quot;&gt;August 21, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4694.  
  4695. &lt;div id=&quot;preface&quot;&gt;
  4696.  
  4697. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4698.  
  4699. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4700.  
  4701. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4702.  
  4703. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4704.  
  4705. &lt;/div&gt;
  4706.  
  4707. &lt;h2&gt;Statistics&lt;/h2&gt;
  4708.  
  4709. &lt;ul&gt;&lt;li&gt;
  4710. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-08-15&amp;amp;chfieldto=2016-08-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4711. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-08-15&amp;amp;chfieldto=2016-08-21&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4712. 23 pull requests merged into the language:
  4713.  
  4714. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-15..2016-08-21&quot;&gt;5 into DMD&lt;/a&gt;,
  4715. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-15..2016-08-21&quot;&gt;14 into Phobos&lt;/a&gt;, and
  4716. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-15..2016-08-21&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4717. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-15..2016-08-21&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  4718. &lt;/li&gt;&lt;/ul&gt;
  4719.  
  4720. &lt;h2&gt;In the community&lt;/h2&gt;
  4721.  
  4722. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4723.  
  4724. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/taqkzwiezkfylxjinozg@forum.dlang.org&quot;&gt;On the future of DIP1000&lt;/a&gt;
  4725. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dpakidboblzgbdtejilz@forum.dlang.org&quot;&gt;D support for the Meson build system&lt;/a&gt;
  4726. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/aquennrrbgseldhyixzs@forum.dlang.org&quot;&gt;ggplotd version 1.0.0 released&lt;/a&gt;
  4727. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zjbwzqcodixqsblnaohh@forum.dlang.org&quot;&gt;Aedi - a dependency injection library&lt;/a&gt;
  4728. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wnswbeittrffaojxnvdm@forum.dlang.org&quot;&gt;Berlin D Meetup August 2016&lt;/a&gt;
  4729. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/vzymfyctdqcocqgdptxp@forum.dlang.org&quot;&gt;From the D Blog: Inside D Version Manager&lt;/a&gt;
  4730. &lt;/li&gt;&lt;/ul&gt;
  4731.  
  4732. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4733.  
  4734. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  4735.  
  4736. &lt;p&gt;This week, I wrote on Stack Overflow about &lt;tt&gt;auto ref&lt;/tt&gt; returning functions, what they do and why you'd use them. Here, I'll reproduce that answer for this audience.&lt;/p&gt;
  4737.  
  4738. &lt;p&gt;&lt;tt&gt;auto&lt;/tt&gt; return functions' primary use case is in a template where the function body changes based on some compile time parameter. &lt;tt&gt;auto ref&lt;/tt&gt; just extends that to allowing a &lt;tt&gt;ref&lt;/tt&gt; return too. Behold:&lt;/p&gt;
  4739.  
  4740. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; foo(string magic)() {
  4741.       &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(magic == &lt;font color=&quot;red&quot;&gt;&amp;quot;use ref&amp;quot;&lt;/font&gt;) {
  4742.         &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;* x = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;;
  4743.         &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; *x;
  4744.       } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  4745.         &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0;
  4746.       }
  4747.    }
  4748.  
  4749.    &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  4750.            foo!&lt;font color=&quot;red&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt;();
  4751.            foo!&lt;font color=&quot;red&quot;&gt;&amp;quot;use ref&amp;quot;&lt;/font&gt;();
  4752.    }
  4753. &lt;/pre&gt;
  4754.  
  4755. &lt;p&gt;Each unique set of compile time arguments will generate a different function. Those different functions have entirely different code.&lt;/p&gt;
  4756.  
  4757. &lt;p&gt;This is the function with an empty string:&lt;/p&gt;
  4758.  
  4759. &lt;pre class=&quot;d_code&quot;&gt;    Disassembly of section .text._D3iii15__T3fooVAyaa0_Z3fooFNaNbNiNfZi:
  4760.  
  4761.    00000000 &amp;lt;_D3iii15__T3fooVAyaa0_Z3fooFNaNbNiNfZi&amp;gt;:
  4762.       0:   31 c0                   xor    eax,eax
  4763.       2:   c3                      ret
  4764.       3:   90                      nop
  4765.       4:   90                      nop
  4766.       5:   90                      nop
  4767.       6:   90                      nop
  4768.       7:   90                      nop
  4769. &lt;/pre&gt;
  4770.  
  4771. &lt;p&gt;As you can see, it is most trivial - &lt;tt&gt;return 0&lt;/tt&gt;. No fancy ref return there. This is the one with &lt;tt&gt;use ref&lt;/tt&gt;:&lt;/p&gt;
  4772.  
  4773. &lt;pre class=&quot;d_code&quot;&gt;    Disassembly of section .text._D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNcNfZi:
  4774.  
  4775.    00000000 &amp;lt;_D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNcNfZi&amp;gt;:
  4776.       0:   55                      push   ebp
  4777.       1:   8b ec                   mov    ebp,esp
  4778.       3:   b8 00 00 00 00          mov    eax,0x0
  4779.       8:   50                      push   eax
  4780.       9:   e8 fc ff ff ff          call   a &amp;lt;_D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNcNfZi+0xa&amp;gt;
  4781.       e:   83 c4 04                add    esp,0x4
  4782.      11:   5d                      pop    ebp
  4783.      12:   c3                      ret
  4784.      13:   90                      nop
  4785.      14:   90                      nop
  4786.      15:   90                      nop
  4787.      16:   90                      nop
  4788.      17:   90                      nop
  4789. &lt;/pre&gt;
  4790.  
  4791. &lt;p&gt;(the mangled name has the string in it as a hexadecimal string of the ascii (well, it is actually UTF-8, unicode works too!) bytes btw, that 75736520726566 portion - recognize 0x75 as 'u' and 0x66 as 'f'. D mangled names can get ridiculously long, but the pattern is pretty simple to read once you get to know it.)&lt;/p&gt;
  4792.  
  4793.  
  4794. &lt;p&gt;That code calls &lt;tt&gt;new&lt;/tt&gt;, so the body is more complex, but notice that eax is still holding the return value there... the pointer. Now, let's take &lt;tt&gt;ref&lt;/tt&gt; out of &lt;tt&gt;auto ref&lt;/tt&gt; and recompile the same thing.&lt;/p&gt;
  4795.  
  4796. &lt;p&gt;The first function, of course, remains the same. The second one changed though:&lt;/p&gt;
  4797.  
  4798. &lt;pre class=&quot;d_code&quot;&gt;    Disassembly of section .text._D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNfZi:
  4799.  
  4800.    00000000 &amp;lt;_D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNfZi&amp;gt;:
  4801.       0:   55                      push   ebp
  4802.       1:   8b ec                   mov    ebp,esp
  4803.       3:   b8 00 00 00 00          mov    eax,0x0
  4804.       8:   50                      push   eax
  4805.       9:   e8 fc ff ff ff          call   a&amp;lt;_D3iii29__T3fooVAyaa7_75736520726566Z3fooFNaNbNfZi+0xa&amp;gt;
  4806.       e:   8b 00                   mov    eax,DWORD PTR [eax]
  4807.      10:   83 c4 04                add    esp,0x4
  4808.      13:   5d                      pop    ebp
  4809.      14:   c3                      ret
  4810.      15:   90                      nop
  4811.      16:   90                      nop
  4812.      17:   90                      nop
  4813. &lt;/pre&gt;
  4814.  
  4815. &lt;p&gt;See that &lt;tt&gt;mov    eax,DWORD PTR [eax]&lt;/tt&gt;? It is no longer returning the pointer (which, of course, is what &lt;tt&gt;ref&lt;/tt&gt; return does under the hood), but now what is pointed by it - a normal, non-ref, value return.&lt;/p&gt;
  4816.  
  4817. &lt;p&gt;So that's the difference between &lt;tt&gt;auto&lt;/tt&gt; return and &lt;tt&gt;auto ref&lt;/tt&gt;.&lt;/p&gt;
  4818.  
  4819. &lt;p&gt;Just for completeness, let's change it to &lt;tt&gt;ref int&lt;/tt&gt; and see what happens:&lt;/p&gt;
  4820.  
  4821. &lt;pre class=&quot;d_code&quot;&gt;    $ dmd iii
  4822.    iii.d(6): Error: constant 0 &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; not an lvalue
  4823.    iii.d(11): Error: &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; instance iii.foo!&lt;font color=&quot;red&quot;&gt;&amp;quot;&amp;quot;&lt;/font&gt; error instantiating
  4824. &lt;/pre&gt;
  4825.  
  4826. &lt;p&gt;Now it is an error to just &lt;tt&gt;return 0&lt;/tt&gt; because that isn't a valid &lt;tt&gt;ref&lt;/tt&gt;.&lt;/p&gt;
  4827.  
  4828.  
  4829. &lt;p&gt;The practical use case is that templates may make more complex decisions as to what to do in their body, and thus their return type, based on all kinds of arguments. It might just return whatever type was passed into its arguments, it might check platform version (tho that'd be some ugly code lol), whatever. &lt;tt&gt;auto ref&lt;/tt&gt; allows you to cover various cases like that without needing to write separate function signatures (and thus, function bodies) yourself.&lt;/p&gt;
  4830.  
  4831. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4832. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4833. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4834. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4835. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4836. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4837. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4838. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4839. &lt;/li&gt;&lt;/ul&gt;
  4840.  
  4841.  
  4842. &lt;/div&gt;
  4843. </description></item><item><title>Issue #84</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-aug-14.html</link><guid>http://arsdnet.net/this-week-in-d/2016-aug-14.html</guid><pubDate>Sun, 14 Aug 2016 12:00:00 GMT</pubDate><description>
  4844. &lt;div id=&quot;body-container&quot;&gt;
  4845. &lt;h1&gt;
  4846. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4847. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4848. &lt;span id=&quot;title-date&quot;&gt;August 14, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4849.  
  4850. &lt;div id=&quot;preface&quot;&gt;
  4851.  
  4852. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4853.  
  4854. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4855.  
  4856. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4857.  
  4858. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4859.  
  4860. &lt;/div&gt;
  4861.  
  4862. &lt;h2&gt;Statistics&lt;/h2&gt;
  4863.  
  4864. &lt;ul&gt;&lt;li&gt;
  4865. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-08-08&amp;amp;chfieldto=2016-08-14&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;7 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4866. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-08-08&amp;amp;chfieldto=2016-08-14&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4867. 46 pull requests merged into the language:
  4868.  
  4869. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-08..2016-08-14&quot;&gt;29 into DMD&lt;/a&gt;,
  4870. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-08..2016-08-14&quot;&gt;10 into Phobos&lt;/a&gt;, and
  4871. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-08..2016-08-14&quot;&gt;7 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4872. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-08..2016-08-14&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  4873. &lt;/li&gt;&lt;/ul&gt;
  4874.  
  4875. &lt;h2&gt;In the community&lt;/h2&gt;
  4876.  
  4877. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4878.  
  4879. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/pqsiqmkxenrwxoruzaml@forum.dlang.org&quot;&gt;DIP1000: Scoped Pointers&lt;/a&gt;
  4880. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/jchqiwfmwypcvqbsnhzw@forum.dlang.org&quot;&gt;Project Highlight: Visual D&lt;/a&gt;
  4881. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/noctbn$1098$1@digitalmars.com&quot;&gt;Beta D 2.071.2-b2&lt;/a&gt;
  4882. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qdtbcejwyhutwbdidcyc@forum.dlang.org&quot;&gt;D on exercism.io&lt;/a&gt;
  4883. &lt;/li&gt;&lt;/ul&gt;
  4884.  
  4885. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4886.  
  4887. &lt;h3&gt;Notable Threads&lt;/h3&gt;
  4888.  
  4889. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/rwxcfapvpfiqmfsuixlf@forum.dlang.org&quot;&gt;DIP 1000 discussion thread&lt;/a&gt; has a discussion on the merits of the new Scoped Pointers proposal. The discussion is still ongoing.&lt;/p&gt;
  4890.  
  4891. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/fovgxbqlwnpantfwqhlf@forum.dlang.org&quot;&gt;Why D is not popular enough&lt;/a&gt; also has some interesting criticisms of the language, including some from an everyday user of the language at his day job.&lt;/p&gt;
  4892.  
  4893. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  4894. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  4895. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4896. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4897. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  4898. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  4899. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4900. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  4901. &lt;/li&gt;&lt;/ul&gt;
  4902.  
  4903.  
  4904. &lt;/div&gt;
  4905. </description></item><item><title>Issue #83</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-aug-07.html</link><guid>http://arsdnet.net/this-week-in-d/2016-aug-07.html</guid><pubDate>Sun, 07 Aug 2016 12:00:00 GMT</pubDate><description>
  4906. &lt;div id=&quot;body-container&quot;&gt;
  4907. &lt;h1&gt;
  4908. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  4909. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  4910. &lt;span id=&quot;title-date&quot;&gt;August 7, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  4911.  
  4912. &lt;div id=&quot;preface&quot;&gt;
  4913.  
  4914. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  4915.  
  4916. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  4917.  
  4918. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  4919.  
  4920. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  4921.  
  4922. &lt;/div&gt;
  4923.  
  4924. &lt;h2&gt;Statistics&lt;/h2&gt;
  4925.  
  4926. &lt;ul&gt;&lt;li&gt;
  4927. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-08-01&amp;amp;chfieldto=2016-08-07&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4928. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-08-01&amp;amp;chfieldto=2016-08-07&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  4929. 64 pull requests merged into the language:
  4930.  
  4931. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-01..2016-08-07&quot;&gt;44 into DMD&lt;/a&gt;,
  4932. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-01..2016-08-07&quot;&gt;16 into Phobos&lt;/a&gt;, and
  4933. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-01..2016-08-07&quot;&gt;4into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  4934. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-08-01..2016-08-07&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  4935. &lt;/li&gt;&lt;/ul&gt;
  4936.  
  4937. &lt;h2&gt;In the community&lt;/h2&gt;
  4938.  
  4939. &lt;h3&gt;Community announcements&lt;/h3&gt;
  4940.  
  4941. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/ocqdxbdnrzbhefzdabej@forum.dlang.org&quot;&gt;Dreams come true: Compiling and running linux apps on windows &lt;/a&gt;
  4942. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/npllpfgmhqmzszeavtaw@forum.dlang.org&quot;&gt;The Origins of the D Cookbook&lt;/a&gt;
  4943. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/deoksmyebkhkmsqonlgh@forum.dlang.org&quot;&gt;unit-threaded v0.6.26 - advanced unit testing in D with new features&lt;/a&gt;
  4944. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/suiabtwvlbjfkeewqbvx@forum.dlang.org&quot;&gt;LDC 1.1.0-beta2 has been released!&lt;/a&gt;
  4945. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/rxlnopwmyjwolqiddhhu@forum.dlang.org&quot;&gt;Running a D game in the browser&lt;/a&gt;
  4946. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/zxkkjezakirlfepndjxk@forum.dlang.org&quot;&gt;ndBenchmarks #1: ndslice.algorithm vs std.numeric vs std.algorithm&lt;/a&gt;
  4947. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nnnaqm$2br1$1@digitalmars.com&quot;&gt;Beta D 2.071.2-b1&lt;/a&gt;
  4948. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/geodzwslvtnndnkcecdr@forum.dlang.org&quot;&gt;Munich D Meetup&lt;/a&gt;
  4949. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nnnlak$2qic$1@digitalmars.com&quot;&gt;August Boston D users meetup&lt;/a&gt;
  4950. &lt;/li&gt;&lt;/ul&gt;
  4951.  
  4952. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  4953.  
  4954. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  4955.  
  4956. &lt;p&gt;There is a hidden magical variable in druntime called &lt;tt&gt;rt_trapExceptions&lt;/tt&gt; that you can set to &lt;tt&gt;false&lt;/tt&gt; to cause uncaught exceptions to abort the program. But, since this is checked before any of your code is run (including static constructors!), you need to declare your own C main to set it:&lt;/p&gt;
  4957.  
  4958. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;__gshared&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; rt_trapExceptions;
  4959. &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; _d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;*);
  4960.  
  4961. &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; argc, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;** argv) {
  4962.        rt_trapExceptions = &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;;
  4963.        &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; _d_run_main(argc, argv, &amp;amp;_main);
  4964. }
  4965.  
  4966. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; _main() {
  4967.        &lt;font color=&quot;blue&quot;&gt;try&lt;/font&gt; {
  4968.                &lt;font color=&quot;blue&quot;&gt;throw&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Exception(&lt;font color=&quot;red&quot;&gt;&amp;quot;no break, no abort!&amp;quot;&lt;/font&gt;);
  4969.        } &lt;font color=&quot;blue&quot;&gt;catch&lt;/font&gt;(Exception e) {}
  4970.  
  4971.        &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  4972.        writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;here!&amp;quot;&lt;/font&gt;);
  4973.  
  4974.        &lt;font color=&quot;blue&quot;&gt;throw&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Exception(&lt;font color=&quot;red&quot;&gt;&amp;quot;this will abort&amp;quot;&lt;/font&gt;);
  4975.        &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; 0;
  4976. }
  4977. &lt;/pre&gt;
  4978.  
  4979. &lt;p&gt;The first two lines simply give us access to the druntime symbols. The first &lt;tt&gt;extern&lt;/tt&gt; means they are declared in some external module. The next &lt;tt&gt;extern(C)&lt;/tt&gt; is the linkage and name mangling. Leaving either off will result in linker errors.&lt;/p&gt;
  4980.  
  4981. &lt;p&gt;&lt;tt&gt;rt_trapExceptions&lt;/tt&gt; is the magic variable we want to set. It is &lt;tt&gt;true&lt;/tt&gt; by default - the D runtime will normally catch exceptions and print their message before terminating. &lt;tt&gt;_d_run_main&lt;/tt&gt; is a helper function inside the runtime that translates C arguments into D arguments, initializes the runtime, and calls your function - it does all the magic to get from the C world that the runtime starts in (well, starts in at the point of the C main!) to the D world that your typical D main expects.&lt;/p&gt;
  4982.  
  4983. &lt;div class=&quot;tip&quot;&gt;On Windows, you can also simply run your program in a debugger. The runtime will recognize this and automatically skip the exception trap, so the debugger will break automatically on an uncaught exception.&lt;/div&gt;
  4984.  
  4985. &lt;p&gt;By calling it, we reuse the core runtime's initialization and teardown functions.... but by doing our own &lt;tt&gt;extern(C) main&lt;/tt&gt;, we get a chance to inject our own code before and after!&lt;/p&gt;
  4986.  
  4987. &lt;p&gt;The next lines do exactly that: they declare a C-style &lt;tt&gt;extern(C) main&lt;/tt&gt;, set the magic &lt;tt&gt;rt_trapExceptions&lt;/tt&gt; to false so it won't swallow our exceptions, then call our own D-style main. It isn't exactly a D main: it needs to be called something else (otherwise, the linker will complain that there are two mains, because the D compiler will insert a C main automatically when it sees a D main, and we want our own...), and it needs to return a value, like C main is supposed to do (in standard D, it is legal to return &lt;tt&gt;void&lt;/tt&gt; from &lt;tt&gt;main&lt;/tt&gt;, and the compiler will automatically rewrite it to &lt;tt&gt;return 0&lt;/tt&gt;, but here, we're bypassing that automatic sugar.).&lt;/p&gt;
  4988.  
  4989. &lt;p&gt;Otherwise, though, our &lt;tt&gt;_main&lt;/tt&gt; works just like a D main: it may receive &lt;tt&gt;string[] args&lt;/tt&gt;, call D functions, etc.&lt;/p&gt;
  4990.  
  4991. &lt;p&gt;But, thanks to our injected &lt;tt&gt;rt_trapExceptions&lt;/tt&gt; code, now exceptions work a bit differently. Running that program on Linux will show:&lt;/p&gt;
  4992.  
  4993. &lt;pre class=&quot;d_code&quot;&gt;$ ./except
  4994. here!
  4995. uncaught exception
  4996. dwarfeh(224) fatal error
  4997. Aborted
  4998. &lt;/pre&gt;
  4999.  
  5000. &lt;p&gt;You might be thinking &amp;quot;that sucks, I like the printed message!&amp;quot;. Well, then use it! But, consider this in the debugger:&lt;/p&gt;
  5001.  
  5002. &lt;pre class=&quot;d_code&quot;&gt;$ gdb except
  5003. gdb: /lib64/liblzma.so.5: no &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt; information available (required by gdb)
  5004. GNU gdb (GDB) 7.10
  5005. Copyright (C) 2015 Free Software Foundation, Inc.
  5006. License GPLv3+: GNU GPL &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt; 3 or later &amp;lt;http:&lt;font color=&quot;green&quot;&gt;//gnu.org/licenses/gpl.html&amp;gt;
  5007. &lt;/font&gt;This &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; free software: you are free to change and redistribute it.
  5008. There &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; NO WARRANTY, to the extent permitted by law.  Type &lt;font color=&quot;red&quot;&gt;&amp;quot;show copying&amp;quot;&lt;/font&gt;
  5009. and &lt;font color=&quot;red&quot;&gt;&amp;quot;show warranty&amp;quot;&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; details.
  5010. This GDB was configured as &lt;font color=&quot;red&quot;&gt;&amp;quot;x86_64-slackware-linux&amp;quot;&lt;/font&gt;.
  5011. Type &lt;font color=&quot;red&quot;&gt;&amp;quot;show configuration&amp;quot;&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; configuration details.
  5012. For bug reporting instructions, please see:
  5013. &amp;lt;http:&lt;font color=&quot;green&quot;&gt;//www.gnu.org/software/gdb/bugs/&amp;gt;.
  5014. &lt;/font&gt;Find the GDB manual and other documentation resources online at:
  5015. &amp;lt;http:&lt;font color=&quot;green&quot;&gt;//www.gnu.org/software/gdb/documentation/&amp;gt;.
  5016. &lt;/font&gt;For help, type &lt;font color=&quot;red&quot;&gt;&amp;quot;help&amp;quot;&lt;/font&gt;.
  5017. Type &lt;font color=&quot;red&quot;&gt;&amp;quot;apropos word&amp;quot;&lt;/font&gt; to search &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; commands related to &lt;font color=&quot;red&quot;&gt;&amp;quot;word&amp;quot;&lt;/font&gt;...
  5018. Reading symbols from except...done.
  5019. (gdb) r
  5020. Starting program: /home/me/test/except
  5021. [Thread debugging using libthread_db enabled]
  5022. Using host libthread_db library &lt;font color=&quot;red&quot;&gt;&amp;quot;/lib64/libthread_db.so.1&amp;quot;&lt;/font&gt;.
  5023. here![&lt;font color=&quot;red&quot;&gt;&amp;quot;/home/me/test/except&amp;quot;&lt;/font&gt;]
  5024. uncaught exception
  5025. dwarfeh(224) fatal error
  5026.  
  5027. Program received signal SIGABRT, Aborted.
  5028. 0xf7d973c4 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; raise () from /lib/libc.so.6
  5029. =&amp;gt; 0xf7d973c4 &amp;lt;raise+68&amp;gt;:       87 fb   xchg   ebx,edi
  5030. (gdb) where
  5031. #0  0xf7d973c4 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; raise () from /lib/libc.so.6
  5032. #1  0xf7d99090 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; abort () from /lib/libc.so.6
  5033. #2  0x0808b228 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; _d_throwdwarf ()
  5034. #3  0x0807e4f1 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; except._main(&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;)[][]) (args=...) at except.d:17
  5035. #4  0x0808b05b &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][]) &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;*).runAll().__lambda1() ()
  5036. #5  0x0808afe5 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][]) &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;*).tryExec(&lt;font color=&quot;blue&quot;&gt;scope&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;() &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;) ()
  5037. #6  0x0808b017 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][]) &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;*).runAll() ()
  5038. #7  0x0808afe5 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt;(C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][]) &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;*).tryExec(&lt;font color=&quot;blue&quot;&gt;scope&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;() &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;) ()
  5039. #8  0x0808af3f &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; _d_run_main ()
  5040. #9  0x0807e44b &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; main (argc=1, argv=0xffffd564) at except.d:6
  5041. (gdb) up 3
  5042. #3  0x0807e4f1 &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; except._main(&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;)[][]) (args=...) at except.d:17
  5043. 17              &lt;font color=&quot;blue&quot;&gt;throw&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Exception(&lt;font color=&quot;red&quot;&gt;&amp;quot;this will abort&amp;quot;&lt;/font&gt;);
  5044. &lt;/pre&gt;
  5045.  
  5046. &lt;p&gt;I'll spare you the rest of the session, but suffice it to say the debugger is able to show you the message, stack trace, and much more - you have the full interactivity and introspection it offers, right at the point of the thrown exception.&lt;/p&gt;
  5047.  
  5048. &lt;p&gt;Contrast that to the session with the default rt_trapExceptions setting:&lt;/p&gt;
  5049.  
  5050. &lt;pre class=&quot;d_code&quot;&gt;GNU gdb (GDB) 7.10
  5051. &amp;lt;snip&amp;gt;
  5052. (gdb) r
  5053. Starting program: /home/me/test/except
  5054. [Thread debugging using libthread_db enabled]
  5055. Using host libthread_db library &lt;font color=&quot;red&quot;&gt;&amp;quot;/lib64/libthread_db.so.1&amp;quot;&lt;/font&gt;.
  5056. here!
  5057. object.Exception@except.d(17): &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt; will abort
  5058. -- --------------
  5059. except.d:17 &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; except._main(&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;)[][]) [0x807e4f0]
  5060. ??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv [0x808b05a]
  5061. ??:? &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; (C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][])*).tryExec(&lt;font color=&quot;blue&quot;&gt;scope&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;()) [0x808afac]
  5062. ??:? &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; (C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][])*).runAll() [0x808b016]
  5063. ??:? &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; rt.dmain2._d_run_main(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;**, &lt;font color=&quot;blue&quot;&gt;extern&lt;/font&gt; (C) &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[][])*).tryExec(&lt;font color=&quot;blue&quot;&gt;scope&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;()) [0x808afac]
  5064. ??:? _d_run_main [0x808af3e]
  5065. except.d:6 main [0x807e44a]
  5066. ??:? __libc_start_main [0xf7d8029f]
  5067. [Inferior 1 (process 10928) exited &lt;font color=&quot;blue&quot;&gt;with&lt;/font&gt; code 01]
  5068. (gdb) up
  5069. No stack.
  5070. &lt;/pre&gt;
  5071.  
  5072. &lt;p&gt;More info printed to stderr... but much less information available to the interactive debugging session.&lt;/p&gt;
  5073.  
  5074. &lt;p&gt;Moreover, unlike setting a breakpoint at &lt;tt&gt;d_throw&lt;/tt&gt; (the exact name of this function is platform-specific, by the way), thrown and caught exceptions in the program's normal flow proceed normally without interrupting you - only uncaught exceptions trigger the debugger.&lt;/p&gt;
  5075.  
  5076. &lt;p&gt;You can also configure your system to save a core dump on this event for analysis later - potentially far more useful than writing the exception's error message to a log!&lt;/p&gt;
  5077.  
  5078. &lt;p&gt;Hopefully, druntime will expose this variable in a more easier way in the future. Currently, on Windows, it is automatically set if a debugger is detected, but on Linux, debugger detection is quite a bit harder and hackier, so it might not happen any time soon. Druntime could (and should!) also potentially offer it as a command line switch, like it does with GC profiling now.&lt;/p&gt;
  5079.  
  5080. &lt;p&gt;DRUNTIME DEVS: if you read this, make it happen!&lt;/p&gt;
  5081.  
  5082. &lt;p&gt;But, until then, the &lt;tt&gt;extern(C) main&lt;/tt&gt; trick can inject the code, and besides, knowing the technique is useful for other things too :)&lt;/p&gt;
  5083.  
  5084. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5085. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5086. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5087. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5088. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5089. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5090. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5091. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5092. &lt;/li&gt;&lt;/ul&gt;
  5093.  
  5094.  
  5095. &lt;/div&gt;
  5096. </description></item><item><title>Issue #82</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jul-31.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jul-31.html</guid><pubDate>Sun, 31 Jul 2016 12:00:00 GMT</pubDate><description>
  5097. &lt;div id=&quot;body-container&quot;&gt;
  5098. &lt;h1&gt;
  5099. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5100. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5101. &lt;span id=&quot;title-date&quot;&gt;July 31, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5102.  
  5103. &lt;div id=&quot;preface&quot;&gt;
  5104.  
  5105. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5106.  
  5107. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5108.  
  5109. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5110.  
  5111. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5112.  
  5113. &lt;/div&gt;
  5114.  
  5115. &lt;h2&gt;Statistics&lt;/h2&gt;
  5116.  
  5117. &lt;ul&gt;&lt;li&gt;
  5118. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-07-25&amp;amp;chfieldto=2016-07-31&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5119. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-07-25&amp;amp;chfieldto=2016-07-31&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5120. 54 pull requests merged into the language:
  5121.  
  5122. &lt;a href=&quot;https://github.com/dlang/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-25..2016-07-31&quot;&gt;16 into DMD&lt;/a&gt;,
  5123. &lt;a href=&quot;https://github.com/dlang/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-25..2016-07-31&quot;&gt;34 into Phobos&lt;/a&gt;, and
  5124. &lt;a href=&quot;https://github.com/dlang/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-25..2016-07-31&quot;&gt;4into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5125. &lt;a href=&quot;https://github.com/dlang/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-25..2016-07-31&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  5126. &lt;/li&gt;&lt;/ul&gt;
  5127.  
  5128. &lt;h2&gt;Major Work&lt;/h2&gt;
  5129.  
  5130. &lt;p&gt;Stefan Koch has been hard at work at a new CTFE implementation in the compiler over the last couple months, inspired by DConf. I asked him to write a little on how his work is progressing. From his discussions on the implementation on the newsgroup and IRC, he has already succeeded in an enormous speedup and has brought memory usage down to what the CTFE function *should* use, with only a small, constant overhead instead of enormous multi-times leak like the current implementation.&lt;/p&gt;
  5131.  
  5132. &lt;p&gt;The following is in his own words:&lt;/p&gt;
  5133.  
  5134.  
  5135. &lt;p&gt;I started the implementation about a month ago.  Before I started I was still agonizing about the design.&lt;/p&gt;
  5136.  
  5137. &lt;p&gt;My criteria where the following:&lt;/p&gt;
  5138. &lt;ul&gt;   &lt;li&gt;Must be at a relatively low level. (For performance reasons)&lt;/li&gt;
  5139.   &lt;li&gt;Relatively easy to implement for the first draft&lt;/li&gt;
  5140.   &lt;li&gt;Relatively future-proof since I do not want to reimplement CTFE next year again. From that followed:
  5141. &lt;ul&gt; &lt;li&gt;The design should focus on a API for another code-generator&lt;/li&gt;
  5142. &lt;li&gt;The binary format of bytecode should be arbitrary so it can be changed if it should be a bottle neck&lt;/li&gt;
  5143. &lt;li&gt;The bytecode should be standalone so codegen bugs can be isolated.&lt;/li&gt;
  5144. &lt;/ul&gt;
  5145. &lt;/li&gt;
  5146. &lt;/ul&gt;
  5147.  
  5148.  
  5149. &lt;p&gt;Specifically the last two points are a huge successes already.
  5150. As I could implement a pseudo jit with very little fussing.
  5151. Which again allowed me to make a very good guess about performance
  5152. implications of my design.&lt;/p&gt;
  5153.  
  5154. &lt;p&gt;So far it looks like there will be a 4.5x penalty when compared to the
  5155. same code executed natively.
  5156. (At least when compiled with dmd... ldc will replace the jitted code
  5157. with a constant)&lt;/p&gt;
  5158.  
  5159.  
  5160. &lt;p&gt;I am currently working on supporting function calls in a lazy
  5161. multithreadable manner.
  5162. BTW. The whole ctfe engine is built to be multithreadable from the start.&lt;/p&gt;
  5163.  
  5164. &lt;p&gt;Below is a verbatim dumb of the last bytecode-generator api.&lt;/p&gt;
  5165.  
  5166.  
  5167. &lt;pre class=&quot;d_code&quot;&gt;BCTemporary genTemporary(BCType bct);
  5168. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; incSp(BCValue val);
  5169. StackAddr currSp();
  5170. BCLabel genLabel();
  5171. BCAddr beginJmp();
  5172. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; endJmp(BCAddr atIp, BCLabel target);
  5173. BCAddr genJump(BCLabel target);
  5174. CndJmpBegin beginCndJmp(BCValue cond = BCValue.init, &lt;font color=&quot;blue&quot;&gt;bool&lt;/font&gt; ifTrue = &lt;font color=&quot;blue&quot;&gt;false&lt;/font&gt;);
  5175. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; endCndJmp(CndJmpBegin jmp, BCLabel target);
  5176. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; emitFlg(BCValue lhs);
  5177. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Set(BCValue lhs, BCValue rhs);
  5178. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Lt3(BCValue result, BCValue lhs, BCValue rhs);
  5179. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Gt3(BCValue result, BCValue lhs, BCValue rhs);
  5180. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Eq3(BCValue result, BCValue lhs, BCValue rhs);
  5181. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Add3(BCValue result, BCValue lhs, BCValue rhs);
  5182. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Sub3(BCValue result, BCValue lhs, BCValue rhs);
  5183. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Mul3(BCValue result, BCValue lhs, BCValue rhs);
  5184. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Div3(BCValue result, BCValue lhs, BCValue rhs);
  5185. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; And3(BCValue result, BCValue lhs, BCValue rhs);
  5186. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Or3(BCValue result, BCValue lhs, BCValue rhs);
  5187. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Xor3(BCValue result, BCValue lhs, BCValue rhs);
  5188. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Lsh3(BCValue result, BCValue lhs, BCValue rhs);
  5189. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Rsh3(BCValue result, BCValue lhs, BCValue rhs);
  5190. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Mod3(BCValue result, BCValue lhs, BCValue rhs);
  5191. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Call(BCValue result, BCValue fn, BCValue[] args);
  5192. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Load32(StackAddr toAddr, BCValue from);
  5193. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Not(BCValue val);
  5194. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; Ret(BCValue val);
  5195. &lt;/pre&gt;
  5196.  
  5197. &lt;p&gt;As I said before it is designed to be very malleable.
  5198. the bytecode-generator is passed to the AST-Visitor as a template arguments.
  5199. therefore allowing inline of the bytecode-generation calls.
  5200. Which effectively makes it a zero-cost abstraction.&lt;/p&gt;
  5201.  
  5202. &lt;p&gt;Currently I still place value in the ability to run the bytecode
  5203. interpreter itself at compile time.
  5204. This allows for nice compile-time-compilers :)&lt;/p&gt;
  5205.  
  5206. &lt;p&gt;The way it looks right now this will probably become something like
  5207. LLVM in D Style :)&lt;/p&gt;
  5208.  
  5209. &lt;p&gt;P.S. please excuse the hackish nature of this article.&lt;/p&gt;
  5210.  
  5211.  
  5212.  
  5213.  
  5214. &lt;h2&gt;In the community&lt;/h2&gt;
  5215.  
  5216. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5217.  
  5218. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/bebminfuvwfifemtwrqw@forum.dlang.org&quot;&gt;std.experimental.xml available on DUB&lt;/a&gt;
  5219. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pcztclhvxohycyhajcik@forum.dlang.org&quot;&gt;std.experimental.ndslice.algorithm is ready for review&lt;/a&gt;
  5220. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nn4m62$14r5$1@digitalmars.com&quot;&gt;New Diet template engine almost complete, ready for comments&lt;/a&gt;
  5221. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kevyitznywrglzdtvtkz@forum.dlang.org&quot;&gt;From the D Blog: Martin Nowak on the DMD release process&lt;/a&gt;
  5222. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bnybdvidbgtquyjapcqt@forum.dlang.org&quot;&gt;IEEE Spectrum: The Top Programming Languages 2016&lt;/a&gt;
  5223. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/tgqxxnmubhyixzdskmjm@forum.dlang.org&quot;&gt;From the Blog: Ethan Watson Talks About his GDC Europe Talk&lt;/a&gt;
  5224. &lt;/li&gt;&lt;/ul&gt;
  5225.  
  5226. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5227.  
  5228. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5229. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5230. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5231. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5232. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5233. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5234. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5235. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5236. &lt;/li&gt;&lt;/ul&gt;
  5237.  
  5238.  
  5239. &lt;/div&gt;
  5240. </description></item><item><title>Issue #81</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jul-17.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jul-17.html</guid><pubDate>Sun, 17 Jul 2016 12:00:00 GMT</pubDate><description>
  5241. &lt;div id=&quot;body-container&quot;&gt;
  5242. &lt;h1&gt;
  5243. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5244. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5245. &lt;span id=&quot;title-date&quot;&gt;July 17, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5246.  
  5247. &lt;div id=&quot;preface&quot;&gt;
  5248.  
  5249. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5250.  
  5251. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5252.  
  5253. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5254.  
  5255. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5256.  
  5257. &lt;/div&gt;
  5258.  
  5259. &lt;h2&gt;Statistics&lt;/h2&gt;
  5260.  
  5261. &lt;ul&gt;&lt;li&gt;
  5262. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-07-11&amp;amp;chfieldto=2016-07-17&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;2 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5263. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-07-11&amp;amp;chfieldto=2016-07-17&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5264. 32 pull requests merged into the language:
  5265.  
  5266. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-11..2016-07-17&quot;&gt;15 into DMD&lt;/a&gt;,
  5267. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-11..2016-07-17&quot;&gt;13 into Phobos&lt;/a&gt;, and
  5268. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-11..2016-07-17&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5269. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-11..2016-07-17&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  5270. &lt;/li&gt;&lt;/ul&gt;
  5271.  
  5272. &lt;h2&gt;In the community&lt;/h2&gt;
  5273.  
  5274. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5275.  
  5276. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/dhzcrzsnqjwvhuadjccm@forum.dlang.org&quot;&gt;dcompute - A library + ldc modifications - can now build a simple add kernel&lt;/a&gt;
  5277. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nmesdkfrvfpiqrghaopg@forum.dlang.org&quot;&gt;Autotesting dub packages with dmd nightly&lt;/a&gt;
  5278. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bqphuijrklrearihdetp@forum.dlang.org&quot;&gt;Article: &amp;quot;Profile-Guided Optimization with LDC&amp;quot;&lt;/a&gt;
  5279. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/svmubkeutfrabeohgglw@forum.dlang.org&quot;&gt;new cpuid is ready for comments&lt;/a&gt;
  5280. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oqxepijuzflcaibbmhwf@forum.dlang.org&quot;&gt;LDC 1.1.0-alpha1 has been released!&lt;/a&gt;
  5281. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/qwcgtzyospqfvrrvmztm@forum.dlang.org&quot;&gt;Berlin D Meetup July 2016&lt;/a&gt;
  5282. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/oigqkfatsttoqsjtvbxx@forum.dlang.org&quot;&gt;From the Blog: The DLang Vision and Improvement Process&lt;/a&gt;
  5283. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nm3l0g$187n$1@digitalmars.com&quot;&gt;MOOC course on Programming Languages taught by Dan Grossman&lt;/a&gt;
  5284. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nqbzveeellioaaitjtsb@forum.dlang.org&quot;&gt;Zurich D Meetup&lt;/a&gt;
  5285. &lt;/li&gt;&lt;/ul&gt;
  5286.  
  5287. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5288.  
  5289. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5290. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5291. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5292. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5293. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5294. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5295. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5296. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5297. &lt;/li&gt;&lt;/ul&gt;
  5298.  
  5299.  
  5300. &lt;/div&gt;
  5301. </description></item><item><title>Issue #80</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jul-10.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jul-10.html</guid><pubDate>Sun, 10 Jul 2016 12:00:00 GMT</pubDate><description>
  5302. &lt;div id=&quot;body-container&quot;&gt;
  5303. &lt;h1&gt;
  5304. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5305. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5306. &lt;span id=&quot;title-date&quot;&gt;July 10, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5307.  
  5308. &lt;div id=&quot;preface&quot;&gt;
  5309.  
  5310. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5311.  
  5312. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5313.  
  5314. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5315.  
  5316. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5317.  
  5318. &lt;/div&gt;
  5319.  
  5320. &lt;h2&gt;Statistics&lt;/h2&gt;
  5321.  
  5322. &lt;ul&gt;&lt;li&gt;
  5323. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-07-04&amp;amp;chfieldto=2016-07-10&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5324. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-07-04&amp;amp;chfieldto=2016-07-10&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5325. 80 pull requests merged into the language:
  5326.  
  5327. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-04..2016-07-10&quot;&gt;35 into DMD&lt;/a&gt;,
  5328. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-04..2016-07-10&quot;&gt;40 into Phobos&lt;/a&gt;, and
  5329. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-04..2016-07-10&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5330. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-04..2016-07-10&quot;&gt;10 pull requests merged into the website.&lt;/a&gt;
  5331. &lt;/li&gt;&lt;/ul&gt;
  5332.  
  5333. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5334.  
  5335. &lt;p&gt;A new &lt;a href=&quot;http://forum.dlang.org/post/nlqsah$15j7$1@digitalmars.com&quot;&gt;DIP handling process was announced&lt;/a&gt; this week, aiming to make them more reliable for contributors to use as a language roadmap.&lt;/p&gt;
  5336.  
  5337. &lt;p&gt;The first &lt;a href=&quot;http://forum.dlang.org/post/vnoqcrixehhxlaswbrfw@forum.dlang.org&quot;&gt;dmd nightly shipping with dub&lt;/a&gt; also came out this week. With dub hitting 1.0.0 recently, the decision has been made to bundle it with the dmd releases, though development will still continue independently.&lt;/p&gt;
  5338.  
  5339. &lt;h2&gt;In the community&lt;/h2&gt;
  5340.  
  5341. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5342.  
  5343. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/gkqomdjepixcbtycvepn@forum.dlang.org&quot;&gt;DIP1001: Exception Handling Extensions&lt;/a&gt;
  5344. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nlmc47$gtm$1@digitalmars.com&quot;&gt;Vision document for H2 2016&lt;/a&gt;
  5345. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kmlorniwvjyivjyjntfu@forum.dlang.org&quot;&gt;DIP: Tail call optimization&lt;/a&gt;
  5346. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/kbtmzjdwbvrditelaurb@forum.dlang.org&quot;&gt;NanoSVG port&lt;/a&gt;
  5347. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/dlkitviqzctoynnimptp@forum.dlang.org&quot;&gt;BulletD needs your help!&lt;/a&gt;
  5348. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/bbwjbisichenknlqyyes@forum.dlang.org&quot;&gt;intel-intrinsics package, use Intel syntax for SIMD intrinsics&lt;/a&gt;
  5349. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nenutcgssqjlxovvgvmh@forum.dlang.org&quot;&gt;Project Highlight: Auburn Sounds&lt;/a&gt;
  5350. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/pqtonvbxgyawxkrnkotb@forum.dlang.org&quot;&gt;dlang-requests 0.2.0 released&lt;/a&gt;
  5351. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nld6g7$2okq$1@digitalmars.com&quot;&gt;Release vibe.d 0.7.29&lt;/a&gt;
  5352. &lt;/li&gt;&lt;/ul&gt;
  5353.  
  5354. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5355.  
  5356. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5357. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5358. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5359. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5360. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5361. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5362. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5363. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5364. &lt;/li&gt;&lt;/ul&gt;
  5365.  
  5366.  
  5367. &lt;/div&gt;
  5368. </description></item><item><title>Issue #79</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jul-24.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jul-24.html</guid><pubDate>Sun, 03 Jul 2016 12:00:00 GMT</pubDate><description>
  5369. &lt;div id=&quot;body-container&quot;&gt;
  5370. &lt;h1&gt;
  5371. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5372. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5373. &lt;span id=&quot;title-date&quot;&gt;July 3, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5374.  
  5375. &lt;div id=&quot;preface&quot;&gt;
  5376.  
  5377. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5378.  
  5379. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5380.  
  5381. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5382.  
  5383. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5384.  
  5385. &lt;/div&gt;
  5386.  
  5387. &lt;h2&gt;Statistics&lt;/h2&gt;
  5388.  
  5389. &lt;ul&gt;&lt;li&gt;
  5390. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-07-18&amp;amp;chfieldto=2016-07-24&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;4 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5391. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-07-18&amp;amp;chfieldto=2016-07-24&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;32 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5392. 89 pull requests merged into the language:
  5393.  
  5394. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-18..2016-07-24&quot;&gt;23 into DMD&lt;/a&gt;,
  5395. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-18..2016-07-24&quot;&gt;29 into Phobos&lt;/a&gt;, and
  5396. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-18..2016-07-24&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5397. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-07-18..2016-07-24&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  5398. &lt;/li&gt;&lt;/ul&gt;
  5399.  
  5400. &lt;h2&gt;In the community&lt;/h2&gt;
  5401.  
  5402. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5403.  
  5404. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/bcovmdivirrfgrwtrxhj@forum.dlang.org&quot;&gt;Terminix Stable 1.2.0 Released&lt;/a&gt;
  5405. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nmqtl0$26r3$1@digitalmars.com&quot;&gt;DConf 2016 on YouTube&lt;/a&gt;
  5406. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/nmpbam$30c6$1@digitalmars.com&quot;&gt;The D Language Foundation has filed for non-profit status&lt;/a&gt;
  5407. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/mypkidbbkqcgrdlexapk@forum.dlang.org&quot;&gt;The Why and Wherefore of the New DIP Process&lt;/a&gt;
  5408. &lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/post/wurudaaqwnhnrkwlejss@forum.dlang.org&quot;&gt;simple sax-style xml parser&lt;/a&gt;
  5409. &lt;/li&gt;&lt;/ul&gt;
  5410.  
  5411. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5412.  
  5413. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5414. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5415. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5416. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5417. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5418. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5419. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5420. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5421. &lt;/li&gt;&lt;/ul&gt;
  5422.  
  5423.  
  5424. &lt;/div&gt;
  5425. </description></item><item><title>Issue #78</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jul-03.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jul-03.html</guid><pubDate>Sun, 03 Jul 2016 12:00:00 GMT</pubDate><description>
  5426. &lt;div id=&quot;body-container&quot;&gt;
  5427. &lt;h1&gt;
  5428. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5429. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5430. &lt;span id=&quot;title-date&quot;&gt;July 3, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5431.  
  5432. &lt;div id=&quot;preface&quot;&gt;
  5433.  
  5434. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5435.  
  5436. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5437.  
  5438. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5439.  
  5440. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5441.  
  5442. &lt;/div&gt;
  5443.  
  5444. &lt;h2&gt;Statistics&lt;/h2&gt;
  5445.  
  5446. &lt;ul&gt;&lt;li&gt;
  5447. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-06-27&amp;amp;chfieldto=2016-07-03&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5448. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-06-27&amp;amp;chfieldto=2016-07-03&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5449. 89 pull requests merged into the language:
  5450.  
  5451. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-27..2016-07-03&quot;&gt;17 into DMD&lt;/a&gt;,
  5452. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-27..2016-07-03&quot;&gt;66 into Phobos&lt;/a&gt;, and
  5453. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-27..2016-07-03&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5454. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-27..2016-07-03&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  5455. &lt;/li&gt;&lt;/ul&gt;
  5456.  
  5457. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5458.  
  5459. &lt;p&gt;&lt;a href=&quot;https://forum.dlang.org/thread/nks8b9$1lmn$1@digitalmars.com&quot;&gt;DMD 2.071.1 was released this week&lt;/a&gt;. It is a bugfix release that &lt;a href=&quot;http://dlang.org/changelog/2.071.1.html&quot;&gt;fixes at least 15 bugs&lt;/a&gt;.&lt;/p&gt;
  5460.  
  5461. &lt;p&gt;DIP25 (sealed reference detection) bugs are being fixed in dmd git, Walter is hoping to enable it by default soon.&lt;/p&gt;
  5462.  
  5463. &lt;p&gt;Phobos got a lot of small pull requests to unit test &lt;tt&gt;@safe&lt;/tt&gt; and &lt;tt&gt;@system&lt;/tt&gt; explicitly, to ensure they compile properly with memory safety verification expectations throughout.&lt;/p&gt;
  5464.  
  5465. &lt;p&gt;GC implementation swapability was merged into druntime.&lt;/p&gt;
  5466.  
  5467.  
  5468.  
  5469. &lt;h2&gt;In the community&lt;/h2&gt;
  5470.  
  5471. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5472.  
  5473. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/pjuwtferlbnnwqrddrln@forum.dlang.org&quot;&gt;IUP, CD, IM, lua interfaces in D.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/twglnazkohawoyrhxsan@forum.dlang.org&quot;&gt;Programming in D: A Happy Accident&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/psinihymucqlmzplcbev@forum.dlang.org&quot;&gt;NanoVG and OUI ports&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/mnkumycfvblyqciphumx@forum.dlang.org&quot;&gt;one-file pure D decoders for vorbis, flac and mp3&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/cgdkzpltclkufotkpbih@forum.dlang.org&quot;&gt;Another audio plugin in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/fvstjarrpvhaynlfhwfy@forum.dlang.org&quot;&gt;Ocean preview finally open sourced&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/xlnfjfprjkhwpwvgqgbr@forum.dlang.org&quot;&gt;daffodil, a D image processing library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/tjmczeewzfzggplrvbxp@forum.dlang.org&quot;&gt;scone v1.1.0 - simple console engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://forum.dlang.org/thread/qoflwgxftlicburfwuok@forum.dlang.org&quot;&gt;unit-threaded v0.6.19 - preliminary support for property-based testing&lt;/a&gt;
  5474. &lt;/li&gt;&lt;/ul&gt;
  5475.  
  5476. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5477.  
  5478. &lt;h2&gt;Project Spotlight&lt;/h2&gt;
  5479.  
  5480. &lt;p&gt;This week, I want to talk about &lt;b&gt;my own cgi.d&lt;/b&gt;.&lt;/p&gt;
  5481.  
  5482. &lt;p&gt;I started writing cgi.d back in late 2008 on the weekends while working primarily with PHP on the weekdays. I wanted a solution that shared PHP's biggest strength, ease of deployment and writing quick pieces, while fixing many of the problems I was struggling with at the time, such as mutable superglobals.&lt;/p&gt;
  5483.  
  5484. &lt;p&gt;I had already been using the D language for a couple years at that point on home projects such as games, but had never attempted to use it on work or other web programming. I was fairly familiar with the CGI protocol, and played with it in C++ in the past, but never found it good enough to use - I preferred even PHP.&lt;/p&gt;
  5485.  
  5486. &lt;p&gt;The first draft looked nothing like the current version. I used a module constructor to load up the variables into globals, just like PHP. D didn't even have &lt;tt&gt;immutable&lt;/tt&gt; at the time, but use of &lt;tt&gt;final&lt;/tt&gt; got close enough to help mitigate the problems I was seeing in PHP.&lt;/p&gt;
  5487.  
  5488. &lt;p&gt;While this worked, I wasn't really happy with it and didn't do any real work with it. I tabled the idea for a while.&lt;/p&gt;
  5489.  
  5490. &lt;p&gt;Around the end of 2009, D was getting a new feature, then called &lt;tt&gt;invariant&lt;/tt&gt;, which would later become known as &lt;tt&gt;immutable&lt;/tt&gt;. This was a MASSIVE breaking change, but an exciting one as it seemed to enable all new ideas. I went back to the cgi.d idea and started refactoring it into the shape it has now: a &lt;tt&gt;class Cgi&lt;/tt&gt; with &lt;tt&gt;immutable&lt;/tt&gt; members for common web parameters.&lt;/p&gt;
  5491.  
  5492. &lt;p&gt;This was getting usable! The new invariant/immutable feature was rapidly changing. In the first version it appeared, string literals were immutable, but most other strings in the language were still the mutable &lt;tt&gt;char[]&lt;/tt&gt;. I briefly played with the idea of using this to identify literals for SQL injection and XSS detection, but before long, the language transitioned fully and this was no longer useful. I needed some surrounding infrastructure. I started &lt;tt&gt;mysql.d&lt;/tt&gt; in 2009, a project to wrap the MySQL C API as a simple D class. It wasn't terribly useful, but I was able to get it working quickly - a big confidence booster that this was realistic, I could do all the tasks I needed to do, and if something new came up, using existing C libraries took only a small investment with quick, reliable payoff.&lt;/p&gt;
  5493.  
  5494. &lt;p&gt;Coincidentally, in 2010, I started writing &lt;tt&gt;dom.d&lt;/tt&gt;. My original intention was to play around and not use it for anything serious, but once I had it working, it quickly became both a playground with D's emerging features as well as a solution to my XSS concern: instead of building strings, I'd build a DOM tree and print that out.&lt;/p&gt;
  5495.  
  5496. &lt;p&gt;Of course, that's not the only way to use &lt;tt&gt;cgi.d&lt;/tt&gt;, it's interface was deliberately kept uncoupled, simple, and generic - it just dealt with ordinary arrays - but the combination of the two plus &lt;tt&gt;mysql.d&lt;/tt&gt; was enough for me to put D over the edge as a language I could seriously use for the web... so I started doing day job stuff in parallel. On the weekdays, I'd write it in PHP, then on the weekend, I'd reimplement it in D and see how it compared.&lt;/p&gt;
  5497.  
  5498. $(P After only about two months, we are now in mid-2010, I had enough to show to the client: the D version had feature-parity with the PHP version... written in about half the hours. As the PHP app grew, making changes reliably became harder and harder, whereas the D app scaled more linearly. As gravy on top of the superior long-term development curve bending, the D also performed better than PHP as the program grew (though it did lose on small benchmarks of scaling as PHP beat the CGI overhead on simpler programs, this advantage disappeared with a more complex program). The main benefit, however, was always my productivity in the environment of rapidly changing business requirements.
  5499.  
  5500. &lt;p&gt;The client gave the go-ahead to actually make the transition going forward for new components, including a major new project coming in the pipeline as long as I maintained compatibility with PHP so if something went wrong, we could plug it right back.&lt;/p&gt;
  5501.  
  5502. &lt;p&gt;I wrote some IPC and session reading code to handle the PHP interop and was off. I was officially a professional D web programmer at this point. A good chunk of my &lt;tt&gt;arsd&lt;/tt&gt; repo on github is the open sourced support infrastructure for the work programs I'd write over the next four years.&lt;/p&gt;
  5503.  
  5504. &lt;p&gt;&lt;tt&gt;cgi.d&lt;/tt&gt; still had many changes coming - multipart/form-data for file uploads, FastCGI and SCGI alternate interfaces to reduce the CGI overhead even more, and today it even includes an embedded HTTP server for simple development or internal deployments (I still STRONGLY recommend using a real http server with a reverse proxy or one of the CGI options for production, web-facing deployments) - it has grown far beyond just being a cgi helper library like its name implies.&lt;/p&gt;
  5505.  
  5506. &lt;p&gt;Moreover, my addon library, &lt;tt&gt;web.d&lt;/tt&gt;, was an early adopter of D's reflection, giving a lot of automation to cgi.d's boilerplate. I'll write more about it later, but now when I go back to PHP, I more often emulate web.d than my old way of making D emulate php.&lt;/p&gt;
  5507.  
  5508. &lt;p&gt;&lt;tt&gt;cgi.d&lt;/tt&gt; today, eight years after its initial draft, is my go-to tool for making non-trivial web applications. I still actually kinda like PHP for really small things, but if it doesn't fit on one screen, I'll write it in D and my old, reliable cgi.d is how I'll do it. Using a simple process model and C libraries instead of new techniques like vibe.d's fibers may make me a bit daft, but it also keeps that confidence from early on: my libpq wrapper just works. My mhash bindings just work. I've spent years interfacing with a variety of real world systems and haven't needed to rewrite popular libraries (though not *needing* to doesn't necessarily stop me :) ) and I am happy with it just how it is.&lt;/p&gt;
  5509.  
  5510. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5511. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5512. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5513. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5514. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5515. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5516. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5517. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5518. &lt;/li&gt;&lt;/ul&gt;
  5519.  
  5520.  
  5521. &lt;/div&gt;
  5522. </description></item><item><title>Issue #77</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jun-26.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jun-26.html</guid><pubDate>Sun, 26 Jun 2016 12:00:00 GMT</pubDate><description>
  5523. &lt;div id=&quot;body-container&quot;&gt;
  5524. &lt;h1&gt;
  5525. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5526. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5527. &lt;span id=&quot;title-date&quot;&gt;June 26, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5528.  
  5529. &lt;div id=&quot;preface&quot;&gt;
  5530.  
  5531. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5532.  
  5533. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5534.  
  5535. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5536.  
  5537. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5538.  
  5539. &lt;/div&gt;
  5540.  
  5541. &lt;h2&gt;Statistics&lt;/h2&gt;
  5542.  
  5543. &lt;ul&gt;&lt;li&gt;
  5544. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-06-20&amp;amp;chfieldto=2016-06-26&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5545. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-06-20&amp;amp;chfieldto=2016-06-26&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5546. 26 pull requests merged into the language:
  5547.  
  5548. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-20..2016-06-26&quot;&gt;8 into DMD&lt;/a&gt;,
  5549. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-20..2016-06-26&quot;&gt;17 into Phobos&lt;/a&gt;, and
  5550. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-20..2016-06-26&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5551. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-20..2016-06-26&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  5552. &lt;/li&gt;&lt;/ul&gt;
  5553.  
  5554. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5555.  
  5556. &lt;p&gt;A lot of work is going into fixing &lt;tt&gt;@safe&lt;/tt&gt; right now, both in annotating and unittesting Phobos, and in fixing compiler bugs.&lt;/p&gt;
  5557.  
  5558. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nk93ge$1jhe$1@digitalmars.com&quot;&gt;DUB 1.0.0 has been released&lt;/a&gt; marking API stability with the package manager.&lt;/p&gt;
  5559.  
  5560. &lt;h2&gt;In the community&lt;/h2&gt;
  5561.  
  5562. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5563.  
  5564. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rfuzuxnifamzuyypjjgu@forum.dlang.org&quot;&gt;D Blog: Project Highlight: The PowerNex Kernel&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qhnrjwsuebgyhganrcfb@forum.dlang.org&quot;&gt;D Blog: Making Of: LDC 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lkefxhjklmgxvksuteka@forum.dlang.org&quot;&gt;[Semi OT] About code review&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bqjusnoomvoqdagvnqac@forum.dlang.org&quot;&gt;GSoC Summer of Code Update - all on schedule&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nwkyqfzqgxneubwdvksu@forum.dlang.org&quot;&gt;pure D mpeg2 decoder&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qveyuuwryeehuejsgvgd@forum.dlang.org&quot;&gt;Makd (build system) and d1to2fix tool (D1-&amp;gt;D2 conversion) released as open source, used internally by Sociomantic&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nkjepo$1hjo$1@digitalmars.com&quot;&gt;NDC 2016 talk now online by Andrei Alexandrescu&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rlnwpyefgqcbwcrsonda@forum.dlang.org&quot;&gt;Iup and nukclear interface in D.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nkhhoi$1t82$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup June 23, 2016 - Jason White's Button and other topics&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rghoifjoaudwackbrdlu@forum.dlang.org&quot;&gt;brainfuck in CTFE&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/leviwswvvcnqberafxsp@forum.dlang.org&quot;&gt;QtE5 - is a wrapping of Qt-5 for D&lt;/a&gt;
  5565. &lt;/li&gt;&lt;/ul&gt;
  5566.  
  5567. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5568.  
  5569. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5570. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5571. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5572. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5573. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5574. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5575. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5576. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5577. &lt;/li&gt;&lt;/ul&gt;
  5578.  
  5579.  
  5580. &lt;/div&gt;
  5581. </description></item><item><title>Issue #76</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jun-19.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jun-19.html</guid><pubDate>Sun, 19 Jun 2016 12:00:00 GMT</pubDate><description>
  5582. &lt;div id=&quot;body-container&quot;&gt;
  5583. &lt;h1&gt;
  5584. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5585. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5586. &lt;span id=&quot;title-date&quot;&gt;June 19, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5587.  
  5588. &lt;div id=&quot;preface&quot;&gt;
  5589.  
  5590. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5591.  
  5592. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5593.  
  5594. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5595.  
  5596. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5597.  
  5598. &lt;/div&gt;
  5599.  
  5600. &lt;h2&gt;Statistics&lt;/h2&gt;
  5601.  
  5602. &lt;ul&gt;&lt;li&gt;
  5603. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-06-13&amp;amp;chfieldto=2016-06-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5604. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-06-13&amp;amp;chfieldto=2016-06-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5605. 43 pull requests merged into the language:
  5606.  
  5607. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-13..2016-06-19&quot;&gt;17 into DMD&lt;/a&gt;,
  5608. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-13..2016-06-19&quot;&gt;23 into Phobos&lt;/a&gt;, and
  5609. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-13..2016-06-19&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5610. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-13..2016-06-19&quot;&gt;16 pull requests merged into the website.&lt;/a&gt;
  5611. &lt;/li&gt;&lt;/ul&gt;
  5612.  
  5613. &lt;h2&gt;In the community&lt;/h2&gt;
  5614.  
  5615. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5616.  
  5617. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qroiavxmnfybkpzgqruf@forum.dlang.org&quot;&gt;D Programmers in Colombia?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xpzwhrwmprtthcwbujfj@forum.dlang.org&quot;&gt;std.experimental.checkedint is ready for comments!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mgnmsptrocefxslyuwdn@forum.dlang.org&quot;&gt;Work in Amsterdam&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/onnggyqzydganjqthsxm@forum.dlang.org&quot;&gt;pure D JPEG decoder, with progressive JPEG support, public domain&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/susytupautifxhfhjhed@forum.dlang.org&quot;&gt;pure D jpeg encoder, public domain&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vccecaeunthhfgvkoija@forum.dlang.org&quot;&gt;D-Man culture&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/njp9nd$kjm$1@digitalmars.com&quot;&gt;July D Boston Meetup gathering&lt;/a&gt;
  5618. &lt;/li&gt;&lt;/ul&gt;
  5619.  
  5620. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5621.  
  5622. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  5623.  
  5624. &lt;p&gt;I did some minor changes to my png.d this week that caused a major reduction in memory usage: changing temporary allocations to reuse a manual buffer and free it when I'm done with it.&lt;/p&gt;
  5625.  
  5626. &lt;p&gt;Another part was transitioning away from std.zlib and using the C interface, etc.c.zlib instead. std.zlib (which has been mentioned before in these tips) allocates a lot of temporaries without cleaning up after them.&lt;/p&gt;
  5627.  
  5628. &lt;p&gt;Temporary allocations tend to be cleaned up eventually, but since they are local to your function, they are really easy to manage with a simple &lt;tt&gt;scope(exit) free(memory);&lt;/tt&gt;, so the cost to the programmer is very low for the benefit.&lt;/p&gt;
  5629.  
  5630. &lt;p&gt;png.d cut its memory usage down to about 1/3 of what it was with just a couple simple scoped lifetime memory frees.&lt;/p&gt;
  5631.  
  5632. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5633. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5634. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5635. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5636. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5637. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5638. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5639. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5640. &lt;/li&gt;&lt;/ul&gt;
  5641.  
  5642.  
  5643. &lt;/div&gt;
  5644. </description></item><item><title>Issue #75</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jun-12.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jun-12.html</guid><pubDate>Sun, 12 Jun 2016 12:00:00 GMT</pubDate><description>
  5645. &lt;div id=&quot;body-container&quot;&gt;
  5646. &lt;h1&gt;
  5647. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5648. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5649. &lt;span id=&quot;title-date&quot;&gt;June 12, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5650.  
  5651. &lt;div id=&quot;preface&quot;&gt;
  5652.  
  5653. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5654.  
  5655. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5656.  
  5657. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5658.  
  5659. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5660.  
  5661. &lt;/div&gt;
  5662.  
  5663. &lt;h2&gt;Statistics&lt;/h2&gt;
  5664.  
  5665. &lt;ul&gt;&lt;li&gt;
  5666. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-06-06&amp;amp;chfieldto=2016-06-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5667. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-06-06&amp;amp;chfieldto=2016-06-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;34 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5668. 34 pull requests merged into the language:
  5669.  
  5670. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-06..2016-06-12&quot;&gt;11 into DMD&lt;/a&gt;,
  5671. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-06..2016-06-12&quot;&gt;17 into Phobos&lt;/a&gt;, and
  5672. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-06..2016-06-12&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5673. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-06-06..2016-06-12&quot;&gt;28 pull requests merged into the website.&lt;/a&gt;
  5674. &lt;/li&gt;&lt;/ul&gt;
  5675.  
  5676. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5677.  
  5678. &lt;p&gt;A new page, &lt;a href=&quot;http://dlang.org/orgs-using-d.html&quot;&gt;Organization using D&lt;/a&gt;, was added to the website this week.&lt;/p&gt;
  5679.  
  5680. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/aiedvlztjxxahoxgdssm@forum.dlang.org&quot;&gt;LDC 1.0.0 has been released!&lt;/a&gt; This release symbolizes stability and reliability in the eyes of the LDC maintainers. I feel it has come a long way over the last couple years and this is a good time for ldc!&lt;/p&gt;
  5681.  
  5682. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nj65kc$ecn$1@digitalmars.com&quot;&gt;Beta release DUB 1.0.0-beta.1&lt;/a&gt; also came out this week.&lt;/p&gt;
  5683.  
  5684.  
  5685.  
  5686. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/qhcqyglfptlwjoamekcm@forum.dlang.org&quot;&gt;Berlin D Meetup&lt;/a&gt; will be held on Friday the 17th of this week!&lt;/p&gt;
  5687.  
  5688. &lt;h2&gt;In the community&lt;/h2&gt;
  5689.  
  5690. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5691.  
  5692. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ltrjwytwdzpnrbsxclah@forum.dlang.org&quot;&gt;dlang-requests 0.1.7 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nhtxtovsjrzehsragxtl@forum.dlang.org&quot;&gt;Announcing TinyRedis v2.1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/emkoxgqykzqdqzikiriv@forum.dlang.org&quot;&gt;LDC+Dub+Vibe.d work on SmartOS 64bit now&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uktkoszfcosrikeisryl@forum.dlang.org&quot;&gt;Recursive SymbolNames solved.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ynzelohyvdhuxrxhfrtf@forum.dlang.org&quot;&gt;D syntax highlighting support for Jekyll websites in v1.11.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fdmafvxoawgmsfjmhksr@forum.dlang.org&quot;&gt;Tiobe Index again - now 5 month in Top 20&lt;/a&gt;
  5693. &lt;/li&gt;&lt;/ul&gt;
  5694.  
  5695. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5696.  
  5697. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5698. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5699. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5700. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5701. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5702. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5703. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5704. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5705. &lt;/li&gt;&lt;/ul&gt;
  5706.  
  5707.  
  5708. &lt;/div&gt;
  5709. </description></item><item><title>Issue #74</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jun-05.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jun-05.html</guid><pubDate>Sun, 05 Jun 2016 12:00:00 GMT</pubDate><description>
  5710. &lt;div id=&quot;body-container&quot;&gt;
  5711. &lt;h1&gt;
  5712. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5713. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5714. &lt;span id=&quot;title-date&quot;&gt;June 5, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5715.  
  5716. &lt;div id=&quot;preface&quot;&gt;
  5717.  
  5718. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5719.  
  5720. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5721.  
  5722. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5723.  
  5724. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5725.  
  5726. &lt;/div&gt;
  5727.  
  5728. &lt;h2&gt;Statistics&lt;/h2&gt;
  5729.  
  5730. &lt;ul&gt;&lt;li&gt;
  5731. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-05-30&amp;amp;chfieldto=2016-06-05&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5732. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-05-30&amp;amp;chfieldto=2016-06-05&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;34 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5733. 34 pull requests merged into the language:
  5734.  
  5735. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-30..2016-06-05&quot;&gt;18 into DMD&lt;/a&gt;,
  5736. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-30..2016-06-05&quot;&gt;25 into Phobos&lt;/a&gt;, and
  5737. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-30..2016-06-05&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5738. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-30..2016-06-05&quot;&gt;15 pull requests merged into the website.&lt;/a&gt;
  5739. &lt;/li&gt;&lt;/ul&gt;
  5740.  
  5741. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5742.  
  5743. &lt;p&gt;D now has an &lt;a href=&quot;http://dlang.org/blog/&quot;&gt;official blog&lt;/a&gt;! Where This Week in D serves to sum up community activity and just sometimes has original content, the blog is a new source of inside information and original content to come as it is prepared.&lt;/p&gt;
  5744.  
  5745. &lt;p&gt;There is just one post so far, but with Mike Parker being officially called to keep it up, I have no doubt there will be good stuff in there to come.&lt;/p&gt;
  5746.  
  5747. &lt;p&gt;Another major change this week was that the ddox Phobos documentation, at &lt;a href=&quot;http://dlang.org/library/&quot;&gt;&lt;/a&gt;, now has a plan to go live and as such, got a significant amount of work done. Over the next couple of weeks, the migration should be progressing.&lt;/p&gt;
  5748.  
  5749. &lt;h2&gt;In the community&lt;/h2&gt;
  5750.  
  5751. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5752.  
  5753. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nirt31$1bab$1@digitalmars.com&quot;&gt;Fast Deterministic Selection&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nioqko$2vvj$1@digitalmars.com&quot;&gt;Beta release vibe.d 0.7.29-beta.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uhozcvatvyztfuhivrjq@forum.dlang.org&quot;&gt;Button: A fast, correct, and elegantly simple build system.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jxfkiadspvefzmfxeomu@forum.dlang.org&quot;&gt;[Blog post] Operator overloading for structs in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/aztdkhvmyuouidipwxhk@forum.dlang.org&quot;&gt;Reddit announcements of various forum threads&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jciqiqrfxngylrrfojxb@forum.dlang.org&quot;&gt;SQLite-D goes beta!&lt;/a&gt;
  5754. &lt;/li&gt;&lt;/ul&gt;
  5755.  
  5756. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5757.  
  5758. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5759. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5760. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5761. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5762. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5763. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5764. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5765. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5766. &lt;/li&gt;&lt;/ul&gt;
  5767.  
  5768.  
  5769. &lt;/div&gt;
  5770. </description></item><item><title>Issue #73</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-may-29.html</link><guid>http://arsdnet.net/this-week-in-d/2016-may-29.html</guid><pubDate>Sun, 29 May 2016 12:00:00 GMT</pubDate><description>
  5771. &lt;div id=&quot;body-container&quot;&gt;
  5772. &lt;h1&gt;
  5773. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5774. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5775. &lt;span id=&quot;title-date&quot;&gt;May 29, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5776.  
  5777. &lt;div id=&quot;preface&quot;&gt;
  5778.  
  5779. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5780.  
  5781. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5782.  
  5783. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5784.  
  5785. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5786.  
  5787. &lt;/div&gt;
  5788.  
  5789. &lt;h2&gt;Statistics&lt;/h2&gt;
  5790.  
  5791. &lt;ul&gt;&lt;li&gt;
  5792. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-05-23&amp;amp;chfieldto=2016-05-29&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5793. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-05-23&amp;amp;chfieldto=2016-05-29&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;30 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5794. 34 pull requests merged into the language:
  5795.  
  5796. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-23..2016-05-29&quot;&gt;14 into DMD&lt;/a&gt;,
  5797. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-23..2016-05-29&quot;&gt;20 into Phobos&lt;/a&gt;, and
  5798. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-23..2016-05-29&quot;&gt;0 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5799. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-23..2016-05-29&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  5800. &lt;/li&gt;&lt;/ul&gt;
  5801.  
  5802. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5803.  
  5804. &lt;p&gt;Phobos' documentation is getting some cleanup - &lt;a href=&quot;https://github.com/dlang/phobos/pull/4364&quot;&gt;a PR changed XREF macros to a more generic REF macro&lt;/a&gt; (inspired, in part, by my documentation fork at dpldocs.info). There are currently at least 11 different ways to make links in ddoc. Each one removed will make crosslinking easier for documentation authors, so this seems small, but will be a big help later on.&lt;/p&gt;
  5805.  
  5806. &lt;p&gt;On the website, the D Language Foundation &lt;a href=&quot;http://dlang.org/foundation.html&quot;&gt;got a page describing it&lt;/a&gt; now, and a couple other pages are in the works, including &lt;a href=&quot;http://tour.dlang.org&quot;&gt;a tour of D site&lt;/a&gt; and a D users page (not yet public).&lt;/p&gt;
  5807.  
  5808. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nifor1$2kqv$1@digitalmars.com&quot;&gt;Beta D 2.071.1-b2&lt;/a&gt; was also released this week.&lt;/p&gt;
  5809.  
  5810. &lt;h2&gt;In the community&lt;/h2&gt;
  5811.  
  5812. &lt;h3&gt;Boston-area D Meetup Group Created&lt;/h3&gt;
  5813.  
  5814. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ni1j65$12fp$1@digitalmars.com&quot;&gt;Would you like to know more?&lt;/a&gt;&lt;/p&gt;
  5815.  
  5816. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5817.  
  5818. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/sssrppttrdeutzqrzwna@forum.dlang.org&quot;&gt;A ready to use Vulkan triangle example for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/umofjstbvpsejmdebrni@forum.dlang.org&quot;&gt;PowerNex - New release of my D kernel&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nidmu8$2lff$1@digitalmars.com&quot;&gt;Scriptlike v0.9.6 - Minor update&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/icsvunykptdobosvaqrr@forum.dlang.org&quot;&gt;IDE - Coedit 2, update 6 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ngxvmfqusvhyezwdbvaq@forum.dlang.org&quot;&gt;C++ to D converter based on clang&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jaxnntbwcfjjyqjlmlut@forum.dlang.org&quot;&gt;D Embedded Database v0.1 Released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fqrdrelpjfeilipljelr@forum.dlang.org&quot;&gt;Dynamic Bindings to libui (x-platform GUI)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wxuewrodbdwgtiucwnbn@forum.dlang.org&quot;&gt;SR3C -- small sompression library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nia0h4$rg2$1@digitalmars.com&quot;&gt;First Boston D language meetup&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tppgkjjdpeoigtnqvskt@forum.dlang.org&quot;&gt;Sociomantic's short DConf2016 video&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wgzeuombdljsdeaxycnk@forum.dlang.org&quot;&gt;Introducing mach.d, the github repo where I put whatever modules I happen to write&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ni0aqh$1812$1@digitalmars.com&quot;&gt;Better Voldemort types&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nhu4u7$12n4$1@digitalmars.com&quot;&gt;A language comparison (seeking productivity-enhancing, well-designed, and concise languages)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bmizasloekcvvsxepwbh@forum.dlang.org&quot;&gt;matrix library&lt;/a&gt;
  5819. &lt;/li&gt;&lt;/ul&gt;
  5820.  
  5821. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5822.  
  5823. &lt;h3&gt;Notable threads&lt;/h3&gt;
  5824.  
  5825. &lt;p&gt;The horribly-named &lt;a href=&quot;http://forum.dlang.org/thread/ni777b$30ea$1@digitalmars.com&quot;&gt;Our Sister thread&lt;/a&gt; is actually about a reference-counted string type, the thing Andrei Alexandrescu has apparently been working on.&lt;/p&gt;
  5826.  
  5827. &lt;p&gt;In this thread, there is discussion on what its public API should be, the level of compatibility with built-in &lt;tt&gt;char[]&lt;/tt&gt; slices and &lt;tt&gt;@safe&lt;/tt&gt; guarantees, and of course, some discussion on the details of its memory management strategy.&lt;/p&gt;
  5828.  
  5829. &lt;p&gt;There wasn't a whole lot of detail worked out in the thread (yet, it is still somewhat young), and people did discuss a notable topic, though tangential to the main point: if we can convert to a &lt;tt&gt;scope&lt;/tt&gt; slice. I don't think that is going to happen, but the &lt;tt&gt;RCStr&lt;/tt&gt; (whatever its final name may be) is coming, and this thread is the most insight we've had into its recent progress yet.&lt;/p&gt;
  5830.  
  5831. &lt;h3&gt;Tip of the Week&lt;/h3&gt;
  5832.  
  5833. &lt;p&gt;I made up a new filthy hack this week: &lt;a href=&quot;http://forum.dlang.org/thread/awjuoemsnmxbfgzhgkgx@forum.dlang.org&quot;&gt;foo =&amp;gt; &amp;quot;bar&amp;quot; key/value literals in D!&lt;/a&gt; And Vladimir Panteleev, as he often does, took the raw concept and made a &lt;a href=&quot;https://github.com/CyberShadow/ae/blob/master/utils/meta/args.d&quot;&gt;named args library&lt;/a&gt; out of it.&lt;/p&gt;
  5834.  
  5835. &lt;p&gt;Read the linked post for the way it works - basically, I extract a lambda's argument name to use as the key, and use its return value as the value, co-opting that lambda syntax for the key/value hack.&lt;/p&gt;
  5836.  
  5837. &lt;p&gt;But, what I want to expand a bit upon here is the process that led to it. Basically, I was working on my REST API client library, integrating it with my Javascript-style &lt;tt&gt;var&lt;/tt&gt; module for easier construction of JSON requests. I wanted to create a var object with syntax like common Javascript or Ruby libraries offer.&lt;/p&gt;
  5838.  
  5839. &lt;p&gt;My &lt;tt&gt;jsvar.d&lt;/tt&gt; does include a JSON literal parsing function, using a &lt;tt&gt;json!q{}&lt;/tt&gt; construct in D. That's a template (using the &lt;a href=&quot;http://www.drdobbs.com/tools/user-defined-literals-in-the-d-programmi/229401068&quot;&gt;user-defined literal pattern&lt;/a&gt;) combined with a D token string to give a vaguely Javascript syntax... but pretty different semantics. Since the &lt;tt&gt;q{}&lt;/tt&gt; string in D is just a string literal, you cannot actually interpolate runtime values into it. (Well, you could use &lt;tt&gt;mixin&lt;/tt&gt;, but then the syntax moves quite a bit away from JS again)&lt;/p&gt;
  5840.  
  5841. &lt;p&gt;So, it works for static data, but that's not very interesting for the REST use-case. I could, of course, simply construct the object, even wrapping it in a delegate to do inline on the function call:&lt;/p&gt;
  5842.  
  5843. &lt;pre class=&quot;d_code&quot;&gt;   restapi.request( (&lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; obj) {
  5844.       obj.value = whatever;
  5845.       obj.other_value = things_work;
  5846.   });
  5847. &lt;/pre&gt;
  5848.  
  5849. &lt;p&gt;That delegate receives an object created by the library, and being taken by &lt;tt&gt;ref&lt;/tt&gt;, you can replace it wholesale or just set your keys and values on it.... but this is still slightly bulkier than Javascript, especially when nesting objects. What else can we do?&lt;/p&gt;
  5850.  
  5851. &lt;p&gt;Well, C-style struct initializers, labels, and associative array literals all use colons, like a JSON object, can we use them? C struct initializers no, they only work in specific contexts (and btw, I'd like to see them removed from the language). There's no such reflection capability to get at labels and the following expressions, so they are out too.&lt;/p&gt;
  5852.  
  5853. &lt;p&gt;AA literals certainly come close, they are the nearest D language construct designed for this purpose, but they are strongly typed, meaning the key must be quoted and the value must be wrapped in a &lt;tt&gt;var&lt;/tt&gt; initializer. &lt;tt&gt;[&amp;quot;key&amp;quot; : var(&amp;quot;bar&amp;quot;)]&lt;/tt&gt; rather than JS's &lt;tt&gt;{key: &amp;quot;bar&amp;quot;}&lt;/tt&gt;. Not bad, but what else can we do?&lt;/p&gt;
  5854.  
  5855. &lt;p&gt;A variadic template is the existing D solution to heterogeneous key/value types. To do this, you write a &lt;tt&gt;auto magic(T...)(T args) {}&lt;/tt&gt; function which loops through the arguments, assuming they are key/value pairs. The result looks like:&lt;/p&gt;
  5856.  
  5857. &lt;pre class=&quot;d_code&quot;&gt;    magic(
  5858.      &lt;font color=&quot;red&quot;&gt;&amp;quot;key&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;value&amp;quot;&lt;/font&gt;,
  5859.      &lt;font color=&quot;red&quot;&gt;&amp;quot;next key&amp;quot;&lt;/font&gt;, 10,
  5860.    );
  5861. &lt;/pre&gt;
  5862.  
  5863. &lt;p&gt;Again, keys must be quoted, and there must be commas between each element - D sees them as just a list of values, the language itself isn't aware that any of them are interpreted as keys.&lt;/p&gt;
  5864.  
  5865. &lt;p&gt;Such works (and is used in Phobos in a few places, see &lt;a href=&quot;http://dpldocs.info/experimental-docs/std.typecons.Tuple.html&quot;&gt;std.typecons.Tuple&lt;/a&gt;, for example), but is still a bit syntactically clunky.&lt;/p&gt;
  5866.  
  5867. &lt;p&gt;I really wanted to get a colon.... or a fat arrow, like Ruby would use... hmmm, I thought, D *does* have a fat arrow syntax: the short-form lambda.&lt;/p&gt;
  5868.  
  5869. &lt;pre class=&quot;d_code&quot;&gt;   arg =&amp;gt; return_expression
  5870. &lt;/pre&gt;
  5871.  
  5872. &lt;p&gt;And D has reflection over function definitions. Oh my, I think I can hack this! And I did.&lt;/p&gt;
  5873.  
  5874. &lt;div class=&quot;tip&quot;&gt;   BTW, the fat arrow syntax can also take an anonymous typed argument: &lt;tt&gt;(int) =&amp;gt; 4&lt;/tt&gt; is legal D (the parenthesis are required here though, unlike with the single argument name case). Anyone wanna hack up a new &lt;tt&gt;Tuple&lt;/tt&gt; with specs like &lt;tt&gt;Tuple!((int) =&amp;gt; &amp;quot;x&amp;quot;, (int) =&amp;gt; &amp;quot;y&amp;quot;)&lt;/tt&gt;? Should be possible!
  5875. &lt;/div&gt;
  5876.  
  5877. &lt;hr /&gt;
  5878.  
  5879. &lt;p&gt;I call this a filthy hack and I actually believe the traditional delegate initializer, with the object passed to it from the library to be populated, or the actual D associative array syntax are probably better to use in the real world. They will work more as expected, since they aren't abusing the syntax to mean something it wasn't intended to express (think for a moment about D scoping and variable shadowing rules and consider what happens if you used &lt;tt&gt;x=&amp;gt;x&lt;/tt&gt; in my key/value hack....), but nevertheless, thinking outside the box like this can sometimes yield useful results.&lt;/p&gt;
  5880.  
  5881. &lt;p&gt;I encourage you all to consider what D can to today before you ask for new syntax to be added - perhaps the thing you want can already be close-enough achieved by working with the existing language! Just write what you want it to look like, then consider what the D compiler would think of it... and use metaprogramming to extract what you want!&lt;/p&gt;
  5882.  
  5883. &lt;p&gt;Just don't go TOO nuts. We still want our D code to be understandable by people who still have a few marbles actually still in their head, rather than lost all over the floor like me :) &lt;/p&gt;
  5884.  
  5885. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5886. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5887. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5888. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5889. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5890. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5891. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5892. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5893. &lt;/li&gt;&lt;/ul&gt;
  5894.  
  5895.  
  5896. &lt;/div&gt;
  5897. </description></item><item><title>Issue #72</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-may-22.html</link><guid>http://arsdnet.net/this-week-in-d/2016-may-22.html</guid><pubDate>Sun, 22 May 2016 12:00:00 GMT</pubDate><description>
  5898. &lt;div id=&quot;body-container&quot;&gt;
  5899. &lt;h1&gt;
  5900. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5901. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5902. &lt;span id=&quot;title-date&quot;&gt;May 22, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5903.  
  5904. &lt;div id=&quot;preface&quot;&gt;
  5905.  
  5906. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5907.  
  5908. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5909.  
  5910. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5911.  
  5912. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5913.  
  5914. &lt;/div&gt;
  5915.  
  5916. &lt;h2&gt;Statistics&lt;/h2&gt;
  5917.  
  5918. &lt;ul&gt;&lt;li&gt;
  5919. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-05-16&amp;amp;chfieldto=2016-05-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5920. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-05-16&amp;amp;chfieldto=2016-05-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5921. 29 pull requests merged into the language:
  5922.  
  5923. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-16..2016-05-22&quot;&gt;16 into DMD&lt;/a&gt;,
  5924. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-16..2016-05-22&quot;&gt;11 into Phobos&lt;/a&gt;, and
  5925. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-16..2016-05-22&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5926. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-16..2016-05-22&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  5927. &lt;/li&gt;&lt;/ul&gt;
  5928.  
  5929. &lt;h2&gt;In the community&lt;/h2&gt;
  5930.  
  5931. &lt;h3&gt;Community announcements&lt;/h3&gt;
  5932.  
  5933. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdpjqdkenrnuxvruwoqs@forum.dlang.org&quot;&gt;Anonther auto-generated vulkan binding&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vylvnkpdjefmuvmqtdkn@forum.dlang.org&quot;&gt;The D language online tour - tour.dlang.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jevgusldyzjgaixgouwd@forum.dlang.org&quot;&gt;LDC 1.0.0-beta2 has been released!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zrhdqeylffvreyfahkre@forum.dlang.org&quot;&gt;unit-threaded v0.6.13 - tags, autotags and support for integration tests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/anmczpzjohbjwaycdupe@forum.dlang.org&quot;&gt;ggplotd v0.9: Added geomDensity and geomDensity2d support. Documentation improvements&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nhf8cn$28cj$1@digitalmars.com&quot;&gt;DDT 1.0.0 released.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rasdmrdhpjijllvngmdo@forum.dlang.org&quot;&gt;Berlin D Meetup May 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wctrsimrsfpbdkgcejrs@forum.dlang.org&quot;&gt;mago-mi: GDB/MI compatible frontend for Mago debugger&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/eozguhavggchzzruzkwk@forum.dlang.org&quot;&gt;D's Auto Decoding and You&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qdqnwglgzmyurutsvtpx@forum.dlang.org&quot;&gt;Diamond - MVC / Template engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nht1o8$2omh$1@digitalmars.com&quot;&gt;Release DUB 0.9.25, new logo and updated website design&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nhciv3$1j9q$1@digitalmars.com&quot;&gt;Alexandrescu's ACCU 2016 keynote video available online&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/dwefllxhoyjajdpeoszm@forum.dlang.org&quot;&gt;amoeba, a chess engine written in D&lt;/a&gt;
  5934. &lt;/li&gt;&lt;/ul&gt;
  5935.  
  5936. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  5937.  
  5938. &lt;h3&gt;Notable threads&lt;/h3&gt;
  5939.  
  5940. &lt;p&gt;The thread &lt;a href=&quot;http://forum.dlang.org/post/ntqorbosznfizqqirsng@forum.dlang.org&quot;&gt;DMD producing huge binaries&lt;/a&gt; brought up a recurring problem inlarger D codebases: gigantic symbol names leading to huge binaries and really slow builds.&lt;/p&gt;
  5941.  
  5942. &lt;p&gt;The core team is onboard with finding a solution. Walter quickly enabled a compression scheme on symbols, and others are helping with the implementation, making it fast. However, compression is a linear solution to an exponential problem, and even if the compression algorithm is very fast, it will necessarily eat some CPU and RAM (even if the cost is smaller than writing out the large symbol names to the object file and being processed by the linker), so others are continuing to search for a root-cause fix.&lt;/p&gt;
  5943.  
  5944. &lt;p&gt;Among the ideas are changing the mangling scheme for &lt;tt&gt;auto&lt;/tt&gt; functions, which fails to fix the exponential size problem, hashing symbols, which limits their size but adds more processing time (already done on dmd/win32 using OMF to work around optlink size limits), or using some kind of random or sequential identifier, which has the problem of not being reproducible reliably under separate compilation (doing one module or package at a time - then, the sequence a symbol is encountered will not necessarily be the same when building the next package, and that would lead to linker errors).&lt;/p&gt;
  5945.  
  5946. &lt;p&gt;My money is on a compression/hash implementation being merged in the next month to kick the problem further down the road (perhaps even good enough for all practical purposes!), but I'm holding out hope that we'll figure out a root cause solution as it should give the best long-term results.&lt;/p&gt;
  5947.  
  5948. &lt;p&gt;With general consensus that this is a serious problem that needs a solution, I am optimistic about where this is going. Walter also recognized some other bugs with separate compilation in the past, so we should hopefully avoid repeating those mistakes.&lt;/p&gt;
  5949.  
  5950. &lt;hr /&gt;
  5951.  
  5952. &lt;p&gt;Meanwhile, the thread about floating point continued, with the argument apparently going in circles. We still might get a warning for some of the issues, but the original agreement is now getting buried in the long argument. You, yes, you, the reader, might want to redouble efforts on the noncontroversial tidbits to make at least incremental progress despite the ongoing argument.&lt;/p&gt;
  5953.  
  5954. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  5955. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  5956. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5957. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5958. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  5959. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  5960. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5961. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  5962. &lt;/li&gt;&lt;/ul&gt;
  5963.  
  5964.  
  5965. &lt;/div&gt;
  5966. </description></item><item><title>Issue #71</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-may-15.html</link><guid>http://arsdnet.net/this-week-in-d/2016-may-15.html</guid><pubDate>Sun, 15 May 2016 12:00:00 GMT</pubDate><description>
  5967. &lt;div id=&quot;body-container&quot;&gt;
  5968. &lt;h1&gt;
  5969. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  5970. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  5971. &lt;span id=&quot;title-date&quot;&gt;May 15, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  5972.  
  5973. &lt;div id=&quot;preface&quot;&gt;
  5974.  
  5975. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  5976.  
  5977. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  5978.  
  5979. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  5980.  
  5981. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  5982.  
  5983. &lt;/div&gt;
  5984.  
  5985. &lt;h2&gt;Statistics&lt;/h2&gt;
  5986.  
  5987. &lt;ul&gt;&lt;li&gt;
  5988. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-05-09&amp;amp;chfieldto=2016-05-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5989. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-05-09&amp;amp;chfieldto=2016-05-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  5990. 46 pull requests merged into the language:
  5991.  
  5992. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-09..2016-05-15&quot;&gt;25 into DMD&lt;/a&gt;,
  5993. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-09..2016-05-15&quot;&gt;18 into Phobos&lt;/a&gt;, and
  5994. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-09..2016-05-15&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  5995. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-09..2016-05-15&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  5996. &lt;/li&gt;&lt;/ul&gt;
  5997.  
  5998. &lt;h2&gt;Major Changes&lt;/h2&gt;
  5999.  
  6000. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nh8v16$2qvc$1@digitalmars.com&quot;&gt;Beta D 2.071.1-b1&lt;/a&gt; was released this week, a bug fix dmd release.&lt;/p&gt;
  6001.  
  6002. &lt;h2&gt;In the community&lt;/h2&gt;
  6003.  
  6004. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6005.  
  6006. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mymkylkqyqtfpbmxnfyn@forum.dlang.org&quot;&gt;dxorshift: random number generators from the extended Xorshift family&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zvdhamqiazbvhmsomtis@forum.dlang.org&quot;&gt;Codebuilder with line info insertion&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ngsru2$13cb$1@digitalmars.com&quot;&gt;Looking for D developers, Saint-Petersburg&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/gadvnjanamgwetgritgz@forum.dlang.org&quot;&gt;Perl6 Unicode support&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/iqsooswefgxixwozyfku@forum.dlang.org&quot;&gt;dplug v3.0.0, added Audio Unit support&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jsqoyocouphjfwismtee@forum.dlang.org&quot;&gt;DustMite now has -j&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/psgqwrwfwmzkuczzzeoi@forum.dlang.org&quot;&gt;2DRPG - Small console game&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hsnyqafvvuupygsbvjab@forum.dlang.org&quot;&gt;To all DConf speakers: please upload slides!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rnzxxfvmeeytnvkmwcxj@forum.dlang.org&quot;&gt;Battle-plan for CTFE&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nha2ng$18a5$1@digitalmars.com&quot;&gt;Found on Reddit: Cache sizes with CPUID in C++ and D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nh8dik$1vk0$1@digitalmars.com&quot;&gt;[Semi OT] deadalnix inspires a C++ dependency-based coroutine scheduler&lt;/a&gt;
  6007. &lt;/li&gt;&lt;/ul&gt;
  6008.  
  6009. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6010.  
  6011. &lt;h3&gt;Notable threads&lt;/h3&gt;
  6012.  
  6013. &lt;p&gt;The case of &lt;a href=&quot;http://forum.dlang.org/post/nh2o9i$hr0$1@digitalmars.com&quot;&gt;autodecoding UTF in Phobos came up again&lt;/a&gt;, this time by Walter.&lt;/p&gt;
  6014.  
  6015. &lt;p&gt;The current behavior in Phobos is that it considers &lt;tt&gt;string&lt;/tt&gt; to be a range of &lt;tt&gt;dchar&lt;/tt&gt;, a UTF-32 value, despite &lt;tt&gt;string&lt;/tt&gt; being an array of &lt;tt&gt;char&lt;/tt&gt;, a UTF-8 value. The original thought was to make D Unicode correct by default, so algorithms would work on non-ASCII input automatically.&lt;/p&gt;
  6016.  
  6017. &lt;p&gt;The problem is that it it butchers performance in common cases, it confuses people over and over again, it complicates implementation of Phobos, and on top of it all, it doesn't actually lead to correct Unicode handling anyway!&lt;/p&gt;
  6018.  
  6019. &lt;p&gt;The current autodecoding behavior almost universally seen as a mistake; the debate is almost unanimous against the behavior. However, it is not clear that we will actually change the behavior out of fear of breaking code that depends on the current rules.&lt;/p&gt;
  6020.  
  6021. &lt;p&gt;Some also advocated for a new &lt;tt&gt;string&lt;/tt&gt; type that is built on &lt;tt&gt;immutable(char)[]&lt;/tt&gt; (currently string is just an alias for the array) but does not directly expose the array - instead, offering various ranges via getter functions. This would be a breaking change, but would offer a potential migration path and be an opportunity to educate users about Unicode.&lt;/p&gt;
  6022.  
  6023. &lt;p&gt;This debate has happened before, at least once last year too, with similar results - agreement that the design is a mistake, but no action taken to change it. I'll be surprised if this time is different, though since Andrei now seems to agree it was a mistake - but is hesitant to break code by changing it - perhaps we will figure out a transition path so everybody wins.&lt;/p&gt;
  6024.  
  6025. &lt;hr /&gt;
  6026.  
  6027. &lt;p&gt;Another thread - and another recurring issue - is &lt;a href=&quot;http://forum.dlang.org/thread/ngpk5o$2i21$1@digitalmars.com&quot;&gt;floating point&lt;/a&gt;. The thread started optimistically, with Walter bringing up a problem Don Clugston mentioned in his DConf talk this year, and considering adding a warning. However, the thread proceeded into talking about other floating point precision issues, an argument that has happened before and Walter does not agree.&lt;/p&gt;
  6028.  
  6029. &lt;p&gt;The precision issues, including consistency at runtime and CTFE and across machines, have a lot of proponents, though I don't think Walter understands their argument and until he does, there is no chance of change.&lt;/p&gt;
  6030.  
  6031. &lt;p&gt;The comparison issue in the OP may get a warning though.&lt;/p&gt;
  6032.  
  6033. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6034. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6035. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6036. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6037. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6038. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6039. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6040. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6041. &lt;/li&gt;&lt;/ul&gt;
  6042.  
  6043.  
  6044. &lt;/div&gt;
  6045. </description></item><item><title>Issue #70</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-may-08.html</link><guid>http://arsdnet.net/this-week-in-d/2016-may-08.html</guid><pubDate>Sun, 08 May 2016 12:00:00 GMT</pubDate><description>
  6046. &lt;div id=&quot;body-container&quot;&gt;
  6047. &lt;h1&gt;
  6048. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6049. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6050. &lt;span id=&quot;title-date&quot;&gt;May 8, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6051.  
  6052. &lt;div id=&quot;preface&quot;&gt;
  6053.  
  6054. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6055.  
  6056. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6057.  
  6058. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6059.  
  6060. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6061.  
  6062. &lt;/div&gt;
  6063.  
  6064. &lt;h2&gt;Statistics&lt;/h2&gt;
  6065.  
  6066. &lt;ul&gt;&lt;li&gt;
  6067. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-05-02&amp;amp;chfieldto=2016-05-08&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;18 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6068. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-05-02&amp;amp;chfieldto=2016-05-08&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6069. 54 pull requests merged into the language:
  6070.  
  6071. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-02..2016-05-08&quot;&gt;21 into DMD&lt;/a&gt;,
  6072. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-02..2016-05-08&quot;&gt;17 into Phobos&lt;/a&gt;, and
  6073. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-02..2016-05-08&quot;&gt;16 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6074. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-05-02..2016-05-08&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  6075. &lt;/li&gt;&lt;/ul&gt;
  6076.  
  6077. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6078.  
  6079. &lt;p&gt;DMD on Mac OS X will now use native TLS functionality, meaning it can link to C and C++ libraries. However, all existing D libraries must be recompiled, and it now requires OS X 10.7+.&lt;/p&gt;
  6080.  
  6081. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ovkhtsdzlfzqrqneolyv@forum.dlang.org&quot;&gt;It's alive! D building D building D, all on Android&lt;/a&gt; announces some exciting news - D on Android is progressing well!&lt;/p&gt;
  6082.  
  6083. &lt;h2&gt;DConf 2016&lt;/h2&gt;
  6084.  
  6085. &lt;p&gt;DConf 2016 already came and went this week! I was not able to attend in person, nor able to keep up with the live stream, so I will have to catch up over the next few weeks and write about my impressions on the talks as I get to them.&lt;/p&gt;
  6086.  
  6087. &lt;p&gt;IF you missed talks, you can &lt;a href=&quot;http://www.ustream.tv/channel/pR6fAWVkXzw&quot;&gt;watch the archive on ustream&lt;/a&gt;, or wait a few weeks for the edited high-def versions to come out. Tip: &lt;tt&gt;youtube-dl&lt;/tt&gt; works with ustream if you want to download the videos to watch in your own player, instead of ustream's Flash player.&lt;/p&gt;
  6088.  
  6089. &lt;p&gt;So far, the impressions I have gathered as take-away deliverables are:&lt;/p&gt;
  6090.  
  6091. &lt;ul&gt;&lt;li&gt; An officially sanctioned D blog will be started, to complement &lt;i&gt;This Week in D&lt;/i&gt;&lt;/li&gt;&lt;li&gt; The CTFE engine may be getting a rewrite.&lt;/li&gt;&lt;li&gt; They are going to try to clean up the forum to keep off-topic chatter isolated.&lt;/li&gt;&lt;li&gt; Berlin attracted the most attendees to DConf yet and is likely to host another in the future&lt;/li&gt;&lt;li&gt; Next year's DConf may be held in the eastern US, though the decision is still far off.
  6092. &lt;/li&gt;&lt;/ul&gt;
  6093.  
  6094. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/lbhyfncnvbwoqfcuvmby@forum.dlang.org&quot;&gt;thread in the forum&lt;/a&gt; is attracting users posting their favorite quotes, check it out!&lt;/p&gt;
  6095.  
  6096. &lt;p&gt;Twitter also got &lt;a href=&quot;https://twitter.com/search?q=%23dconf&amp;amp;src=typd&quot;&gt;a LOT of tweets and photos&lt;/a&gt; of the event, it is worth taking a look.&lt;/p&gt;
  6097.  
  6098. &lt;p&gt;I will return to summarize the talks in the coming weeks.&lt;/p&gt;
  6099.  
  6100. &lt;h2&gt;In the community&lt;/h2&gt;
  6101.  
  6102. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6103.  
  6104. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xusltnwcldwionlgdnon@forum.dlang.org&quot;&gt;GSoC 2016 - std.experimental.xml progress&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jcfwcdvvfytdkjrpdeld@forum.dlang.org&quot;&gt;GSoC 2016 - Precise GC&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/eenbxvkjsksddpbjbdjz@forum.dlang.org&quot;&gt;Adventures in D Programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tvkfnhywixutmhnhuqhp@forum.dlang.org&quot;&gt;vibe-s3: vibe compatible s3 client&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tgirsiiftztfdwtftbuz@forum.dlang.org&quot;&gt;Beta release DUB 0.9.25-beta.3&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gqlrvoujqovminrpilcd@forum.dlang.org&quot;&gt;D ebooks for $10&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ng94s2$fu3$1@digitalmars.com&quot;&gt;D Conference - use twitter #dconf to keep up to date&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/kozerigtxptfepkeiajs@forum.dlang.org&quot;&gt;C#7 features&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ngia2l$1pab$2@digitalmars.com&quot;&gt;DConf video news&lt;/a&gt;
  6105. &lt;/li&gt;&lt;/ul&gt;
  6106.  
  6107. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6108.  
  6109. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6110. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6111. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6112. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6113. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6114. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6115. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6116. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6117. &lt;/li&gt;&lt;/ul&gt;
  6118.  
  6119.  
  6120. &lt;/div&gt;
  6121. </description></item><item><title>Issue #69</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-may-01.html</link><guid>http://arsdnet.net/this-week-in-d/2016-may-01.html</guid><pubDate>Sun, 01 May 2016 12:00:00 GMT</pubDate><description>
  6122. &lt;div id=&quot;body-container&quot;&gt;
  6123. &lt;h1&gt;
  6124. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6125. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6126. &lt;span id=&quot;title-date&quot;&gt;May 01, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6127.  
  6128. &lt;div id=&quot;preface&quot;&gt;
  6129.  
  6130. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6131.  
  6132. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6133.  
  6134. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6135.  
  6136. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6137.  
  6138. &lt;/div&gt;
  6139.  
  6140. &lt;h2&gt;Statistics&lt;/h2&gt;
  6141.  
  6142. &lt;ul&gt;&lt;li&gt;
  6143. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-04-25&amp;amp;chfieldto=2016-05-01&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;16 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6144. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-04-25&amp;amp;chfieldto=2016-05-01&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6145. 60 pull requests merged into the language:
  6146.  
  6147. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-25..2016-05-01&quot;&gt;16 into DMD&lt;/a&gt;,
  6148. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-25..2016-05-01&quot;&gt;41 into Phobos&lt;/a&gt;, and
  6149. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-25..2016-05-01&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6150. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-25..2016-05-01&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  6151. &lt;/li&gt;&lt;/ul&gt;
  6152.  
  6153. &lt;h2&gt;DConf 2016&lt;/h2&gt;
  6154.  
  6155. &lt;p&gt;It was announced this week that DConf will be starting at 10:00 AM instead of 9:00 AM, like previously announced. See the &lt;a href=&quot;http://dconf.org/2016/schedule/&quot;&gt;up-to-date schedule&lt;/a&gt; for details.&lt;/p&gt;
  6156.  
  6157. &lt;h2&gt;In the community&lt;/h2&gt;
  6158.  
  6159. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6160.  
  6161. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nfpntb$kbl$1@digitalmars.com&quot;&gt;Beta release DUB 0.9.25-beta.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vnuknfqnlzzlxhzyfakc@forum.dlang.org&quot;&gt;LDC 1.0.0-beta1 has been released! Please help testing!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvcojnfustdtdavermon@forum.dlang.org&quot;&gt;Minecraft written in D - on Android&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rivvjmrqmhaacfwxwish@forum.dlang.org&quot;&gt;Commercial video processing app in D (experience report)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ymzgxeqqhccvndmhwfee@forum.dlang.org&quot;&gt;IDE - Coedit 2, update 5 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nfn2k3$1ru$1@digitalmars.com&quot;&gt;Web page listing all D compilers (and DMDFE version!) on travis-ci&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kdobdorqztlsomweftmi@forum.dlang.org&quot;&gt;xoroshiro128+ random number generator&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gczxpmyaqpxyuruxixel@forum.dlang.org&quot;&gt;LZ4 decompression at CTFE&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tyvtnbpqiyhxpotbdogw@forum.dlang.org&quot;&gt;Search dub via duckduckgo&lt;/a&gt;
  6162. &lt;/li&gt;&lt;/ul&gt;
  6163.  
  6164. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6165.  
  6166. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6167. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6168. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6169. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6170. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6171. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6172. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6173. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6174. &lt;/li&gt;&lt;/ul&gt;
  6175.  
  6176.  
  6177. &lt;/div&gt;
  6178. </description></item><item><title>Issue #68</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-apr-24.html</link><guid>http://arsdnet.net/this-week-in-d/2016-apr-24.html</guid><pubDate>Sun, 24 Apr 2016 12:00:00 GMT</pubDate><description>
  6179. &lt;div id=&quot;body-container&quot;&gt;
  6180. &lt;h1&gt;
  6181. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6182. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6183. &lt;span id=&quot;title-date&quot;&gt;April 24, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6184.  
  6185. &lt;div id=&quot;preface&quot;&gt;
  6186.  
  6187. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6188.  
  6189. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6190.  
  6191. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6192.  
  6193. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6194.  
  6195. &lt;/div&gt;
  6196.  
  6197. &lt;h2&gt;Statistics&lt;/h2&gt;
  6198.  
  6199. &lt;ul&gt;&lt;li&gt;
  6200. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-04-18&amp;amp;chfieldto=2016-04-24&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6201. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-04-18&amp;amp;chfieldto=2016-04-24&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6202. 44 pull requests merged into the language:
  6203.  
  6204. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-18..2016-04-24&quot;&gt;22 into DMD&lt;/a&gt;,
  6205. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-18..2016-04-24&quot;&gt;18 into Phobos&lt;/a&gt;, and
  6206. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-18..2016-04-24&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6207. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-18..2016-04-24&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  6208. &lt;/li&gt;&lt;/ul&gt;
  6209.  
  6210. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6211.  
  6212. &lt;p&gt;A patch was merged this week that allows subdirectories in string imports (&lt;tt&gt;import(&amp;quot;dir/file&amp;quot;);&lt;/tt&gt;) on Windows. It was already allowed on Linux, but prohibited on Windows. Now forward slashes are permitted on both platforms. The subdirectories must still be under the path passed with the &lt;tt&gt;-J&lt;/tt&gt; option to dmd.&lt;/p&gt;
  6213.  
  6214. subdirectories in windows
  6215.  
  6216. &lt;h2&gt;Google Summer of Code&lt;/h2&gt;
  6217.  
  6218. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/upbciesevquvbkkjwnex@forum.dlang.org&quot;&gt;Google Summer of Code selections were announced&lt;/a&gt; this week. D got four slots and work will progress on a std.xml replacement, dstep improvements, a precise GC with an aim for future enhancements, and a new random number generator for the D science libraries project.&lt;/p&gt;
  6219.  
  6220. &lt;h2&gt;DConf 2016&lt;/h2&gt;
  6221.  
  6222. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/amimxpzgjszdxecuqhaq@forum.dlang.org&quot;&gt;Live streaming of DConf 2016 is confirmed.&lt;/a&gt; The entire conference will be livestreamed and recorded.&lt;/p&gt;
  6223.  
  6224. &lt;h2&gt;In the community&lt;/h2&gt;
  6225.  
  6226. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6227.  
  6228. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ypptxwamjepseccbgxqe@forum.dlang.org&quot;&gt;IDE - Coedit 2, update 4 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/seoiaagjfdxedzibxeaa@forum.dlang.org&quot;&gt;Computer Vision Library in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kmzewloyxdfnpxsscqae@forum.dlang.org&quot;&gt;XDG-APP and D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nehmjrckjxjruesiwqfy@forum.dlang.org&quot;&gt;Sparse Tensors, Sparse BLAS, LDA - Mir v0.15.2 Release&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cdekkumjynhqoxvmgjze@forum.dlang.org&quot;&gt;DlangUI on Android&lt;/a&gt;
  6229. &lt;/li&gt;&lt;/ul&gt;
  6230.  
  6231. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6232.  
  6233. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  6234.  
  6235. &lt;p&gt;&lt;tt&gt;std.stdio&lt;/tt&gt; is somewhat infamous for reusing its buffer: a significant potential performance enhancement (and definitely a right choice to have available, but not necessarily a good choice for the default, considering how many new users trip up on this), but also something users need to be aware of in order to &lt;tt&gt;.dup&lt;/tt&gt; the buffer when needed.&lt;/p&gt;
  6236.  
  6237. &lt;p&gt;Well, &lt;tt&gt;std.stdio&lt;/tt&gt; is not the only place where mutable buffers cause a pitfall! &lt;tt&gt;std.zlib&lt;/tt&gt; does not overwrite a buffer you pass it... but it &lt;i&gt;does&lt;/i&gt; keep a reference to it, meaning YOU must not overwrite the buffer, or you will be liable to get an exception with the message &amp;quot;Data error&amp;quot;.&lt;/p&gt;
  6238.  
  6239. &lt;p&gt;The following code is what you might want to write, but it is wrong:&lt;/p&gt;
  6240.  
  6241. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio, std.zlib;
  6242. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; uncompress = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Uncompress();
  6243. &lt;font color=&quot;blue&quot;&gt;ubyte&lt;/font&gt;[] result;
  6244. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(chunk; stdin.byChunk)
  6245. result ~= uncompress.uncompress(chunk); &lt;font color=&quot;green&quot;&gt;// this is wrong!
  6246. &lt;/font&gt; result ~= uncompress.flush();
  6247. &lt;/pre&gt;
  6248.  
  6249. &lt;p&gt;It will work many times, but not every time. Since &lt;tt&gt;uncompress&lt;/tt&gt; keeps a pointer to the chunk (zlib may need more data than is available in the chunk, so &lt;tt&gt;uncompress&lt;/tt&gt; will hold the pointer to the existing chunk, expecting that it can append data from the next chunk to the existing chunk), overwriting the buffer in between loop iterations will corrupt the data...&lt;/p&gt;
  6250.  
  6251. &lt;p&gt;And since &lt;tt&gt;byChunk&lt;/tt&gt; will reuse its buffer, this seemingly elegant code is quite incorrect.&lt;/p&gt;
  6252.  
  6253. &lt;p&gt;The problem can be fixed by simply adding &lt;tt&gt;.dup&lt;/tt&gt; in the call to &lt;tt&gt;uncompress&lt;/tt&gt;.&lt;/p&gt;
  6254.  
  6255. &lt;p&gt;You may also want to just use the lower-level C functions yourself for maximum control and to avoid excess memory allocation and copying, or the top-level &lt;tt&gt;uncompress&lt;/tt&gt; instead of the classes - preloading everything at once may also be more efficient in some cases.&lt;/p&gt;
  6256.  
  6257. &lt;p&gt;But the general rule is to be careful with mutable buffers and slices! Library code may save it without informing you.&lt;/p&gt;
  6258.  
  6259. std.zlib and byChunk fail because byChunk modifies the buffer
  6260. and std.zlip actually holds on to a slice of it!!!!
  6261.  
  6262. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6263. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6264. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6265. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6266. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6267. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6268. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6269. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6270. &lt;/li&gt;&lt;/ul&gt;
  6271.  
  6272.  
  6273. &lt;/div&gt;
  6274. </description></item><item><title>Issue #67</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-apr-17.html</link><guid>http://arsdnet.net/this-week-in-d/2016-apr-17.html</guid><pubDate>Sun, 17 Apr 2016 12:00:00 GMT</pubDate><description>
  6275. &lt;div id=&quot;body-container&quot;&gt;
  6276. &lt;h1&gt;
  6277. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6278. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6279. &lt;span id=&quot;title-date&quot;&gt;April 17, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6280.  
  6281. &lt;div id=&quot;preface&quot;&gt;
  6282.  
  6283. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6284.  
  6285. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6286.  
  6287. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6288.  
  6289. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6290.  
  6291. &lt;/div&gt;
  6292.  
  6293. &lt;h2&gt;Statistics&lt;/h2&gt;
  6294.  
  6295. &lt;ul&gt;&lt;li&gt;
  6296. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-04-11&amp;amp;chfieldto=2016-04-17&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6297. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-04-11&amp;amp;chfieldto=2016-04-17&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6298. 55 pull requests merged into the language:
  6299.  
  6300. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-11..2016-04-17&quot;&gt;27 into DMD&lt;/a&gt;,
  6301. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-11..2016-04-17&quot;&gt;26 into Phobos&lt;/a&gt;, and
  6302. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-11..2016-04-17&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6303. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-11..2016-04-17&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  6304. &lt;/li&gt;&lt;/ul&gt;
  6305.  
  6306. &lt;h2&gt;In the community&lt;/h2&gt;
  6307.  
  6308. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6309.  
  6310. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wvzmemxnlmgeqrjqpvef@forum.dlang.org&quot;&gt;Mir v0.13.0: mir.combinatorics &amp;amp; mir.ndslice allocators/constructors/converters&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xqrzsziiaccvvdyzipfw@forum.dlang.org&quot;&gt;gelfd v1.3.0 - A native library to generate logs in the Graylog Extended Log Format (GELF).&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/neh3tp$6ov$1@digitalmars.com&quot;&gt;TECO - Inspiration for the D programming language&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nellat$eep$1@digitalmars.com&quot;&gt;Strange Loop Conference Call for Presentations&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/epjkkbbzdsxjlauzbmvy@forum.dlang.org&quot;&gt;Command line utilities for tab-separated value files&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yczuxfnxribrtcbzazva@forum.dlang.org&quot;&gt;Blog post: PGO: Optimizing D's virtual calls&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qyvkwgetnfpjrzxqndej@forum.dlang.org&quot;&gt;TTS Synthesis: D and vibe.d in Action&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mklmwtlicgphtsavwpzi@forum.dlang.org&quot;&gt;Official dub packages for Debian and Ubuntu&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hfxfetvblbzbscrtwnvl@forum.dlang.org&quot;&gt;IDE - Coedit 2, update 3 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kzmclpncjzqighguxrjr@forum.dlang.org&quot;&gt;mimeapps - finding association between MIME types and applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yiguvkubszjgddgjygef@forum.dlang.org&quot;&gt;Using D in Debian to build AppStream metadata.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kzfdxcezmitcafxmvusc@forum.dlang.org&quot;&gt;2k questions on SO&lt;/a&gt;
  6311. &lt;/li&gt;&lt;/ul&gt;
  6312.  
  6313. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6314.  
  6315. &lt;h2&gt;Editorial&lt;/h2&gt;
  6316.  
  6317. &lt;p&gt;A major thread on the forum this week had Andrei Alexandrescu saying &lt;a href=&quot;http://forum.dlang.org/thread/nepm2k$311l$1@digitalmars.com&quot;&gt;&amp;quot;inout must go&amp;quot;&lt;/a&gt;. He argues that it is too much complexity for too little gain.&lt;/p&gt;
  6318.  
  6319. &lt;p&gt;My opinion on &lt;tt&gt;inout&lt;/tt&gt; is actually that it &lt;b&gt;is&lt;/b&gt; worth it, though it could use some tweaks. Here, I'd like to explain the reasoning I use and go over some D features that I don't think are worth the hassle. Controversy! But, remember, like most the things in this publication, it is my opinion and I do not have say over the development of the D language.&lt;/p&gt;
  6320.  
  6321. &lt;p&gt;&lt;tt&gt;inout&lt;/tt&gt; does target a fairly small problem that can also be attacked with templates, indeed, but it also has a fairly small impact on code. It is used where you use it and has little impact on the rest of the program. Andrei did find a legitimate intersection with generated code: a template, like &lt;tt&gt;isInputRange&lt;/tt&gt; that takes an &lt;tt&gt;inout(T)[]&lt;/tt&gt; (let's call it &lt;tt&gt;R&lt;/tt&gt;) could potentially declare a local variable of type &lt;tt&gt;R&lt;/tt&gt;, which fails because one of the &lt;tt&gt;inout&lt;/tt&gt; rules precludes declaring an &lt;tt&gt;inout&lt;/tt&gt; local in a function without &lt;tt&gt;inout&lt;/tt&gt; params.&lt;/p&gt;
  6322.  
  6323. &lt;p&gt;That does suck. I'm not sure that rule carries its weight, exactly because this situation invades other code, though I actually believe &lt;tt&gt;isInputRange&lt;/tt&gt; is poorly implemented anyway. (I would love to see &lt;tt&gt;isInputRange&lt;/tt&gt; implemented in terms of a &lt;tt&gt;checkInputRange&lt;/tt&gt;, which is implemented with reflection primitives and returns an error report, but I digress.) But, the rest of &lt;tt&gt;inout&lt;/tt&gt; is limited in scope to where it helps.&lt;/p&gt;
  6324.  
  6325. &lt;p&gt;A specialized tool that only helps in a specific situation always looks useless when you are outside that situation, but as long as it doesn't &lt;i&gt;hinder&lt;/i&gt; you outside, the cost is fairly limited. Yes, some new reader might not know what it is upon first look, but they can learn. It is expected that a domain master will need to learn special tools to solve their problem, even when general purpose tools get the job done.&lt;/p&gt;
  6326.  
  6327. &lt;hr /&gt;
  6328.  
  6329. &lt;p&gt;When my truck's power steering failed last year, I set out to fix it with my general purpose tools. My wrench could remove the failed pump, though it took me a while. I improvised a pulley remover with a couple wrenches and a hammer. It worked, but it took me a while. When it was time to put everything back together, I couldn't get it done with my tools and purchased a cheap pusher for the one-time problem I saw myself facing. You might see the pattern now: it worked, but it took a while... almost ten hours of me trying to do this myself with my tools.&lt;/p&gt;
  6330.  
  6331. &lt;p&gt;Granted, I'm not experienced in motor vehicle repair either, but there was an enormous contrast when a friend of a friend who works in a garage showed me how he'd do the same repair: with a long socket set, he removed the pump in about two minutes, rather than the twenty I spent, and never banged his fingers under the hood. Then, using a professional pulley puller with a power driver (I don't recall exactly what the driver was), he replaced the component in a matter of minutes - the same thing that took me hours with my tools.&lt;/p&gt;
  6332.  
  6333. &lt;p&gt;The mechanic's professional tools cost hundreds of dollars, need to be used properly, and aren't terribly useful outside of working on cars. But, they save a LOT of time when you are in that situation they are designed for. The time and money the garage invested in these tools will be plenty worth it when they use it, able to fix a lot more cars - and make a lot more money - in the same time as their competitors without the proper tools.&lt;/p&gt;
  6334.  
  6335. &lt;hr /&gt;
  6336.  
  6337. &lt;p&gt;D tries to go a level deeper: it isn't just a collection of professional-grade tools, it is a collection of facilities to &lt;i&gt;create&lt;/i&gt; professional-grade tools. Its metaprogramming and modeling capabilities do not necessarily solve any problem directly, but you can use these capabilities to make more facilities to solve almost any problem that you come across.&lt;/p&gt;
  6338.  
  6339. &lt;p&gt;This view is what cements D's claim to be a general purpose systems programming language.&lt;/p&gt;
  6340.  
  6341. &lt;p&gt;But, at the same time, D seeks to be practical and convenient. Being able to make specialized tools for specialized tasks gives D power, but if you &lt;i&gt;have&lt;/i&gt; to &lt;i&gt;make&lt;/i&gt; specialized tools for &lt;i&gt;every&lt;/i&gt; task, it gets obnoxious. Common tasks have common solutions. In D, you can build classes out of structs and other pieces (and I think you should actually know how! it is useful to know the innards of any feature so you can reorganize the constituent blocks when the need arises), but they are also baked directly into the language with the &lt;tt&gt;class&lt;/tt&gt; keyword.&lt;/p&gt;
  6342.  
  6343. &lt;p&gt;Such &amp;quot;just works&amp;quot; features for common tasks are what anchor D as a practical and convenient modern language. But, if it is trivial to construct and to use already, is there a need for one? Oh, maybe, but probably not.&lt;/p&gt;
  6344.  
  6345. &lt;hr /&gt;
  6346.  
  6347. &lt;p&gt;Let's summarize my meandering thoughts into some bullet points to consider:&lt;/p&gt;
  6348.  
  6349. &lt;ul&gt;&lt;li&gt; Is there a general purpose tool &lt;i&gt;maker&lt;/i&gt; we can apply here?&lt;/li&gt;&lt;li&gt; Is it still easy to use if generalized?&lt;/li&gt;&lt;li&gt; Will the feature affect other code that isn't interested in it?&lt;/li&gt;&lt;li&gt; How will the feature intersect with other features?&lt;/li&gt;&lt;li&gt; How much help is it and how common is the scenario it attacks?
  6350. &lt;/li&gt;&lt;/ul&gt;
  6351.  
  6352. &lt;hr /&gt;
  6353.  
  6354. &lt;p&gt;Now, let's get back to &lt;tt&gt;inout&lt;/tt&gt; and apply these points:&lt;/p&gt;
  6355.  
  6356. &lt;p&gt;Is there a general purpose option? Yes: templates can do the same thing, as Andrei illustrated in the thread. Is it still easy to use? Well, to really get the same result, the templates must be constrained, the three options must be written out manually anyway in an interface, and overridden separately in child classes... so, there are important places where the answer is no.&lt;/p&gt;
  6357.  
  6358. &lt;p&gt;Does &lt;tt&gt;inout&lt;/tt&gt;'s existence affect code that isn't interested in it? Currently, yes, though it is fairly limited even now, and a tweak to the rules can change that. How does it intersect with other features? Well, honestly, I don't know for sure, but the fact that I can write 100,000 lines of code barely thinking about &lt;tt&gt;inout&lt;/tt&gt; outside the functions that use it is a really good sign.&lt;/p&gt;
  6359.  
  6360. &lt;p&gt;Finally, well, the question we should probably ask &lt;i&gt;first&lt;/i&gt;: how much of a help is it? I think it is pretty useful, frankly, I think it is &lt;tt&gt;const&lt;/tt&gt; that &lt;i&gt;works&lt;/i&gt;.&lt;/p&gt;
  6361.  
  6362. &lt;p&gt;&lt;tt&gt;const&lt;/tt&gt; in D is meant to bridge the gap between mutable and immutable - a function that can take either. But you cannot &lt;i&gt;return&lt;/i&gt; that view. Sure, you can take mutable or immutable, but that's all you can do: take it. You cannot do much else.&lt;/p&gt;
  6363.  
  6364. &lt;p&gt;Suppose you want to do some kind of property getter function:&lt;/p&gt;
  6365.  
  6366. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Item {
  6367. Item parent;
  6368. }
  6369. &lt;/pre&gt;
  6370.  
  6371. &lt;p&gt;Here, &lt;tt&gt;parent&lt;/tt&gt; is readable and writable to the public. You could make an item &lt;tt&gt;const&lt;/tt&gt; to make it nonwritable, but then you cannot call any mutation methods on it either. The simple solution is to do a property:&lt;/p&gt;
  6372.  
  6373. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Item {
  6374. &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; Item _parent;
  6375. Item parent() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; _parent; }
  6376. }
  6377. &lt;/pre&gt;
  6378.  
  6379. &lt;p&gt;Great! But now, if you have a &lt;tt&gt;const&lt;/tt&gt; item, you cannot call &lt;tt&gt;parent&lt;/tt&gt;. If you make it &lt;tt&gt;const&lt;/tt&gt;, you cannot call mutable methods on the &lt;tt&gt;parent&lt;/tt&gt;, even if the item itself is mutable.&lt;/p&gt;
  6380.  
  6381. &lt;p&gt;The answer? Some kind of mutability wildcard.... &lt;tt&gt;inout&lt;/tt&gt; does the job perfectly.&lt;/p&gt;
  6382.  
  6383. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Item {
  6384. &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; Item _parent;
  6385. &lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt;(Item) parent() &lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt; { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; _parent; }
  6386. }
  6387. &lt;/pre&gt;
  6388.  
  6389. &lt;p&gt;That works flawlessly - so flawlessly, that I have a hard time justifying ever writing &lt;tt&gt;const&lt;/tt&gt; methods when &lt;tt&gt;inout&lt;/tt&gt; is available. (&lt;tt&gt;const&lt;/tt&gt; function parameters are a different story, simply because there might be two parameters where only one is returned; only one parameter is the &lt;tt&gt;this&lt;/tt&gt;, if you will, and &lt;tt&gt;inout&lt;/tt&gt; makes the most sense on the &lt;tt&gt;this&lt;/tt&gt;. Other params can be plain &lt;tt&gt;const&lt;/tt&gt;, seen, but not changed.)&lt;/p&gt;
  6390.  
  6391. &lt;p&gt;A template here is clunky, but works (at least until inheritance comes in, but you can forward, so clunky.)&lt;/p&gt;
  6392.  
  6393. &lt;p&gt;&lt;b&gt;I think &lt;tt&gt;inout&lt;/tt&gt; is worth it when you want it. I want to keep it.&lt;/b&gt;&lt;/p&gt;
  6394.  
  6395. &lt;hr /&gt;
  6396.  
  6397. &lt;p&gt;So, I'm pro-&lt;tt&gt;inout&lt;/tt&gt;, but I promised to talk about features that I &lt;b&gt;don't&lt;/b&gt; feel are worth it. I hinted at a list in the forum thread, including: &lt;tt&gt;nothrow&lt;/tt&gt;, &lt;tt&gt;@nogc&lt;/tt&gt;, &lt;tt&gt;@safe&lt;/tt&gt;, and &lt;tt&gt;pure&lt;/tt&gt;.&lt;/p&gt;
  6398.  
  6399. &lt;p&gt;I actually think &lt;tt&gt;pure&lt;/tt&gt; is brilliant; on paper, I love it. But, in practice... I very rarely use it. And I often don't care, if you never use &lt;tt&gt;pure&lt;/tt&gt;, you don't worry that functions aren't marked &lt;tt&gt;pure&lt;/tt&gt;... until someone complains that I didn't use it, and they want to but can't because it is a viral attribute.&lt;/p&gt;
  6400.  
  6401. &lt;p&gt;This is one of the only things that make me want to say &amp;quot;D sux&amp;quot; as I write it:&lt;/p&gt;
  6402.  
  6403. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;pure&lt;/font&gt; @safe &lt;font color=&quot;blue&quot;&gt;nothrow&lt;/font&gt; @nogc &lt;font color=&quot;green&quot;&gt;// this line sucks!
  6404. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; add(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; b) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; a+b; } &lt;font color=&quot;green&quot;&gt;// this line is OK
  6405. &lt;/font&gt;&lt;/pre&gt;
  6406.  
  6407. &lt;p&gt;When writing this function, I don't care about any of those attributes. I don't need the compiler to verify those things, the function is simple enough that I can eyeball it easily. (This is an unrealistically simple function, but there are quite a lot of real functions like this too: my color.d has a lot of trivial functions, complicated by all the attributes added just for OTHER users.)&lt;/p&gt;
  6408.  
  6409. &lt;p&gt;When writing a complex function, these attributes may be useful, but they spread. Massive failure on bullet #3 of my list: it is very intrusive on code that just doesn't care.&lt;/p&gt;
  6410.  
  6411. &lt;p&gt;Changing the defaults could change this calculus, sometimes. Is &lt;tt&gt;pure&lt;/tt&gt; a case of this? If it were the default, undecorated functions would not be allowed to access global variables nor call functions marked &lt;tt&gt;impure&lt;/tt&gt;.&lt;/p&gt;
  6412.  
  6413. &lt;p&gt;if you make a function &lt;tt&gt;impure&lt;/tt&gt;, it can do whatever it wants; it &lt;i&gt;releases&lt;/i&gt; this individual function from the requirements. You do that because you have some specific reason, in your own implementation, to do it. That reason might be calling another impure function or accessing a global variable, but it is something you or someone else deliberately wrote - and can reconsider.&lt;/p&gt;
  6414.  
  6415. &lt;p&gt;It isn't failing just because some other programmer didn't add a totally irrelevant item to her or his function (which may not have even existed in the language at the time the function was written!). It is failing because of some conscious decision.&lt;/p&gt;
  6416.  
  6417. &lt;p&gt;Problem is: it would still kinda suck that it would bubble ALL the way to &lt;tt&gt;main&lt;/tt&gt; if you ever used a single impure function, anywhere in the program. (to be honest, I think while &lt;tt&gt;pure&lt;/tt&gt; by default makes it far more useful, an exception should actually be made for &lt;tt&gt;main&lt;/tt&gt;, which would logically be impure by default as the root of any call tree - virtually ANY program is going to have an impure &lt;tt&gt;main&lt;/tt&gt; to do I/O and writing it every time feels silly. &lt;tt&gt;main&lt;/tt&gt; is a special function anyway, so I don't feel bad putting special rules on it against other defaults.)&lt;/p&gt;
  6418.  
  6419. &lt;p&gt;But, while there'd be a trunk all the way up of &lt;tt&gt;impure&lt;/tt&gt;, huge swaths of a program are still &lt;tt&gt;pure&lt;/tt&gt;, and using it by default gives you the benefits it promises without affecting most code that just doesn't care.&lt;/p&gt;
  6420.  
  6421. &lt;p&gt;&lt;tt&gt;pure&lt;/tt&gt; in its current form, while beautiful in so many ways, sucks because I have to write it when I don't care just in case someone, somewhere, at some time, might care.&lt;/p&gt;
  6422.  
  6423. &lt;hr /&gt;
  6424.  
  6425. &lt;p&gt;&lt;tt&gt;@safe&lt;/tt&gt; is in a very similar boat: as it sits now, you have to write it all over, even when you just don't care. It affects all kinds of things outside the field it aims to help - failing my definition of a good specialized tool. But, if it were the default, the tables would turn, and thanks to &lt;tt&gt;@trusted&lt;/tt&gt;, you can stop the bubbling up at any time (and if written correctly, you maintain the promise of @safe)!&lt;/p&gt;
  6426.  
  6427. &lt;p&gt;I currently don't care about &lt;tt&gt;@safe&lt;/tt&gt; - I tend to write D like C or C++ in this area - but sometimes I HAVE to list the annoying attributes for the future. If it was the default, I'd just add &lt;tt&gt;@trusted&lt;/tt&gt; somewhere and actually pay attention it. My code would probably be better... and probably shorter.&lt;/p&gt;
  6428.  
  6429. &lt;p&gt;I'd be &lt;b&gt;pro-&lt;tt&gt;@safe&lt;/tt&gt;, iff it is by default&lt;/b&gt;. It sux now, but doesn't have to suck.&lt;/p&gt;
  6430.  
  6431. &lt;hr /&gt;
  6432.  
  6433. &lt;p&gt;&lt;tt&gt;nothrow&lt;/tt&gt;... meh. I don't like writing &lt;tt&gt;nothrow&lt;/tt&gt; on functions that I write, because I don't care, but the good thing is &lt;tt&gt;nothrow&lt;/tt&gt; isn't as viral as &lt;tt&gt;pure&lt;/tt&gt;: yes, it has a &lt;tt&gt;@trusted&lt;/tt&gt; analog: &lt;tt&gt;try {} catch(Exception e) {}&lt;/tt&gt;! Yes, just wrap it and catch any exceptions and you can still use &lt;tt&gt;nothrow&lt;/tt&gt; with my functions.&lt;/p&gt;
  6434.  
  6435. &lt;p&gt;So yeah, &lt;tt&gt;nothrow&lt;/tt&gt; is meh but I don't hate it enough to remove it. I most certainly do NOT support making it default though: exceptions are a REALLY useful thing and I use them basically everywhere. If I had to write &lt;tt&gt;throws&lt;/tt&gt; everywhere (and make no mistake, that'd be viral all the way up to main), I'd fork the language.&lt;/p&gt;
  6436.  
  6437. &lt;hr /&gt;
  6438.  
  6439. &lt;p&gt;&lt;tt&gt;@nogc&lt;/tt&gt;, oh, &lt;tt&gt;@nogc&lt;/tt&gt;. I hate you. My view is that it is a worthless attribute that gets its viral tentacles all over unrelated code for no real benefit, and I think it was added purely for marketing purposes - without even thinking it through, much less actually doing the extreme tedium of making it work by marking every function that exists and might possibly be valid with the attribute.&lt;/p&gt;
  6440.  
  6441. &lt;p&gt;Inference on templates lightens the pain... slightly. Very slightly, it still sucks, even in template heavy code.&lt;/p&gt;
  6442.  
  6443. &lt;p&gt;Mind you, &lt;b&gt;writing D that avoids the GC is easy&lt;/b&gt;, but writing D that uses &lt;tt&gt;@nogc&lt;/tt&gt; is hard. It is very easy to verify no GC calls with runtime tests, which you should be doing anyway with performance sensitive code - test first before doing intrusive optimizations. (BTW, easy optimizations are easy, just do them. But hard optimizations should be focused where you need them, and determining where you need them is a job for runtime profiling.)&lt;/p&gt;
  6444.  
  6445. &lt;p&gt;&lt;tt&gt;@nogc&lt;/tt&gt;, on the other hand, has a lot of false positives. Any little function someone writes but doesn't aggressively annotate will trigger a compile failure - and you can't work around it with things like &lt;tt&gt;@trusted&lt;/tt&gt; or &lt;tt&gt;catch&lt;/tt&gt;. Great library doing great work, but its author didn't care for writing the attribute quad for no immediate gain? Sorry, you are locked out unless you kill @nogc from your whole call chain now.&lt;/p&gt;
  6446.  
  6447. &lt;p&gt;What if it was the default? Changing defaults would save &lt;tt&gt;pure&lt;/tt&gt; and &lt;tt&gt;@safe&lt;/tt&gt;, so what about &lt;tt&gt;@nogc&lt;/tt&gt;? Nope, now the typical program is going to be saying &lt;tt&gt;@gc&lt;/tt&gt; EVERYWHERE, all the way up all the call chains for any time you use any of the allocating functions - even if they only do on a very rare branch that you don't care about in your performance profile. So much for practical and convenient.&lt;/p&gt;
  6448.  
  6449. &lt;p&gt;Besides, both &lt;tt&gt;@nogc&lt;/tt&gt; and a hypothetical &lt;tt&gt;@gc&lt;/tt&gt; unfairly singles out the built-in garbage collector as a scary thing. I'm not going to pretend that D's garbage collector is a great implementation. It isn't. But it is good enough for a LOT of things and far from the only pitfall in a performance-sensitive program.&lt;/p&gt;
  6450.  
  6451. &lt;p&gt;What about computational complexity? Or just a plain old slow function? Or blocking I/O? Or some library allocator with similar pitfalls to the built-in GC? The list goes on and on: writing a well-performing function under your circumstances may be trivial or it may be hard. In neither case is &lt;tt&gt;@nogc&lt;/tt&gt; likely to be a panacea, or even much of a help relative to runtime profiling.&lt;/p&gt;
  6452.  
  6453. &lt;p&gt;&lt;tt&gt;@nogc&lt;/tt&gt; also fails on the intersection angle: other language features just don't jive well with its strict static interpretation. Yes, again, using D without the GC isn't really hard. If you want to do that with your program, you easily can... but you do need to know some kind of allocation scheme for a great many tasks.&lt;/p&gt;
  6454.  
  6455. &lt;p&gt;If you throw an exception without the GC, easy, just remember to free it when you catch it. You can do array appends with library containers. You can make your own delegates with functors and the such. But, all of these aren't solved by &amp;quot;I will not use the GC&amp;quot;, but rather by &amp;quot;I will use this technique instead&amp;quot;. This *specific* technique instead: your catch blocks will know to call free. Your delegate-receiving functions will promise to just borrow, or else be changed to take a self-contained object.&lt;/p&gt;
  6456.  
  6457. &lt;p&gt;You need an active solution to memory management somehow. Even if you decide that you just won't allocate memory, you've gotta write the program with that in mind.&lt;/p&gt;
  6458.  
  6459. &lt;p&gt;&lt;tt&gt;@nogc&lt;/tt&gt; fails on three of my bullets: it affects code that doesn't care, in intersects poorly with other language features, needing an active solution not just a prohibition, and it isn't really of that much help in performance.&lt;/p&gt;
  6460.  
  6461. &lt;p&gt;But, what about the general purpose tool maker? This might be what irks me the most: instead of @nogc, I'd actually prefer to have our own attribute definition and function checkers, then @nogc could just be a library artifact using that general purpose metaprogramming facility. Then, we could use the same thing for computational complexity, or blocking I/O, or whatever other problem of the week we cross in the future. (I'd probably still say it sucks if people asked me to write a hundred custom attributes on all my leaf functions to account for their higher up trees, but at least there'd be more potential behind it.)&lt;/p&gt;
  6462.  
  6463. &lt;p&gt;A general purpose &lt;tt&gt;@nogc&lt;/tt&gt; seems possible to me, then it might be more interesting. But still, ugh.&lt;/p&gt;
  6464.  
  6465. &lt;hr /&gt;
  6466.  
  6467. &lt;p&gt;Finally time to wrap this up. My take: &lt;tt&gt;inout&lt;/tt&gt; must stay. It makes &lt;tt&gt;const&lt;/tt&gt; useful. &lt;tt&gt;pure&lt;/tt&gt; and &lt;tt&gt;@safe&lt;/tt&gt; should be the default, it'd make them useful when you don't care, though in the case of &lt;tt&gt;pure&lt;/tt&gt;, &lt;tt&gt;impure&lt;/tt&gt; might end up being the new thing to hate. &lt;tt&gt;nothrow&lt;/tt&gt; is meh, take it or leave it. &lt;tt&gt;@nogc&lt;/tt&gt; must go.&lt;/p&gt;
  6468.  
  6469. &lt;p&gt;But, my final opinion isn't as important as you applying your own reasoning to things when making feature proposals - to remove or to add. Consider the value of specialized tools for special purposes. Consider the costs of them creeping into other people's code when they won't benefit that programmer. Consider generalization, but never forget practicality and convenience.&lt;/p&gt;
  6470.  
  6471. &lt;p&gt;Only after weighing ALL of these things, and surely more things too, should we make a real decision. A smart language may trim features, yes, but minimal is not automatically smart.&lt;/p&gt;
  6472.  
  6473.  
  6474.  
  6475.  
  6476. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6477. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6478. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6479. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6480. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6481. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6482. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6483. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6484. &lt;/li&gt;&lt;/ul&gt;
  6485.  
  6486.  
  6487. &lt;/div&gt;
  6488. </description></item><item><title>Issue #66</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-apr-10.html</link><guid>http://arsdnet.net/this-week-in-d/2016-apr-10.html</guid><pubDate>Sun, 10 Apr 2016 12:00:00 GMT</pubDate><description>
  6489. &lt;div id=&quot;body-container&quot;&gt;
  6490. &lt;h1&gt;
  6491. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6492. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6493. &lt;span id=&quot;title-date&quot;&gt;April 10, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6494.  
  6495. &lt;div id=&quot;preface&quot;&gt;
  6496.  
  6497. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6498.  
  6499. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6500.  
  6501. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6502.  
  6503. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6504.  
  6505. &lt;/div&gt;
  6506.  
  6507. &lt;h2&gt;Statistics&lt;/h2&gt;
  6508.  
  6509. &lt;ul&gt;&lt;li&gt;
  6510. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-04-04&amp;amp;chfieldto=2016-04-10&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6511. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-04-04&amp;amp;chfieldto=2016-04-10&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;41 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6512. 50 pull requests merged into the language:
  6513.  
  6514. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-04..2016-04-10&quot;&gt;16 into DMD&lt;/a&gt;,
  6515. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-04..2016-04-10&quot;&gt;24 into Phobos&lt;/a&gt;, and
  6516. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-04..2016-04-10&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6517. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-04-04..2016-04-10&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  6518. &lt;/li&gt;&lt;/ul&gt;
  6519.  
  6520. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6521.  
  6522. &lt;p&gt;&lt;a href=&quot;http://dlang.org/changelog/2.071.0.html&quot;&gt;DMD 2.071.0 was released&lt;/a&gt; this week, bringing fixes to long-standing import and privacy bugs, along wit some performance releases and various other bug fixes.&lt;/p&gt;
  6523.  
  6524. &lt;p&gt;See &lt;a href=&quot;http://forum.dlang.org/thread/nde6p7$23ah$1@digitalmars.com&quot;&gt;this blog article on the new import changes&lt;/a&gt; to better understand what the import changes mean.&lt;/p&gt;
  6525.  
  6526. &lt;p&gt;In the library, a &lt;tt&gt;clear&lt;/tt&gt; method was finally added to associative arrays too.&lt;/p&gt;
  6527.  
  6528. &lt;p&gt;The dmd team has also started using &lt;a href=&quot;http://dlang.org/dmd-prerelease/aav.html&quot;&gt;ddoc on dmd itself&lt;/a&gt; in an effort to better document the source code so it is more approachable to new users.&lt;/p&gt;
  6529.  
  6530.  
  6531. &lt;h2&gt;In the community&lt;/h2&gt;
  6532.  
  6533. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6534.  
  6535. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ne11a5$184l$1@digitalmars.com&quot;&gt;gchunt v0.2.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mailman.1074.1459948195.26339.digitalmars-d-announce@puremagic.com&quot;&gt;New deb packages on d-apt&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/oyuptanfwfqjijbdjvzi@forum.dlang.org&quot;&gt;simpledisplay.d and terminal.d breaking change&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ne47dm$2hdp$1@digitalmars.com&quot;&gt;DConf 2016 registrations have now hit 128!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/neb9sc$uen$1@digitalmars.com&quot;&gt;OSCON London call for submissions&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ulmqoppjqcageikkyyjw@forum.dlang.org&quot;&gt;Graylog Extended Log Format (GELF) for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pksjpkdrjdcjjwfjvklx@forum.dlang.org&quot;&gt;vibe.d kafka driver &amp;amp; probabilistic linear counting&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mxywquznylbqmgfdrzwy@forum.dlang.org&quot;&gt;New repo for my reusable D Phobos extensions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6536. &lt;a href=&quot;http://forum.dlang.org/thread/ne1fd0$1r10$1@digitalmars.com&quot;&gt;Release D 2.071.0&lt;/a&gt;
  6537. &lt;/li&gt;&lt;/ul&gt;
  6538.  
  6539. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6540.  
  6541. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  6542.  
  6543. &lt;p&gt;This week, I want to talk about techniques to decouple programs and minimize dependencies in D. Five techniques come to mind:&lt;/p&gt;
  6544.  
  6545. &lt;p&gt;Java-style &lt;b&gt;interfaces&lt;/b&gt; are available if your code fits static substitution well. With interfaces, you need to define a list of methods that you depend on inside the interface. Then, you write functions that take objects that statically fulfill this interface. User code can define other object that fulfil the same interface and are thus usable by your code, without your code necessarily being aware of any particular implementation.&lt;/p&gt;
  6546.  
  6547. &lt;p&gt;This decouples your code from it dependencies in that it doesn't have to be aware of their existence... but the dependencies are not entirely decoupled from your program: the static nature of interfaces need the dependency must import your module, or both your module and the other module must import the same third module that defines the interface; somehow, both sides of the program need to be aware that they may *potentially* be used together.&lt;/p&gt;
  6548.  
  6549. &lt;p&gt;Well, that's not exactly true: actually, an interface can be implemented on-the-fly by a third party module via wrappers. D has anonymous classes that you can define inline to simply wrap a list of functions to implement an interface. But, nevertheless, the implementation and interface still need to be tied somehow.&lt;/p&gt;
  6550.  
  6551. &lt;p&gt;If you want to avoid the static interface and have two modules that have no idea that they have any relation at all to anything in common, a similar, but less structured alternative to interfaces are functions that take &lt;b&gt;delegates&lt;/b&gt;.&lt;/p&gt;
  6552.  
  6553. &lt;p&gt;A delegate is a language-packed data pointer and function. You can create them from objects by taking the address of a method, or you can create them from other functions, or you can define them inline with anonymous functions.&lt;/p&gt;
  6554.  
  6555. &lt;p&gt;You can write a function to take one or more delegates, then your user functions pass their own implementations to it. Your code doesn't know what user code is passed in, but you can use it all. Combined with default implementations, you can make a hookable function that users can easily modify.&lt;/p&gt;
  6556.  
  6557. &lt;p&gt;This isn't really much different than interfaces though, except that with interfaces, a group of delegates are tied together into a static entity (and they all must have the same data context pointer). They key difference though is that there's no static name that needs to be shared:&lt;/p&gt;
  6558.  
  6559. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; a;
  6560.  
  6561. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; a(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;() dg);
  6562. &lt;font color=&quot;green&quot;&gt;/////
  6563. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; b;
  6564.  
  6565. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; b(&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt;() dg);
  6566. &lt;font color=&quot;green&quot;&gt;/////
  6567. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; c;
  6568.  
  6569. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; impl() {
  6570. a( { } );
  6571. b( { } );
  6572. }
  6573. &lt;/pre&gt;
  6574.  
  6575. &lt;p&gt;Here, module C can be compatible with module a and b, despite there being no shared types at all between modules a and b. This code compiles as is. By contrast, with interfaces:&lt;/p&gt;
  6576.  
  6577. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; a;
  6578. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; a(SomeInterface obj);
  6579. &lt;font color=&quot;green&quot;&gt;//////
  6580. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; b;
  6581. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; b(SomeInterface obj);
  6582. &lt;font color=&quot;green&quot;&gt;//////
  6583. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; c;
  6584.  
  6585. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; impl() {
  6586. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; SomeInterface {
  6587. &lt;font color=&quot;green&quot;&gt;// implementation
  6588. &lt;/font&gt; }&lt;/pre&gt;;
  6589. }
  6590. )
  6591.  
  6592. &lt;p&gt;That code will not compile because SomeInterface is not defined. &lt;i&gt;All&lt;/i&gt; three modules will have to import another module that define &lt;tt&gt;SomeInterface&lt;/tt&gt; - and it must be the &lt;i&gt;same&lt;/i&gt; module imported from all three. Thus, while the interface is more implicit, it comes with the cost of needing a static definition shared - at least a little coupling tiny between module a and b with some third module, whereas with delegates, they don't even need that.&lt;/p&gt;
  6593.  
  6594. &lt;div class=&quot;tip&quot;&gt; &lt;p&gt;Even with delegates, there might be a need for a third definition module for shared data structures. You can avoid this by decomposing all data into basic types in the delegates, but this is a bit of a pain too.&lt;/p&gt;
  6595.  
  6596. &lt;p&gt;But, this third definition module may not be wanted either - you might actually prefer to redefine simple structs. For example, &lt;tt&gt;struct Point { int x; int y; }&lt;/tt&gt; is simple enough to define twice, but if you do, module A's &lt;tt&gt;Point&lt;/tt&gt; will NOT be directly compatible with module B's &lt;tt&gt;Point&lt;/tt&gt; - passing b.Point to a function expecting a.Point will give an error message like &lt;tt&gt;arguments (Point) are not compatible with expected type (Point)&lt;/tt&gt; (yes, the compiler will use the same text for the two different types, it can be very confusing and hopefully will one day be fixed).&lt;/p&gt;
  6597.  
  6598. &lt;p&gt;You'll need a trick to convert these two types between each other... and I have one! Use &lt;tt&gt;obj.tupleof&lt;/tt&gt;. If the two objects have the same binary layout, then &lt;tt&gt;a.tupleof = b.tupleof;&lt;/tt&gt; will compile! You can also construct it: &lt;tt&gt;A(b.tupleof)&lt;/tt&gt; and convert types that don't know about each other but happen to match.&lt;/p&gt;
  6599. &lt;/div&gt;
  6600.  
  6601. &lt;p&gt;Interfaces and delegates have parallels in other languages. D has some more unique things too, starting with &lt;b&gt;duck-typed templates&lt;/b&gt;. These templates do not check their semantics until someone tries to use them with a specific type: the definition module needs to know absolutely nothing about the user code. The downside, of course, is that user code can cause compile errors inside your code - the compiler doesn't help much with checking correctness ahead of time.&lt;/p&gt;
  6602.  
  6603. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; a;
  6604. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; a(T)(T t) {
  6605. t.something;
  6606. }
  6607. &lt;font color=&quot;green&quot;&gt;/////
  6608. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; b;
  6609. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; a;
  6610. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; impl() {
  6611. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; T {
  6612. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; something() {}
  6613. }
  6614. T obj;
  6615. a(obj);
  6616. }
  6617. &lt;/pre&gt;
  6618.  
  6619. &lt;p&gt;This is even looser than the delegates - you don't need to define all of them in the argument list, you just write the code and let the compiler figure it out later. It isn't a new capability (C++ can do it too, as can dynamic languages), but can be more concise than the delegate list and avoids the third module of the interface definition.&lt;/p&gt;
  6620.  
  6621. &lt;p&gt;I think this goes too far though: it is too easy to mess it up. A reason why I like to decouple programs is to minimize dependencies, but when two modules are supposed to be able to work together (without NEEDING to be used together). It is possible that another module would use my hooks too, but the main reason I make it hookable is actually for my own use, without forcing extra modules on the user when they don't need it.&lt;/p&gt;
  6622.  
  6623. &lt;p&gt;As I have written about before, if you use &lt;b&gt;local imports inside the template&lt;/b&gt;, the compiler will still let you reference its types.. but the import is processed only if the user tries to use the template so it is instantiated. With this technique, you can get checks on your own modules while being flexible for the end user.&lt;/p&gt;
  6624.  
  6625. &lt;p&gt;The last trick is if you want two modules to stand alone, but also work together. The exact case in my mind are getting &lt;tt&gt;simpledisplay.d&lt;/tt&gt; and &lt;tt&gt;terminal.d&lt;/tt&gt; to have an integrated event loop... without introducing a dependency between them. The simplest solution is to have a third module holding the event loop implementation that is imported by both. But, a big selling point of both these modules is that they don't need extra imports; they stand alone. So, I can't have a third module.. but I could use an interface or delegates for the event loop hooks in one module, and a lazy import to automatically hook it up together if needed.&lt;/p&gt;
  6626.  
  6627. &lt;hr /&gt;
  6628.  
  6629. &lt;p&gt;It can be extra work in the short term to decouple your software. Sometimes, even more work in the long term, but it has other benefits: your users aren't caught in your dependency web and you aren't caught in a dependency web, so you can change things out without as much worry about breaking unrelated things. Besides, a lot of programmers just prefer using smaller pieces to build their customized whole, and a lot prefer to use a pre-fabricated framework. With a mix of D's techniques like interfaces, delegates, and templates, you can cater to both groups well.&lt;/p&gt;
  6630.  
  6631. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6632. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6633. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6634. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6635. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6636. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6637. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6638. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6639. &lt;/li&gt;&lt;/ul&gt;
  6640.  
  6641.  
  6642. &lt;/div&gt;
  6643. </description></item><item><title>Issue #65</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-apr-03.html</link><guid>http://arsdnet.net/this-week-in-d/2016-apr-03.html</guid><pubDate>Sun, 03 Apr 2016 12:00:00 GMT</pubDate><description>
  6644. &lt;div id=&quot;body-container&quot;&gt;
  6645. &lt;h1&gt;
  6646. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6647. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6648. &lt;span id=&quot;title-date&quot;&gt;April 3, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6649.  
  6650. &lt;div id=&quot;preface&quot;&gt;
  6651.  
  6652. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6653.  
  6654. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6655.  
  6656. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6657.  
  6658. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6659.  
  6660. &lt;/div&gt;
  6661.  
  6662. &lt;h2&gt;Statistics&lt;/h2&gt;
  6663.  
  6664. &lt;ul&gt;&lt;li&gt;
  6665. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-03-28&amp;amp;chfieldto=2016-04-03&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6666. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-03-28&amp;amp;chfieldto=2016-04-03&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6667. 50 pull requests merged into the language:
  6668.  
  6669. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-28..2016-04-03&quot;&gt;28 into DMD&lt;/a&gt;,
  6670. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-28..2016-04-03&quot;&gt;20 into Phobos&lt;/a&gt;, and
  6671. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-28..2016-04-03&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6672. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-28..2016-04-03&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  6673. &lt;/li&gt;&lt;/ul&gt;
  6674.  
  6675. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6676.  
  6677. &lt;p&gt;Implemented a few weeks ago and in the new beta are some import changes.Contributor Steven Schveighoffer wrote a
  6678. &lt;a href=&quot;http://forum.dlang.org/thread/nde6p7$23ah$1@digitalmars.com&quot;&gt;blog article on the new import changes&lt;/a&gt; to better understand what it mean.&lt;/p&gt;
  6679.  
  6680. &lt;h2&gt;DConf 2016&lt;/h2&gt;
  6681.  
  6682. &lt;p&gt;This week, &lt;a href=&quot;http://forum.dlang.org/thread/ndbmff$d6a$1@digitalmars.com&quot;&gt;DConf 2016 announces programme, general registration opened thrugh April 22&lt;/a&gt;&lt;/p&gt;
  6683.  
  6684. &lt;p&gt;Among the topics announced on day one are multitasking, modules, D in a AAA game, embedded targets, and the &lt;tt&gt;inout&lt;/tt&gt; keyword.&lt;/p&gt;
  6685.  
  6686. &lt;p&gt;Among the topics for day two are D internals, floating point, D in a scalable storage system, &lt;tt&gt;export&lt;/tt&gt; in DLLs, web programming, bit packing, and process and build systems.&lt;/p&gt;
  6687.  
  6688. &lt;p&gt;Day three will include a keynote about Sociomantic, obscure D secrets, ORM, std.database, GPU use, and CPU design.&lt;/p&gt;
  6689.  
  6690. &lt;p&gt;All three days also have group interviews or lightning talk at the end.&lt;/p&gt;
  6691.  
  6692. &lt;p&gt;It is also expected that all talks will be livestreamed and recorded, but the most interesting discussions may happen after the talks at the conference and those will only be for those who are attending!&lt;/p&gt;
  6693.  
  6694. &lt;h2&gt;Google Summer of Code&lt;/h2&gt;
  6695.  
  6696. &lt;p&gt;We started reviewing the Google Summer of Code student submissions this week. From over 30 submissions we will work it down to a handful of high-quality, best-impact projects. More to come.&lt;/p&gt;
  6697.  
  6698. &lt;h2&gt;In the community&lt;/h2&gt;
  6699.  
  6700. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6701.  
  6702. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xnqazcivzbwlpmbymnze@forum.dlang.org&quot;&gt;mir.las.sum&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bejywyvrupobdgpybszd@forum.dlang.org&quot;&gt;dateparser hits 1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nneyliyxddflcnlpjjft@forum.dlang.org&quot;&gt;libotr native D port&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wbojczxuddghmblxyqji@forum.dlang.org&quot;&gt;Article on Introspective programming&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vyyngrqjsnguynofsocn@forum.dlang.org&quot;&gt;mir.combinatorics: reviewers and ideas are wanted&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vqndnkuppcvkihuajjza@forum.dlang.org&quot;&gt;simple VFS implementation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uanlxwpucxlwbpogrimi@forum.dlang.org&quot;&gt;Weak Purity Blog Post&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/urhwhooatjmsyzfebpvs@forum.dlang.org&quot;&gt;Small rdmd wrapper for windows&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/eryphpbznrrovjvxjisy@forum.dlang.org&quot;&gt;Graylog integration for std.experimental.logger&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gzadzpruscmrbbyotqfx@forum.dlang.org&quot;&gt;Typed D allocators based on Google Thread caching memory allocators&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yhqltiatrdivnewiikfy@forum.dlang.org&quot;&gt;Units of Measurement Library: units-d&lt;/a&gt;
  6703. &lt;/li&gt;&lt;/ul&gt;
  6704.  
  6705. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6706.  
  6707. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6708. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6709. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6710. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6711. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6712. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6713. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6714. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6715. &lt;/li&gt;&lt;/ul&gt;
  6716.  
  6717.  
  6718. &lt;/div&gt;
  6719. </description></item><item><title>Issue #64</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-mar-27.html</link><guid>http://arsdnet.net/this-week-in-d/2016-mar-27.html</guid><pubDate>Sun, 27 Mar 2016 12:00:00 GMT</pubDate><description>
  6720. &lt;div id=&quot;body-container&quot;&gt;
  6721. &lt;h1&gt;
  6722. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6723. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6724. &lt;span id=&quot;title-date&quot;&gt;March 27, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6725.  
  6726. &lt;div id=&quot;preface&quot;&gt;
  6727.  
  6728. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6729.  
  6730. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6731.  
  6732. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6733.  
  6734. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6735.  
  6736. &lt;/div&gt;
  6737.  
  6738. &lt;h2&gt;Statistics&lt;/h2&gt;
  6739.  
  6740. &lt;ul&gt;&lt;li&gt;
  6741. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-03-21&amp;amp;chfieldto=2016-03-27&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;18 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6742. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-03-21&amp;amp;chfieldto=2016-03-27&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6743. 57 pull requests merged into the language:
  6744.  
  6745. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-21..2016-03-27&quot;&gt;27 into DMD&lt;/a&gt;,
  6746. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-21..2016-03-27&quot;&gt;19 into Phobos&lt;/a&gt;, and
  6747. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-21..2016-03-27&quot;&gt;11 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6748. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-21..2016-03-27&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  6749. &lt;/li&gt;&lt;/ul&gt;
  6750.  
  6751. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6752.  
  6753. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ncvhdj$1v7u$1@digitalmars.com&quot;&gt;Beta D 2.071.0-b1&lt;/a&gt; was released this week, test it on your larger codebases!&lt;/p&gt;
  6754.  
  6755. &lt;p&gt;In the development branch, the &lt;tt&gt;volatile&lt;/tt&gt; keyword, which has been an error to use for a very long time now, was excised from the language.&lt;/p&gt;
  6756.  
  6757. &lt;p&gt;Further work has been done to clean up the import bugs, along with a transition switch in git head to aid fixing broken code to be up to the new, higher standard.&lt;/p&gt;
  6758.  
  6759. &lt;h2&gt;In the community&lt;/h2&gt;
  6760.  
  6761. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6762.  
  6763. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/krytdrlouscqjksooquy@forum.dlang.org&quot;&gt;Emacs dfmt wrapper&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vsenyfgnozeiiuldanbh@forum.dlang.org&quot;&gt;mondo - a d library for mongodb&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bwqhtvicfzmfjgwjxdck@forum.dlang.org&quot;&gt;LDC 0.17.1 has been released!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zgqphfwwogrzrmzipvbv@forum.dlang.org&quot;&gt;D Profile Viewer&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ncumh3$oru$1@digitalmars.com&quot;&gt;GtkD 3.3.0 released, GTK+ with D.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ltucxnutbawtmcmofyto@forum.dlang.org&quot;&gt;[Blog post] Why and when you should use SoA&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cvazrdzofdfnjlvgvike@forum.dlang.org&quot;&gt;futures and related asynchronous combinators&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nd6sdt$2v48$1@digitalmars.com&quot;&gt;Upcoming appearance&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lcfnfnhjzonkdkeaumds@forum.dlang.org&quot;&gt;Oh, my GoD! Goroutines on D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mqjrgglpgkgllcbgagms@forum.dlang.org&quot;&gt;Calling .NET from D&lt;/a&gt;
  6764. &lt;/li&gt;&lt;/ul&gt;
  6765.  
  6766. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6767.  
  6768. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  6769.  
  6770. &lt;p&gt;A lot of people ask me if there's a way to &lt;b&gt;get a stack trace while running&lt;/b&gt;. This is an updated version of the code from the appendix in my book to show just the most relevant lines. It returns a string which you can print out using your favorite functions.&lt;/p&gt;
  6771.  
  6772. &lt;pre class=&quot;d_code&quot;&gt;string getStackTrace() {
  6773.  &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; core.runtime;
  6774.  
  6775.  &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt;(Posix) {
  6776.    &lt;font color=&quot;green&quot;&gt;// druntime cuts out the first few functions on the trace because they are internal
  6777. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// so we'll make some dummy functions here so our actual info doesn't get cut
  6778. &lt;/font&gt;    Throwable.TraceInfo f2() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; defaultTraceHandler(); }
  6779.    Throwable.TraceInfo f1() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; f2(); }
  6780.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; trace = f1();
  6781.  } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  6782.    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; trace = defaultTraceHandler();
  6783.  }
  6784.  
  6785.  &lt;font color=&quot;green&quot;&gt;// cut off the last 7 lines because they are internal
  6786. &lt;/font&gt;  &lt;font color=&quot;green&quot;&gt;// functions anyway
  6787. &lt;/font&gt;  &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.string;
  6788.  &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; join(splitLines(trace.toString())[0 .. $-7], &lt;font color=&quot;red&quot;&gt;&amp;quot;\n&amp;quot;&lt;/font&gt;);
  6789. }
  6790. &lt;/pre&gt;
  6791.  
  6792. &lt;p&gt;Since it slices the string according to some internal druntime implementation details, it will need attention now and then, but the core mechanism - a call to &lt;tt&gt;defaultTraceHandler&lt;/tt&gt; - ought to be well-supported (the Exception classes use it), so you might just need to tweak the slicing every now and then to keep it working beautifully.&lt;/p&gt;
  6793.  
  6794. &lt;p&gt;Paste that function into code you are trying to &lt;tt&gt;writeln&lt;/tt&gt; debug and get stack traces whenever you need them! Compile with &lt;tt&gt;-g&lt;/tt&gt; to turn on debug data to get file and line numbers in the stack trace.&lt;/p&gt;
  6795.  
  6796. &lt;p&gt;Of course, you can also run your program in an interactive debugger and break to get a stack trace there. In &lt;tt&gt;gdb&lt;/tt&gt; for example, pressing ctrl+c or setting a break point will stop your program, then the &lt;tt&gt;where&lt;/tt&gt; command will tell you where you are via stack trace info.&lt;/p&gt;
  6797.  
  6798.  
  6799. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6800. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6801. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6802. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6803. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6804. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6805. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6806. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6807. &lt;/li&gt;&lt;/ul&gt;
  6808.  
  6809.  
  6810. &lt;/div&gt;
  6811. </description></item><item><title>Issue #63</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-mar-20.html</link><guid>http://arsdnet.net/this-week-in-d/2016-mar-20.html</guid><pubDate>Sun, 20 Mar 2016 12:00:00 GMT</pubDate><description>
  6812. &lt;div id=&quot;body-container&quot;&gt;
  6813. &lt;h1&gt;
  6814. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6815. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6816. &lt;span id=&quot;title-date&quot;&gt;March 20, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6817.  
  6818. &lt;div id=&quot;preface&quot;&gt;
  6819.  
  6820. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6821.  
  6822. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6823.  
  6824. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6825.  
  6826. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6827.  
  6828. &lt;/div&gt;
  6829.  
  6830. &lt;h2&gt;Statistics&lt;/h2&gt;
  6831.  
  6832. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-03-14&amp;amp;chfieldto=2016-03-20&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;20 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6833. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-03-14&amp;amp;chfieldto=2016-03-20&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6834. 58 pull requests merged into the language:
  6835.  
  6836. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-14..2016-03-20&quot;&gt;35 into DMD&lt;/a&gt;,
  6837. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-14..2016-03-20&quot;&gt;19 into Phobos&lt;/a&gt;, and
  6838. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-14..2016-03-20&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6839. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-14..2016-03-20&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  6840. &lt;/li&gt;&lt;/ul&gt;
  6841.  
  6842. &lt;h2&gt;In the community&lt;/h2&gt;
  6843.  
  6844. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6845.  
  6846. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/oiftvfpfbwhjejbljdmn@forum.dlang.org&quot;&gt;LDC now supports Windows MSVC x86/x64 as first class targets&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hkujfvwvvdnfmhpmdobd@forum.dlang.org&quot;&gt;dlang.org Re-Design Dark Theme (user style)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lcccapqupnutqjfrwrxv@forum.dlang.org&quot;&gt;Berlin D Meetup March 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pmhljpverplzqqqcfcul@forum.dlang.org&quot;&gt;IDE - Coedit 2, update 2 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ncetm2$jb$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup March 24, 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uvnfoqyghodbdtzdcbcz@forum.dlang.org&quot;&gt;d-vulkan, automatically generated D bindings for Vulkan&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ywxsbmzjqyibgttlxumm@forum.dlang.org&quot;&gt;New example IRC Client for DlangUI&lt;/a&gt;
  6847. &lt;/li&gt;&lt;/ul&gt;
  6848.  
  6849. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6850.  
  6851. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  6852.  
  6853. &lt;p&gt;The D exception class hierarchy does not start with &lt;tt&gt;Exception&lt;/tt&gt;. The base class is actually &lt;tt&gt;Throwable&lt;/tt&gt;, with two child classes: &lt;tt&gt;Exception&lt;/tt&gt; and &lt;tt&gt;Error&lt;/tt&gt;. Why is this?&lt;/p&gt;
  6854.  
  6855. &lt;p&gt;Subclsses of &lt;tt&gt;Exception&lt;/tt&gt; are meant to signify a recoverable runtime problem. A function throws an exception when it cannot complete the operation you asked it to do, but has reason to believe that a solution may exist further up the call chain, that the rest of the program is still able to function normally. For example, a file copy function may throw a subclass of Exception when the filesystem prohibits the copy. The calling function may reasonably try again and expect success later. The programmer did nothing wrong, the execution environment just wasn't able to comply at this time. The fact that the function may throw is part of its public interface.&lt;/p&gt;
  6856.  
  6857. &lt;p&gt;An &lt;tt&gt;Error&lt;/tt&gt; subclass, on the other hand, indicates that something is potentially wrong with the whole program and recovery ought not be attempted. If the function detects a bug in itself caused by programmer error (such as through a failing &lt;tt&gt;assert&lt;/tt&gt; or an array bounds violation, both events which the programmer is supposed to ensure never happen and thus indicate a bug), it may throw an &lt;tt&gt;Error&lt;/tt&gt;. These are *not* intended to be caught and are *not* part of the function's public interface. Thus, a &lt;tt&gt;nothrow&lt;/tt&gt; function may still throw &lt;tt&gt;Error&lt;/tt&gt; subclasses - &lt;tt&gt;nothrow&lt;/tt&gt; promises no &lt;tt&gt;Exception&lt;/tt&gt;s, not no program termination. &lt;tt&gt;Error&lt;/tt&gt; is simply an implementation detail of a dying program. They also bypass the normal exception chaining system - an &lt;tt&gt;Error&lt;/tt&gt; goes to the head of it and stacked &lt;tt&gt;Error&lt;/tt&gt;s will kill the program.&lt;/p&gt;
  6858.  
  6859. &lt;p&gt;Since &lt;tt&gt;Error&lt;/tt&gt; is an implementation detail of death, catching an &lt;tt&gt;Error&lt;/tt&gt;, while allowed, is not guaranteed to succeed and you should not attempt to recover from it. At best, you can just attempt last-minute logging or cleanup as the program terminates. Of course, the same applies to the superclass, &lt;tt&gt;Throwable&lt;/tt&gt;, which is only guaranteed to be recoverable if it happens to be an &lt;tt&gt;Exception&lt;/tt&gt; object rather than an &lt;tt&gt;Error&lt;/tt&gt;. (Catching &lt;tt&gt;Throwable&lt;/tt&gt; is convenient if you want to do generic logging though)&lt;/p&gt;
  6860.  
  6861. &lt;hr /&gt;
  6862.  
  6863. &lt;p&gt;A common question is: if I cannot recover from &lt;tt&gt;Error&lt;/tt&gt; with &lt;tt&gt;catch&lt;/tt&gt;, how can I write a program that will stay up reliably? The answer is to put your program inside a larger system with redundancy built in. For example, have the operating system automatically restart your program if it is terminated. This way, the termination cleans the broken state and the automatic restart keeps the service running. If it is very important, you will also want to have a backup server running a fallback application - ideally, a *different* fallback application, so it will not share the same bugs that led to the error in the first place. (Similarly, if you want a backup against a fire with paper files, you wouldn't want two copies of the documents in the same box because if one burns, odds are the rest of the box is burning too! You'd want to keep the backup copy in a different location so the odds of both catching fire at once is lower.)&lt;/p&gt;
  6864.  
  6865. &lt;p&gt;There's no such thing as a reliable individual program. All programs have bugs, or are on computers that may lose power or suffer any number of other programs. But it is possible to build a reliable &lt;i&gt;system&lt;/i&gt; out of imperfect, unreliable parts. Write your program as well as you can, then build a reliable system around it using concepts like redundancy to ensure the thing as a whole still delivers.&lt;/p&gt;
  6866.  
  6867. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6868. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6869. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6870. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6871. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6872. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6873. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6874. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6875. &lt;/li&gt;&lt;/ul&gt;
  6876.  
  6877.  
  6878. &lt;/div&gt;
  6879. </description></item><item><title>Issue #62</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-mar-13.html</link><guid>http://arsdnet.net/this-week-in-d/2016-mar-13.html</guid><pubDate>Sun, 13 Mar 2016 12:00:00 GMT</pubDate><description>
  6880. &lt;div id=&quot;body-container&quot;&gt;
  6881. &lt;h1&gt;
  6882. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6883. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6884. &lt;span id=&quot;title-date&quot;&gt;March 13, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6885.  
  6886. &lt;div id=&quot;preface&quot;&gt;
  6887.  
  6888. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6889.  
  6890. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6891.  
  6892. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6893.  
  6894. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6895.  
  6896. &lt;/div&gt;
  6897.  
  6898. &lt;h2&gt;Statistics&lt;/h2&gt;
  6899.  
  6900. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-03-07&amp;amp;chfieldto=2016-03-13&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6901. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-03-07&amp;amp;chfieldto=2016-03-13&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6902. 41 pull requests merged into the language:
  6903.  
  6904. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-07..2016-03-13&quot;&gt;15 into DMD&lt;/a&gt;,
  6905. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-07..2016-03-13&quot;&gt;18 into Phobos&lt;/a&gt;, and
  6906. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-07..2016-03-13&quot;&gt;8 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6907. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-03-07..2016-03-13&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  6908. &lt;/li&gt;&lt;/ul&gt;
  6909.  
  6910. &lt;h2&gt;In the community&lt;/h2&gt;
  6911.  
  6912. &lt;h3&gt;Livestreaming D code&lt;/h3&gt;
  6913.  
  6914. &lt;p&gt;John Colvin now has a &lt;a href=&quot;https://www.livecoding.tv/john-colvin/&quot;&gt;livecoding.tv page&lt;/a&gt;.&lt;/p&gt;
  6915.  
  6916. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6917.  
  6918. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nbng5m$elf$1@digitalmars.com&quot;&gt;GSoC 2016 in social media&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfcmafjnwixbioulqmnk@forum.dlang.org&quot;&gt;SAP NetWeaver SDK binding v0.0.4 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bzlbhpnymdrsawznuzxh@forum.dlang.org&quot;&gt;LLVM 3.8 released - and LDC is already able to use it!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nbnl53$lb0$1@digitalmars.com&quot;&gt;DConf registrations have passed 110!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/legguhmaivvbjrteqpcc@forum.dlang.org&quot;&gt;Event Dispatcher&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/odowolmiykkdigfitgeh@forum.dlang.org&quot;&gt;New Article: My Experience Porting Python Dateutil's Date Parser to D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gdmirnmyiccjxjvlkytl@forum.dlang.org&quot;&gt;unit-threaded v0.6.5 - Type-parametrized tests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wrbveooxdmkymoniumqq@forum.dlang.org&quot;&gt;code-d 0.10.1 released (D support for vscode)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jqotefrswxhaiqteefdq@forum.dlang.org&quot;&gt;running D on AWS lambda&lt;/a&gt;
  6919. &lt;/li&gt;&lt;/ul&gt;
  6920.  
  6921. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6922.  
  6923. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  6924. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  6925. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6926. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6927. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  6928. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  6929. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6930. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  6931. &lt;/li&gt;&lt;/ul&gt;
  6932.  
  6933.  
  6934. &lt;/div&gt;
  6935. </description></item><item><title>Issue #61</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-mar-06.html</link><guid>http://arsdnet.net/this-week-in-d/2016-mar-06.html</guid><pubDate>Sun, 06 Mar 2016 12:00:00 GMT</pubDate><description>
  6936. &lt;div id=&quot;body-container&quot;&gt;
  6937. &lt;h1&gt;
  6938. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  6939. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  6940. &lt;span id=&quot;title-date&quot;&gt;March 6, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  6941.  
  6942. &lt;div id=&quot;preface&quot;&gt;
  6943.  
  6944. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  6945.  
  6946. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  6947.  
  6948. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  6949.  
  6950. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  6951.  
  6952. &lt;/div&gt;
  6953.  
  6954. &lt;h2&gt;Statistics&lt;/h2&gt;
  6955.  
  6956. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-02-29&amp;amp;chfieldto=2016-03-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6957. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-02-29&amp;amp;chfieldto=2016-03-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;35 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  6958. 27 pull requests merged into the language:
  6959.  
  6960. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-29..2016-03-06&quot;&gt;16 into DMD&lt;/a&gt;,
  6961. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-29..2016-03-06&quot;&gt;13 into Phobos&lt;/a&gt;, and
  6962. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-29..2016-03-06&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  6963. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-29..2016-03-06&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  6964. &lt;/li&gt;&lt;/ul&gt;
  6965.  
  6966. &lt;h2&gt;Major Changes&lt;/h2&gt;
  6967.  
  6968. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/woguyesptlhfhsragasm@forum.dlang.org&quot;&gt;D Foundation was accepted&lt;/a&gt; for Google Summer of Code 2016. The project details are still being determined.&lt;/p&gt;
  6969.  
  6970. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nb5n6c$7ht$1@digitalmars.com&quot;&gt;Dconf got a new logo&lt;/a&gt; ahead of the conference, which is now about two months away.&lt;/p&gt;
  6971.  
  6972. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nb9dlq$2lnt$1@digitalmars.com&quot;&gt;D 2.070.2 was released&lt;/a&gt; with a single bug fix.&lt;/p&gt;
  6973.  
  6974. &lt;p&gt;In git, dmd got more refactoring work to remove preprocessor usage in the backend (a prelude to eventually converting it to D as well), and the website got a lot of missing anchors added - meaning we can now link to specific sections.&lt;/p&gt;
  6975.  
  6976. &lt;h2&gt;In the community&lt;/h2&gt;
  6977.  
  6978. &lt;h3&gt;Community announcements&lt;/h3&gt;
  6979.  
  6980. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jthmqzsoszcvfmusfxso@forum.dlang.org&quot;&gt;Blog Post: Metaprogramming with type objects in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ojayiscamdrkaxqofcwo@forum.dlang.org&quot;&gt;dlang.io subdomains&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hodqixmwfopwyoyhhxyk@forum.dlang.org&quot;&gt;D Functional garden&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tgbfkazeuqrcjctyemqz@forum.dlang.org&quot;&gt;unit-threaded v0.6.3 - now even easier to use / opt-in&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vrpsqctczmzildiobidd@forum.dlang.org&quot;&gt;D bindings to Chipmunk2D 7.0.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jwllctlkrihatwuqczji@forum.dlang.org&quot;&gt;A little wrap over std.json&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/iriysjccyrnvfxcpqurb@forum.dlang.org&quot;&gt;Deimos bindings to libmrss&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rwpxodrwnumobosdgrru@forum.dlang.org&quot;&gt;Argon: an alternative parser for command-line arguments&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nanjbitxijybpsaxvizq@forum.dlang.org&quot;&gt;code-debug 0.6.0 released (GDB &amp;amp; LLDB for vscode)&lt;/a&gt;
  6981. &lt;/li&gt;&lt;/ul&gt;
  6982.  
  6983. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  6984.  
  6985. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  6986.  
  6987. &lt;p&gt;This week, I want to talk about struct subtyping and how it can work as a kind of named arguments.&lt;/p&gt;
  6988.  
  6989. &lt;p&gt;My simpledisplay.d has an experimental text component which, while being far from finished, already has a single function which can do a number of things like change color, add text, or change text style attributes:&lt;/p&gt;
  6990.  
  6991. &lt;pre class=&quot;d_code&quot;&gt; obj.addText(
  6992. ForegroundColor.blue, TextFormat.underline,
  6993. &lt;font color=&quot;red&quot;&gt;&amp;quot;this is drawn like a link&amp;quot;&lt;/font&gt;,
  6994.  
  6995. ForegroundColor.black, ~TextFormat.underline,
  6996. &lt;font color=&quot;red&quot;&gt;&amp;quot; and this is normal again&amp;quot;&lt;/font&gt;
  6997. );
  6998. &lt;/pre&gt;
  6999.  
  7000. &lt;p&gt;It achieves this through a variadic template and various specific subtypes for things like &lt;tt&gt;ForegroundColor&lt;/tt&gt; and &lt;tt&gt;BackgroundColor&lt;/tt&gt;, which all specialize the generic struct, &lt;a href=&quot;http://dpldocs.info/experimental-docs/arsd.color.Color.html&quot;&gt;&lt;tt&gt;Color&lt;/tt&gt;&lt;/a&gt;, from &lt;tt&gt;arsd.color&lt;/tt&gt;.&lt;/p&gt;
  7001.  
  7002. &lt;p&gt;Here's the source of &lt;tt&gt;ForegroundColor&lt;/tt&gt;:&lt;/p&gt;
  7003.  
  7004. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; ForegroundColor {
  7005. Color color;
  7006. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; color &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;;
  7007.  
  7008. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(Color c) {
  7009. color = c;
  7010. }
  7011.  
  7012. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; r, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; g, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; b, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a = 255) {
  7013. color = Color(r, g, b, a);
  7014. }
  7015.  
  7016. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; ForegroundColor opDispatch(string s)() &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(compiles, ForegroundColor(&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;Color.&amp;quot;&lt;/font&gt; ~ s)))) {
  7017. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; ForegroundColor(&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;Color.&amp;quot;&lt;/font&gt; ~ s));
  7018. }
  7019. }
  7020. &lt;/pre&gt;
  7021.  
  7022. &lt;p&gt;Is is a bit long for something that does very little, and if I was going to repeat it several times, I'd factor that entire body out into a &lt;tt&gt;mixin template&lt;/tt&gt;, but it isn't hugely long and provides all the convenience constructors so you don't have to write &lt;tt&gt;ForegroundColor(Color(r, g, b, a))&lt;/tt&gt; at the usage site.&lt;/p&gt;
  7023.  
  7024. &lt;p&gt;The &lt;tt&gt;opDispatch&lt;/tt&gt; at the end succinctly forwards static methods to the same on &lt;tt&gt;Color&lt;/tt&gt;, enabling usage of those convenience factories too, such as &lt;tt&gt;ForegroundColor.white&lt;/tt&gt; instead of &lt;tt&gt;ForegroundColor(Color.white)&lt;/tt&gt;.&lt;/p&gt;
  7025.  
  7026. &lt;p&gt;However, those constructor and opDispatch lines are not strictly necessary to demonstrate the subtyping pattern, which is provided by just the first two lines, notably, &lt;tt&gt;alias this&lt;/tt&gt;.&lt;/p&gt;
  7027.  
  7028. &lt;p&gt;&lt;b&gt;&lt;tt&gt;alias this&lt;/tt&gt;&lt;/b&gt; just forwards unknown methods on an extant object to a member, and will also yield said member when the object is used in a context where the submember's type is requested. In other words, it will allow the outer member to implicitly convert to the inner member where context requires it.&lt;/p&gt;
  7029.  
  7030. &lt;div class=&quot;pitfall&quot;&gt; I said &amp;quot;extant object&amp;quot; because the object needs to already be created before alias this will take effect. That means you can NOT use alias this to forward constructors, nor to do implicit construction when calling an object:
  7031.  
  7032. void foo(ForegroundColor color) {}
  7033.  
  7034. Color color;
  7035. foo(color); // will NOT compile. alias this does not do construction.
  7036. &lt;/div&gt;
  7037.  
  7038. &lt;p&gt;With &lt;tt&gt;alias this&lt;/tt&gt; in place, any function that expects a &lt;tt&gt;Color&lt;/tt&gt; can take a &lt;tt&gt;ForegroundColor&lt;/tt&gt; the same (the compiler will automatically rewrite &lt;tt&gt;func(fg)&lt;/tt&gt; into &lt;tt&gt;func(fg.color)&lt;/tt&gt;), and any other members on &lt;tt&gt;Color&lt;/tt&gt; will also work through &lt;tt&gt;ForegroundColor&lt;/tt&gt;. For example, the &lt;tt&gt;r&lt;/tt&gt;, &lt;tt&gt;g&lt;/tt&gt;, &lt;tt&gt;b&lt;/tt&gt;, and &lt;tt&gt;a&lt;/tt&gt; members will be transparently available.&lt;/p&gt;
  7039.  
  7040. &lt;p&gt;But, when passing it to a template, the template will still see it as &lt;tt&gt;ForegroundColor&lt;/tt&gt;, not &lt;tt&gt;Color&lt;/tt&gt;! Similarly, functions can overload on &lt;tt&gt;ForegroundColor&lt;/tt&gt; separately than on &lt;tt&gt;Color&lt;/tt&gt; (as long as the type is statically known. Unlike classes, there is no dynamic &lt;tt&gt;cast(ForegroundColor)&lt;/tt&gt; on a &lt;tt&gt;Color&lt;/tt&gt; possible. Remember, the compiler rewrites it into a member access - from that point on, the function just sees that one member, with no knowledge of what is holding it.).&lt;/p&gt;
  7041.  
  7042. &lt;p&gt;Since functions can distinguish the difference at compile time, we can also reflect on that! Which brings us back to &lt;tt&gt;addText&lt;/tt&gt;. Here is its code:&lt;/p&gt;
  7043.  
  7044. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(Args...)(Args args) {
  7045. &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(blocks.length == 0)
  7046. addBlock();
  7047.  
  7048. InlineElement ie;
  7049. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(idx, arg; args) {
  7050. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;typeof&lt;/font&gt;(arg) == ForegroundColor))
  7051. ie.color = arg;
  7052. &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;typeof&lt;/font&gt;(arg) == TextFormat)) {
  7053. &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(arg &amp;amp; 0x8000) &lt;font color=&quot;green&quot;&gt;// ~TextFormat.something turns it off
  7054. &lt;/font&gt; ie.styles &amp;amp;= arg;
  7055. &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt;
  7056. ie.styles |= arg;
  7057. } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;typeof&lt;/font&gt;(arg) == string)) {
  7058. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(idx == 0 &amp;amp;&amp;amp; args.length &amp;gt; 1)
  7059. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(0, &lt;font color=&quot;red&quot;&gt;&amp;quot;Put styles before the string.&amp;quot;&lt;/font&gt;);
  7060. size_t lastLineIndex;
  7061. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(cidx, &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt; a; arg) {
  7062. &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(a == '\n') {
  7063. ie.text = arg[lastLineIndex .. cidx];
  7064. lastLineIndex = cidx + 1;
  7065. blocks[$-1].parts ~= ie;
  7066. ie.text = &lt;font color=&quot;red&quot;&gt;&amp;quot;\n&amp;quot;&lt;/font&gt;;
  7067. blocks[$-1].parts ~= ie;
  7068. addBlock();
  7069. } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  7070.  
  7071. }
  7072. }
  7073.  
  7074. ie.text = arg[lastLineIndex .. $];
  7075. blocks[$-1].parts ~= ie;
  7076. }
  7077. }
  7078. }
  7079. &lt;/pre&gt;
  7080.  
  7081. &lt;p&gt;Ignore many of the specifics and just look at the general shape of the function:&lt;/p&gt;
  7082.  
  7083. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(Args...)(Args args) {
  7084. &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(arg; args) {
  7085. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;typeof&lt;/font&gt;(arg) == Something)) {
  7086.  
  7087. } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt; &lt;font color=&quot;green&quot;&gt;/* ... */&lt;/font&gt; {
  7088.  
  7089. }
  7090. }
  7091. }
  7092. &lt;/pre&gt;
  7093.  
  7094. &lt;p&gt;You can loop over variadic arguments (sometimes called &lt;tt&gt;tuples&lt;/tt&gt; or &lt;tt&gt;AliasSeq&lt;/tt&gt;s) with &lt;tt&gt;foreach&lt;/tt&gt; and inspect the type of each argument individually and react accordingly.&lt;/p&gt;
  7095.  
  7096. &lt;p&gt;&lt;tt&gt;addText&lt;/tt&gt; uses a combination of type analysis and value checking to determine its action. If it sees a plain style, it turns it on. An inverted style (&lt;tt&gt;~TextFormat.underline&lt;/tt&gt;, for example, with the unary &lt;tt&gt;~&lt;/tt&gt; acting to invert the bit pattern) turns that style off. If it sees one of the specializations of &lt;tt&gt;Color&lt;/tt&gt;, it uses the type to know if it should change the foreground or some other color value.&lt;/p&gt;
  7097.  
  7098. &lt;div class=&quot;tip&quot;&gt;You could also use this pattern in something like &lt;tt&gt;opAssign&lt;/tt&gt; or some other property to act based on assigned types.&lt;/div&gt;
  7099.  
  7100. &lt;p&gt;This pattern could also be done with a list of function overloads, but the loop is easier to handle more combinations:&lt;/p&gt;
  7101.  
  7102. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(ForegroundColor color, string text) {}
  7103. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(BackgroundColor color, string text) {}
  7104. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(ForegroundColor color, BackgroundColor bg, string text) {}
  7105. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(ForegroundColor color, BackgroundColor bg, TextFormat fmt, string text) {}
  7106. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; addText(string text);
  7107. &lt;font color=&quot;green&quot;&gt;// the list would go on and on and on. The loop does all this!
  7108. &lt;/font&gt;&lt;/pre&gt;
  7109.  
  7110. &lt;p&gt;And the loop still uses &lt;tt&gt;static assert&lt;/tt&gt; to make it a compile error if you give it something it can't handle, like text before formatting. (The way the text object works just requires formatting to be known before it attempts to draw the actual string.)&lt;/p&gt;
  7111.  
  7112. &lt;p&gt;This brings me to my final point: this same pattern can be done to do something approximating named arguments, using either the loop or the overloads. By defining a specialized type for a certain piece of data, you force the call site to use that name somehow, giving the documentation of named params along with some type safety too. With overloads or looping, you can take them in arbitrary orders, including with required, optional, or default values.&lt;/p&gt;
  7113.  
  7114. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Size { &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; w; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; h; }
  7115. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Point { &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; y; }
  7116.  
  7117. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; PointUpperLeft { Point p; &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; p &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;; &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; y) { p = Point(x, y); } }
  7118. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; PointLowerRight { Point p; &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; p &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;; &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x, &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; y) { p = Point(x, y); } }
  7119.  
  7120. drawRectangle(Point(0, 0), Size(10, 10), ForegroundColor.red);
  7121. drawRectangle(PointUpperLeft(0, 0), PointLowerRight(10, 10), ForegroundColor.red);
  7122.  
  7123. &lt;font color=&quot;green&quot;&gt;// and so on with other combinations which makes it clear as opposed to
  7124. &lt;/font&gt;
  7125. drawRectangle(0, 0, 10, 10, 255, 0, 0); &lt;font color=&quot;green&quot;&gt;// what does each number mean?
  7126. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// is it lower right point, or width and height?
  7127. &lt;/font&gt;&lt;/pre&gt;
  7128.  
  7129. &lt;p&gt;Writing the structs for the various names takes a small amount of work, though with mixin templates you could automate most of it, but regardless, the benefit for your users can be significant.&lt;/p&gt;
  7130.  
  7131. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7132. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7133. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7134. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7135. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7136. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7137. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7138. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7139. &lt;/li&gt;&lt;/ul&gt;
  7140.  
  7141.  
  7142. &lt;/div&gt;
  7143. </description></item><item><title>Issue #60</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-feb-28.html</link><guid>http://arsdnet.net/this-week-in-d/2016-feb-28.html</guid><pubDate>Sun, 28 Feb 2016 12:00:00 GMT</pubDate><description>
  7144. &lt;div id=&quot;body-container&quot;&gt;
  7145. &lt;h1&gt;
  7146. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7147. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7148. &lt;span id=&quot;title-date&quot;&gt;February 28, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7149.  
  7150. &lt;div id=&quot;preface&quot;&gt;
  7151.  
  7152. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7153.  
  7154. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7155.  
  7156. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7157.  
  7158. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7159.  
  7160. &lt;/div&gt;
  7161.  
  7162. &lt;h2&gt;Statistics&lt;/h2&gt;
  7163.  
  7164. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-02-22&amp;amp;chfieldto=2016-02-28&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;9 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7165. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-02-22&amp;amp;chfieldto=2016-02-28&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7166. 27 pull requests merged into the language:
  7167.  
  7168. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-22..2016-02-28&quot;&gt;15 into DMD&lt;/a&gt;,
  7169. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-22..2016-02-28&quot;&gt;9 into Phobos&lt;/a&gt;, and
  7170. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-22..2016-02-28&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7171. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-22..2016-02-28&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  7172. &lt;/li&gt;&lt;/ul&gt;
  7173.  
  7174. &lt;h2&gt;Major Changes&lt;/h2&gt;
  7175. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nasvu6$14a$1@digitalmars.com&quot;&gt;Release D 2.070.1&lt;/a&gt; came out this week and &lt;a href=&quot;http://forum.dlang.org/thread/ndafedsqoqxkhqpbkfja@forum.dlang.org&quot;&gt;LDC 1.0.0-alpha1 has been released! Please help testing!&lt;/a&gt;&lt;/p&gt;
  7176.  
  7177. &lt;h2&gt;In the community&lt;/h2&gt;
  7178.  
  7179. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7180.  
  7181. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cwjmhgwxfsnpfjgaqllu@forum.dlang.org&quot;&gt;IDE - Coedit 2 update 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nanlah$1qpb$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup February 25, 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zeeytgxkdkjdeebqozfz@forum.dlang.org&quot;&gt;The ldc D compiler has been added to GNU Guix&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rspheawyhvkrxlzaqbif@forum.dlang.org&quot;&gt;Syntax highlighting of backticks now supported in Notepad++&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nasidj$2ha5$1@digitalmars.com&quot;&gt;Hotfix release vibe.d 0.7.28&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xoaclyxxwfcotsioeypx@forum.dlang.org&quot;&gt;SQLite-D alpha is here&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/afwouwomyxxfrjngvidn@forum.dlang.org&quot;&gt;Terminix 0.51.0 Released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cxetxsbkfspyvzvixubh@forum.dlang.org&quot;&gt;nanomsg for Deimos collection&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/agvparvfysomyocwxikj@forum.dlang.org&quot;&gt;scone 0.1.0 super-alpha&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/naiu82$eue$1@digitalmars.com&quot;&gt;Beta D 2.070.1-b1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
  7182.  
  7183. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7184.  
  7185. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  7186.  
  7187. &lt;p&gt;This week's tip is courtesy of &lt;a href=&quot;http://www.mahdix.com/blog/2016/02/25/tutorial-how-to-create-and-use-a-d-package/&quot;&gt;Mahdi Mohammadi&lt;/a&gt; and is &lt;b&gt;How to create and use a D package&lt;/b&gt;.&lt;/p&gt;
  7188.  
  7189.  
  7190.  
  7191. &lt;p&gt;To create a D package, you first need to have dub utility (plus D compiler, dmd). You can download pre-compiled dub binaries from here.&lt;/p&gt;
  7192.  
  7193. &lt;p&gt;&lt;b&gt;Creating a D package&lt;/b&gt;&lt;/p&gt;
  7194.  
  7195. &lt;pre class=&quot;d_code&quot;&gt;cd ~
  7196.  
  7197. mkdir dlibs
  7198.  
  7199. cd dlibs
  7200.  
  7201. dub init mypack  #this will create a skeleton &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; your &lt;font color=&quot;blue&quot;&gt;package&lt;/font&gt;: mypack
  7202.  
  7203. cd mypack
  7204.  
  7205. cat dub.sdl  #below &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; contents of your &lt;font color=&quot;blue&quot;&gt;package&lt;/font&gt;
  7206.  
  7207. name &lt;font color=&quot;red&quot;&gt;&amp;quot;mypack&amp;quot;&lt;/font&gt;
  7208. description &lt;font color=&quot;red&quot;&gt;&amp;quot;A minimal D application.&amp;quot;&lt;/font&gt;
  7209. copyright &lt;font color=&quot;red&quot;&gt;&amp;quot;Copyright &amp;#169; 2016, mahdix&amp;quot;&lt;/font&gt;
  7210. authors &lt;font color=&quot;red&quot;&gt;&amp;quot;root&amp;quot;&lt;/font&gt;
  7211. &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt; &lt;font color=&quot;red&quot;&gt;&amp;quot;1.0.0&amp;quot;&lt;/font&gt;
  7212. targetType &lt;font color=&quot;red&quot;&gt;&amp;quot;library&amp;quot;&lt;/font&gt;
  7213.  
  7214.  
  7215. #the &lt;font color=&quot;blue&quot;&gt;package&lt;/font&gt; will have only one source file, located inside source directory
  7216.  
  7217. cat source/myfile.d
  7218.  
  7219. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; add(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x,&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; y) {
  7220. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; x+y;
  7221. }
  7222.  
  7223. #this will compile your &lt;font color=&quot;blue&quot;&gt;package&lt;/font&gt;
  7224.  
  7225. #although its not necessary but ensures that everything &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; allright.
  7226.  
  7227. dub
  7228.  
  7229. Performing &lt;font color=&quot;red&quot;&gt;&amp;quot;debug&amp;quot;&lt;/font&gt; build using dmd &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; x86_64.
  7230. mypack ~master: target &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; configuration &lt;font color=&quot;red&quot;&gt;&amp;quot;library&amp;quot;&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; up to date.
  7231. Target &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; a library. Skipping execution.
  7232. &lt;/pre&gt;
  7233.  
  7234. &lt;p&gt;&lt;b&gt;Using a D package&lt;/b&gt;&lt;/p&gt;
  7235.  
  7236. &lt;p&gt;To use a D package, we will create an application (which is itself a D package) and define the package we need as it&amp;#8217;s dependency. But before that, we need to inform dub where the packages are (which is inside ~/dlibs).&lt;/p&gt;
  7237.  
  7238. &lt;pre class=&quot;d_code&quot;&gt;dub add-path ~/dlibs
  7239.  
  7240. dub list #this will list all known packages to dub, which will include mypack too
  7241. &lt;/pre&gt;
  7242.  
  7243. &lt;p&gt;Now lets create a basic project that uses the package:&lt;/p&gt;
  7244.  
  7245. &lt;pre class=&quot;d_code&quot;&gt;cd ~
  7246.  
  7247. dub init project1
  7248.  
  7249. cd project1
  7250.  
  7251. cat dub.json #config file can be either sdl, they are equivalent
  7252.  
  7253. {
  7254. &lt;font color=&quot;red&quot;&gt;&amp;quot;name&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;myproject&amp;quot;&lt;/font&gt;,
  7255. &lt;font color=&quot;red&quot;&gt;&amp;quot;description&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;A little web service of mine.&amp;quot;&lt;/font&gt;,
  7256. &lt;font color=&quot;red&quot;&gt;&amp;quot;authors&amp;quot;&lt;/font&gt;: [&lt;font color=&quot;red&quot;&gt;&amp;quot;Mahdi Mohammadi&amp;quot;&lt;/font&gt;],
  7257. &lt;font color=&quot;red&quot;&gt;&amp;quot;homepage&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;http://myproject.example.com&amp;quot;&lt;/font&gt;,
  7258. &lt;font color=&quot;red&quot;&gt;&amp;quot;license&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;GPL-2.0&amp;quot;&lt;/font&gt;,
  7259. &lt;font color=&quot;red&quot;&gt;&amp;quot;targetType&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;executable&amp;quot;&lt;/font&gt;,
  7260. &lt;font color=&quot;red&quot;&gt;&amp;quot;dependencies&amp;quot;&lt;/font&gt;: {
  7261. &lt;font color=&quot;red&quot;&gt;&amp;quot;mypack&amp;quot;&lt;/font&gt;: &lt;font color=&quot;red&quot;&gt;&amp;quot;*&amp;quot;&lt;/font&gt;
  7262. }
  7263. }
  7264.  
  7265. #as you notice, we specify &lt;font color=&quot;red&quot;&gt;&amp;quot;*&amp;quot;&lt;/font&gt; as &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt; number of mypack which means: any &lt;font color=&quot;blue&quot;&gt;version&lt;/font&gt;
  7266.  
  7267. cat source/test.d #this &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; our only source file which uses add method of mypack
  7268.  
  7269. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  7270. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; myfile;
  7271. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  7272. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; x = add(1,4);
  7273. writefln(&lt;font color=&quot;red&quot;&gt;&amp;quot;%d&amp;quot;&lt;/font&gt;, x);
  7274. }
  7275.  
  7276. #now lets build project1
  7277.  
  7278. pwd
  7279.  
  7280. ~/project1
  7281.  
  7282. dub
  7283.  
  7284. Performing &lt;font color=&quot;red&quot;&gt;&amp;quot;debug&amp;quot;&lt;/font&gt; build using dmd &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; x86_64.
  7285. mypack ~master: target &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; configuration &lt;font color=&quot;red&quot;&gt;&amp;quot;library&amp;quot;&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; up to date.
  7286. myproject ~master: target &lt;font color=&quot;blue&quot;&gt;for&lt;/font&gt; configuration &lt;font color=&quot;red&quot;&gt;&amp;quot;application&amp;quot;&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; up to date.
  7287. To force a rebuild of up-to-date targets, run again &lt;font color=&quot;blue&quot;&gt;with&lt;/font&gt; --force.
  7288. Running ./myproject
  7289. 5
  7290.  
  7291. #5 &lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; output of the call to add &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt; mypack
  7292. &lt;/pre&gt;
  7293.  
  7294. &lt;p&gt;See &lt;a href=&quot;http://www.mahdix.com/blog/2016/02/25/tutorial-how-to-create-and-use-a-d-package/&quot;&gt;the author's blog&lt;/a&gt; for more from him.&lt;/p&gt;
  7295.  
  7296. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7297. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7298. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7299. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7300. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7301. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7302. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7303. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7304. &lt;/li&gt;&lt;/ul&gt;
  7305.  
  7306.  
  7307. &lt;/div&gt;
  7308. </description></item><item><title>Issue #59</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-feb-21.html</link><guid>http://arsdnet.net/this-week-in-d/2016-feb-21.html</guid><pubDate>Sun, 21 Feb 2016 12:00:00 GMT</pubDate><description>
  7309. &lt;div id=&quot;body-container&quot;&gt;
  7310. &lt;h1&gt;
  7311. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7312. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7313. &lt;span id=&quot;title-date&quot;&gt;February 21, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7314.  
  7315. &lt;div id=&quot;preface&quot;&gt;
  7316.  
  7317. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7318.  
  7319. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7320.  
  7321. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7322.  
  7323. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7324.  
  7325. &lt;/div&gt;
  7326.  
  7327. &lt;h2&gt;Statistics&lt;/h2&gt;
  7328.  
  7329. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-02-15&amp;amp;chfieldto=2016-02-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;16 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7330. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-02-15&amp;amp;chfieldto=2016-02-21&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;25 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7331. 25 pull requests merged into the language:
  7332.  
  7333. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-15..2016-02-21&quot;&gt;10 into DMD&lt;/a&gt;,
  7334. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-15..2016-02-21&quot;&gt;14 into Phobos&lt;/a&gt;, and
  7335. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-15..2016-02-21&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7336. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-15..2016-02-21&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  7337. &lt;/li&gt;&lt;/ul&gt;
  7338.  
  7339. &lt;h2&gt;In the community&lt;/h2&gt;
  7340.  
  7341. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7342.  
  7343. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ctpoutkrxdnmedaphgxk@forum.dlang.org&quot;&gt;Updated plotcli (version 0.8.0). Now build on ggplotd&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gpixyvscmeuffvxzefxk@forum.dlang.org&quot;&gt;Qt's MOC getting replicated in D for Calypso&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kvsnfdakmlchlicnlyub@forum.dlang.org&quot;&gt;GSoC Deadline Friday&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qstilhxsbybyjcgwfkzb@forum.dlang.org&quot;&gt;Google Summer of Code 2016 Only A Few Hours Left&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
  7344.  
  7345. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7346.  
  7347. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  7348.  
  7349. &lt;p&gt;Following up on last week, I want to talk about &lt;b&gt;minimizing string mixins&lt;/b&gt;.&lt;/p&gt;
  7350.  
  7351. &lt;p&gt;I've noticed a trend among D programmers: we have a bad habit of reaching for string mixins (and, perhaps, other generic tools..) when we don't strictly need them. It is true that string mixins can do just about anything, but as we learned in Star Trek VI, let us redefine progress to be that just because we &lt;i&gt;can&lt;/i&gt; do a thing, it does not necessarily follow that we &lt;i&gt;must&lt;/i&gt; do that thing.&lt;/p&gt;
  7352.  
  7353. &lt;p&gt;String mixins can quickly become difficult to read, difficult to debug, and fickle to get right. (That said, there are techniques to make it better, including several tips from previous issues of This Week in D!) You'll want to keep them short and avoid them when you don't need them.&lt;/p&gt;
  7354.  
  7355. &lt;p&gt;I like to keep my string mixins to about one line long. There might be several one-line mixins to make a declaration, but if I can at all avoid it, I want to keep each piece short and independent. There's a few tricks I use:&lt;/p&gt;
  7356.  
  7357. &lt;ul&gt;&lt;li&gt; Use templates.
  7358.  
  7359. &lt;/li&gt;&lt;li&gt;
  7360. Use aliases.
  7361.  
  7362. &lt;/li&gt;&lt;li&gt;
  7363. Use functions.
  7364.  
  7365. &lt;/li&gt;&lt;/ul&gt;
  7366.  
  7367. &lt;p&gt;Let's look at a realistic, though very simplified, example. Suppose we want to read a SQL create table statement and generate a magic D object out of it:&lt;/p&gt;
  7368.  
  7369. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; sql = &lt;font color=&quot;red&quot;&gt;`
  7370. CREATE TABLE Person (
  7371. id INTEGER NOT NULL,
  7372. name TEXT,
  7373. birthday DATE
  7374. );
  7375. `&lt;/font&gt;;
  7376.  
  7377. &lt;font color=&quot;green&quot;&gt;/+
  7378. We want to do a transformation to generate something like this:
  7379.  
  7380. class Person {
  7381. int id;
  7382. string text;
  7383. Date birthday;
  7384.  
  7385. void save() {
  7386. /* implementation elided */
  7387. }
  7388. }
  7389. +/&lt;/font&gt;
  7390. &lt;/pre&gt;
  7391.  
  7392. &lt;p&gt;Your first idea might be to build the whole class as a string and mix it all in. But that would include potentially long method implementations that are difficult to debug in strings. I'd avoid that:&lt;/p&gt;
  7393.  
  7394. &lt;ul&gt;&lt;li&gt; You could put all the methods in a &lt;tt&gt;mixin template&lt;/tt&gt; and just mix it in to the generated string. Use reflection to look over the generated methods in the mixin template.&lt;/li&gt;&lt;li&gt; You might just generate the member variable definitions and have the class itself be written outside.&lt;/li&gt;&lt;li&gt; The generated strings might just have aliases to hand-written code.
  7395. &lt;/li&gt;&lt;/ul&gt;
  7396.  
  7397. &lt;p&gt;There are three parts generated from that code: the name of the class, the types of the variables, and the names of the variables. The name of the class is a tricky one: since mixins must be a complete declaration, you cannot just write&lt;/p&gt;
  7398.  
  7399. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(name_string) {
  7400.  
  7401. }
  7402. &lt;/pre&gt;
  7403.  
  7404. &lt;p&gt;The compiler will complain that name_string is nonsense in that context; you'll have parse errors. As we learned last week, mixin is NOT a code paster. But, you CAN write a template class with an internal name, and expose it via an alias:&lt;/p&gt;
  7405.  
  7406. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; ObjectImpl(some_arguments) {
  7407. &lt;font color=&quot;green&quot;&gt;// implementation
  7408. &lt;/font&gt; }
  7409.  
  7410. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;alias &amp;quot;&lt;/font&gt; ~ some_name ~ &lt;font color=&quot;red&quot;&gt;&amp;quot; ObjectImpl!(whatever, args);&amp;quot;&lt;/font&gt;);
  7411. &lt;/pre&gt;
  7412.  
  7413. &lt;p&gt;The end user can now pretend it has the pretty name, while you can write the code outside the string mixin. The only real leak of the internal name will be in compiler error messages, so don't make the internal name *too* ugly, but if you do it right, you can avoid many of those error messages.&lt;/p&gt;
  7414.  
  7415. &lt;p&gt;Enough overview. Let's write some code.&lt;/p&gt;
  7416.  
  7417. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; sql = &lt;font color=&quot;red&quot;&gt;`
  7418. CREATE TABLE Person (
  7419. id INTEGER NOT NULL,
  7420. name TEXT,
  7421. birthday DATE
  7422. );
  7423. `&lt;/font&gt;;
  7424.  
  7425. &lt;font color=&quot;green&quot;&gt;/*
  7426. This isn't a real sql parser, but it is a basic idea
  7427. good enough for the example.
  7428.  
  7429. When reading a string, it is best to write some kind
  7430. of parser to get structured data. Work with strings
  7431. only when you must.
  7432. */&lt;/font&gt;
  7433.  
  7434. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; SqlColumn {
  7435. string name;
  7436. string type;
  7437. }
  7438.  
  7439. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; SqlTable {
  7440. string name;
  7441. SqlColumn[] columns;
  7442. }
  7443.  
  7444. SqlTable parseSqlTableStatement(string sql) {
  7445. SqlTable table;
  7446.  
  7447. &lt;font color=&quot;green&quot;&gt;// implementation elided, this post
  7448. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// isn't about writing string processing
  7449. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// code :)
  7450. &lt;/font&gt;
  7451. table.name = &lt;font color=&quot;red&quot;&gt;&amp;quot;Person&amp;quot;&lt;/font&gt;;
  7452.  
  7453. table.columns = [
  7454. SqlColumn(&lt;font color=&quot;red&quot;&gt;&amp;quot;id&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;INTEGER&amp;quot;&lt;/font&gt;),
  7455. SqlColumn(&lt;font color=&quot;red&quot;&gt;&amp;quot;name&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;TEXT&amp;quot;&lt;/font&gt;),
  7456. SqlColumn(&lt;font color=&quot;red&quot;&gt;&amp;quot;birthday&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;DATE&amp;quot;&lt;/font&gt;),
  7457. ];
  7458.  
  7459. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; table;
  7460. }
  7461.  
  7462. &lt;font color=&quot;green&quot;&gt;// This is the fancy object. We could generate this class as
  7463. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// a gigantic string, but instead, I'm going to break it up.
  7464. &lt;/font&gt;
  7465. &lt;font color=&quot;green&quot;&gt;// First, a mixin template holds all the declarations and takes
  7466. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;// the string.
  7467. &lt;/font&gt;
  7468. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; SqlTableObject(string sql) {
  7469. &lt;font color=&quot;green&quot;&gt;// Converting the SQL type strings to a D type
  7470. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// will be done with a template that gives a
  7471. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// native D type via a static if list rather
  7472. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// than a string generator.
  7473. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; SqlVariableType(string sqlType) {
  7474. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(sqlType == &lt;font color=&quot;red&quot;&gt;&amp;quot;INTEGER&amp;quot;&lt;/font&gt;)
  7475. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; SqlVariableType = &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;;
  7476. &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(sqlType == &lt;font color=&quot;red&quot;&gt;&amp;quot;DATE&amp;quot;&lt;/font&gt;) {
  7477. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.datetime;
  7478. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; SqlVariableType = Date;
  7479. } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(sqlType == &lt;font color=&quot;red&quot;&gt;&amp;quot;TEXT&amp;quot;&lt;/font&gt;)
  7480. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; SqlVariableType = string;
  7481. &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(0, &lt;font color=&quot;red&quot;&gt;&amp;quot;unknown type &amp;quot;&lt;/font&gt; ~ sqlType);
  7482. }
  7483.  
  7484. &lt;font color=&quot;green&quot;&gt;// this is a uda for reflection
  7485. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; sqlcolumn {
  7486. string name;
  7487. }
  7488.  
  7489. &lt;font color=&quot;green&quot;&gt;// This is the part that generates the variables. It takes
  7490. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// the parsed object and generates the variables just one
  7491. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// at a time. Some string mixin is used, but I keep it small.
  7492. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; SqlVariables(SqlColumn[] columns) {
  7493. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;
  7494. // this UDA will be used for reflection later
  7495. @sqlcolumn(columns[0].name)
  7496. // Notice that the type translation is INSIDE the string.
  7497. // Use of .stringof tends to be a mistake in string mixin
  7498. // code! Use the actual names in the proper scope for best
  7499. // effect. Observe that the Date type will work here despite
  7500. // the import being local to SqlVariableType thanks to this
  7501. // technique. Indeed, thanks to the recursion, we don't even
  7502. // need to generate code for the index! Readable code with
  7503. // just one trivial concatenation.
  7504. SqlVariableType!(columns[0].type) &amp;quot;&lt;/font&gt; ~ columns[0].name ~ &lt;font color=&quot;red&quot;&gt;&amp;quot;;&amp;quot;&lt;/font&gt;);
  7505.  
  7506. &lt;font color=&quot;green&quot;&gt;// There is no static foreach to loop over the array in a
  7507. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// declaration context. We might be tempted to do a helper
  7508. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// function that generates a string via a normal runtime
  7509. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// foreach statement. But that string can get messy fast.
  7510. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;//
  7511. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// As an alternative, I want to use static if with recursion,
  7512. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// to get closer to the original static foreach idea.
  7513. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(columns.length &amp;gt; 1)
  7514. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; SqlVariables!(columns[1 .. $]);
  7515. }
  7516.  
  7517. &lt;font color=&quot;green&quot;&gt;// Now, the object is just a regular declaration, albeit with
  7518. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// a mixin for the variables.
  7519. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; OurSqlTableObject {
  7520. &lt;font color=&quot;green&quot;&gt;// here's the variables being added!
  7521. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; SqlVariables!(parseSqlTableStatement(sql).columns);
  7522.  
  7523. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; save() {
  7524. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  7525. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits;
  7526.  
  7527. &lt;font color=&quot;green&quot;&gt;// and this uses reflection to look at what was generated
  7528. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(idx, variable; getSymbolsByUDA!(OurSqlTableObject, sqlcolumn)) {
  7529. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; name = getSymbolsByUDA!(OurSqlTableObject, sqlcolumn)[idx].stringof;
  7530. writeln(name, &lt;font color=&quot;red&quot;&gt;&amp;quot; = &amp;quot;&lt;/font&gt;, variable);
  7531. }
  7532.  
  7533. }
  7534. }
  7535.  
  7536. &lt;font color=&quot;green&quot;&gt;// Finally, it uses the alias - again in a string mixin - to give it a prettier
  7537. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// name on the outside.
  7538. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;alias &amp;quot;&lt;/font&gt; ~ parseSqlTableStatement(sql).name ~ &lt;font color=&quot;red&quot;&gt;&amp;quot; = OurSqlTableObject;&amp;quot;&lt;/font&gt;);
  7539. }
  7540.  
  7541. &lt;font color=&quot;green&quot;&gt;// Now, by mixing in the whole thing, the magic is done easily for the end user.
  7542. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; SqlTableObject!(sql);
  7543.  
  7544. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  7545. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; person = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Person;
  7546. person.id = 10;
  7547. person.save();
  7548. }
  7549. &lt;/pre&gt;
  7550.  
  7551. &lt;p&gt;A job that may have been a hundred lines of messy string concatenation mixin code is now done
  7552. with mostly traditional techniques and only a couple lines of string mixin. The result is more
  7553. traditionally written code, which is hopefully easier to read, easier to write, and easier to
  7554. understand.&lt;/p&gt;
  7555.  
  7556. &lt;p&gt;String mixins are a great do-it-all tool, but we can avoid them in most cases. I try to use
  7557. them to just fill the small gaps between other language features.&lt;/p&gt;
  7558.  
  7559. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7560. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7561. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7562. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7563. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7564. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7565. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7566. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7567. &lt;/li&gt;&lt;/ul&gt;
  7568.  
  7569.  
  7570. &lt;/div&gt;
  7571. </description></item><item><title>Issue #58</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/final.html</link><guid>http://arsdnet.net/this-week-in-d/final.html</guid><pubDate>Sun, 21 Feb 2016 12:00:00 GMT</pubDate><description>
  7572. &lt;div id=&quot;body-container&quot;&gt;
  7573. &lt;h1&gt;
  7574. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7575. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7576. &lt;span id=&quot;title-date&quot;&gt;February 21, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7577.  
  7578. &lt;div id=&quot;preface&quot;&gt;
  7579.  
  7580. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7581.  
  7582. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7583.  
  7584. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;//arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7585.  
  7586. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7587.  
  7588. &lt;/div&gt;
  7589.  
  7590. &lt;h2&gt;Important Note&lt;/h2&gt;
  7591.  
  7592. &lt;p&gt;This Week in D is back, but at a new location! Go to &lt;a href=&quot;http://dpldocs.info/this-week-in-d/Blog.html&quot;&gt;http://dpldocs.info/this-week-in-d/Blog.html&lt;/a&gt; to get on the new feed.&lt;/p&gt;
  7593.  
  7594.  
  7595. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7596. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7597. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7598. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7599. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7600. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7601. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7602. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7603. &lt;/li&gt;&lt;/ul&gt;
  7604.  
  7605.  
  7606. &lt;/div&gt;
  7607. </description></item><item><title>Issue #57</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-feb-14.html</link><guid>http://arsdnet.net/this-week-in-d/2016-feb-14.html</guid><pubDate>Sun, 14 Feb 2016 12:00:00 GMT</pubDate><description>
  7608. &lt;div id=&quot;body-container&quot;&gt;
  7609. &lt;h1&gt;
  7610. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7611. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7612. &lt;span id=&quot;title-date&quot;&gt;February 14, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7613.  
  7614. &lt;div id=&quot;preface&quot;&gt;
  7615.  
  7616. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7617.  
  7618. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7619.  
  7620. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7621.  
  7622. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7623.  
  7624. &lt;/div&gt;
  7625.  
  7626. &lt;h2&gt;Statistics&lt;/h2&gt;
  7627.  
  7628. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-02-08&amp;amp;chfieldto=2016-02-14&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7629. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-02-08&amp;amp;chfieldto=2016-02-14&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7630. 44 pull requests merged into the language:
  7631.  
  7632. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-08..2016-02-14&quot;&gt;25 into DMD&lt;/a&gt;,
  7633. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-08..2016-02-14&quot;&gt;15 into Phobos&lt;/a&gt;, and
  7634. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-08..2016-02-14&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7635. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-08..2016-02-14&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  7636. &lt;/li&gt;&lt;/ul&gt;
  7637.  
  7638. &lt;h2&gt;In the community&lt;/h2&gt;
  7639.  
  7640. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7641.  
  7642. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n9ddv1$j5u$1@digitalmars.com&quot;&gt;Release vibe.d 0.7.27&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lgamgdbxsvxvndnzzsgt@forum.dlang.org&quot;&gt;unit-threaded v0.5.7 - advanced multi-threaded unit testing library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zxmabeescpomkgsculta@forum.dlang.org&quot;&gt;LDC 0.17.0 has been released!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/frmarwulzoxsojjzpprb@forum.dlang.org&quot;&gt;Poodinis (DI framework) 6.1.0 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kjmjtauonvlxhdaqcpij@forum.dlang.org&quot;&gt;uefi-d: Booting to D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lzcixnfmtqssvelwczyw@forum.dlang.org&quot;&gt;code-debug 0.3.0 released (GDB for vscode)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zxbicdijwlvubnwnddyz@forum.dlang.org&quot;&gt;Found on twitter: a long comparison of C with D, in Russian&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hiebrjcvkeadfixkqwrq@forum.dlang.org&quot;&gt;Berlin D Meetup February 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ucusdwxfrxpmenouiqth@forum.dlang.org&quot;&gt;IDE - Coedit 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xzhjmzvbavpacvpgrkpu@forum.dlang.org&quot;&gt;DigitalWhip - benchmark repo&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n9mdcg$nej$1@digitalmars.com&quot;&gt;Ddb needs a maintainer&lt;/a&gt;
  7643. &lt;/li&gt;&lt;/ul&gt;
  7644.  
  7645. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7646.  
  7647. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  7648.  
  7649. &lt;p&gt;This week, I want to explain away some confusion about &lt;b&gt;string mixins&lt;/b&gt;.&lt;/p&gt;
  7650.  
  7651. &lt;p&gt;A string mixin is used, typically with some string generating code, to inject some dynamic code at compile time into your program and is invoked with the &lt;tt&gt;mixin&lt;/tt&gt; keyword followed by a parenthesized expression yielding a string:&lt;/p&gt;
  7652.  
  7653. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo() {
  7654.   &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a, b;
  7655.   &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; c = &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;a + b&amp;quot;&lt;/font&gt;); &lt;font color=&quot;green&quot;&gt;// same as if you wrote: int c = (a+b);
  7656. &lt;/font&gt;}
  7657. &lt;/pre&gt;
  7658.  
  7659. &lt;p&gt;A static string is of limited value, but with compile-time function evaluation (CTFE), you can generate interesting code:&lt;/p&gt;
  7660.  
  7661. &lt;pre class=&quot;d_code&quot;&gt;string generateCode(string name, string[] members) {
  7662.    string code;
  7663.    code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;struct &amp;quot;&lt;/font&gt;~name~&lt;font color=&quot;red&quot;&gt;&amp;quot; {\n&amp;quot;&lt;/font&gt;;
  7664.    &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(member; members)
  7665.     code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;\tint &amp;quot;&lt;/font&gt; ~ member ~ &lt;font color=&quot;red&quot;&gt;&amp;quot;;\n&amp;quot;&lt;/font&gt;;
  7666.    code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;}\n&amp;quot;&lt;/font&gt;;
  7667.    &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; code;
  7668. }
  7669.  
  7670. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(generateCode(&lt;font color=&quot;red&quot;&gt;&amp;quot;Test&amp;quot;&lt;/font&gt;, [&lt;font color=&quot;red&quot;&gt;&amp;quot;a&amp;quot;&lt;/font&gt;, &lt;font color=&quot;red&quot;&gt;&amp;quot;b&amp;quot;&lt;/font&gt;])); &lt;font color=&quot;green&quot;&gt;// injects code:
  7671. &lt;/font&gt;&lt;font color=&quot;green&quot;&gt;/*
  7672.   struct Test {
  7673.       int a;
  7674.       int b;
  7675.   }
  7676. */&lt;/font&gt;
  7677. &lt;font color=&quot;green&quot;&gt;// as if you wrote that yourself
  7678. &lt;/font&gt;
  7679. &lt;/pre&gt;
  7680.  
  7681. &lt;p&gt;OK, so we know what it is, but what is it not?&lt;/p&gt;
  7682.  
  7683. &lt;p&gt;A string mixin is NOT source code injection. Consider the following:&lt;/p&gt;
  7684.  
  7685. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[] arr = [&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(&lt;font color=&quot;red&quot;&gt;&amp;quot;1, 2, 3&amp;quot;&lt;/font&gt;)];
  7686.    &lt;font color=&quot;green&quot;&gt;// verses
  7687. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[] arr = [1, 2, 3];
  7688. &lt;/pre&gt;
  7689.  
  7690. &lt;p&gt;If it was source code injection, you'd expect those two lines to be the same, but it isn't, and they aren't. The first array will have only one element! What's going on here?&lt;/p&gt;
  7691.  
  7692. &lt;p&gt;The spec says &lt;a href=&quot;http://dlang.org/spec/expression.html#MixinExpression&quot;&gt;&amp;quot;The AssignExpression must evaluate at compile time to a constant string. The text contents of the string must be compilable as a valid Expression, and is compiled as such.&amp;quot;&lt;/a&gt;. This is compiler-writer speak that basically says it is treated as if you wrote:&lt;/p&gt;
  7693.  
  7694. &lt;pre class=&quot;d_code&quot;&gt;    CodeNode node = compile_this_source(&lt;font color=&quot;red&quot;&gt;&amp;quot;the string you are mixing in&amp;quot;&lt;/font&gt;);
  7695.    node.injectHere();
  7696. &lt;/pre&gt;
  7697.  
  7698. &lt;p&gt;or a bit less abstractly, think of the result if you ran:&lt;/p&gt;
  7699.  
  7700. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; result = the string you are mixing &lt;font color=&quot;blue&quot;&gt;in&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// this is the AssignExpression magic
  7701. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// now replace the mixin() expression with the variable `result`
  7702. &lt;/font&gt;&lt;/pre&gt;
  7703.  
  7704. &lt;p&gt;That's not what really happens, but would give a similar result.&lt;/p&gt;
  7705.  
  7706. &lt;p&gt;See, the code inside the string is compiled separately from its context. In the array example, the mixin doesn't know it is inside &lt;tt&gt;[]&lt;/tt&gt; brackets. It just sees &lt;tt&gt;1, 2, 3&lt;/tt&gt; and compiles it as stand-alone code, giving a result as if it was the code on the right-hand side of the equals sign in an assignment.&lt;/p&gt;
  7707.  
  7708. &lt;p&gt;&lt;tt&gt;1,2,3&lt;/tt&gt;, in that stand-alone context, is compiled as a CommaExpression - yes, the dreaded comma operator which evaluates the first part, then discards its result and moves on to the second part. This is somewhat infrequently used, but is most commonly seen in C &lt;tt&gt;for&lt;/tt&gt; loops and a handful of other contexts where you'd probably use semicolon-separated expression statements if the grammar allowed it.&lt;/p&gt;
  7709.  
  7710. &lt;p&gt;So standing alone, &lt;tt&gt;1,2,3&lt;/tt&gt; simply yields &lt;tt&gt;3&lt;/tt&gt;, which is then inserted into the brackets, giving &lt;tt&gt;[3]&lt;/tt&gt; in that example, a single element array, not &lt;tt&gt;[1, 2, 3]&lt;/tt&gt;.&lt;/p&gt;
  7711.  
  7712. &lt;p&gt;Source code injection, on the other hand, would be parsed differently because commas can mean other things in other contexts. In an array literal, you don't see comma expressions (unless they are in parenthesis): commas instead separate elements. In a function call, they separate arguments to the function. These different meanings of the comma require the context to be known to the parser, and in a mixin, unless the context is itself part of the mixin string, it just isn't known.&lt;/p&gt;
  7713.  
  7714. &lt;p&gt;String mixins are actually closer to AST macros than they are to textual macros. They return a parsed block of code which is inserted into the compiler's internal data structures, not a string which is pasted into your source.&lt;/p&gt;
  7715.  
  7716. &lt;p&gt;String mixins are also closer to &lt;tt&gt;eval&lt;/tt&gt; in dynamic languages than they are to code pasting, in that &lt;tt&gt;eval&lt;/tt&gt; also fires up a separate copy of the interpreter to run the code string independently of lexical context (albeit using the context of existing dynamic variables, etc.) rather than just pasting in a string to the source. Of course, the huge difference between &lt;tt&gt;mixin&lt;/tt&gt; and &lt;tt&gt;eval&lt;/tt&gt; is that &lt;tt&gt;mixin&lt;/tt&gt; doesn't actually *run* the code. It just *compiles* it and it is a wholly compile-time construct. &lt;tt&gt;eval&lt;/tt&gt;, in languages like PHP or Javascript, on the other hand, do actually run the code.&lt;/p&gt;
  7717.  
  7718. &lt;hr /&gt;
  7719.  
  7720. &lt;p&gt;I hope I didn't confuse you even more than before. But really, just remember that a string mixin is NOT pasting in the code and you will get some helpful insights.&lt;/p&gt;
  7721.  
  7722. &lt;p&gt;Next week, I may talk about some tips to keep your mixin strings as small as possible, because they can get ugly quickly...&lt;/p&gt;
  7723.  
  7724. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7725. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7726. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7727. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7728. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7729. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7730. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7731. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7732. &lt;/li&gt;&lt;/ul&gt;
  7733.  
  7734.  
  7735. &lt;/div&gt;
  7736. </description></item><item><title>Issue #56</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-feb-07.html</link><guid>http://arsdnet.net/this-week-in-d/2016-feb-07.html</guid><pubDate>Sun, 07 Feb 2016 12:00:00 GMT</pubDate><description>
  7737. &lt;div id=&quot;body-container&quot;&gt;
  7738. &lt;h1&gt;
  7739. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7740. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7741. &lt;span id=&quot;title-date&quot;&gt;February 7, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7742.  
  7743. &lt;div id=&quot;preface&quot;&gt;
  7744.  
  7745. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7746.  
  7747. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7748.  
  7749. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7750.  
  7751. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7752.  
  7753. &lt;/div&gt;
  7754.  
  7755. &lt;h2&gt;Statistics&lt;/h2&gt;
  7756.  
  7757. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-02-01&amp;amp;chfieldto=2016-02-07&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;19 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7758. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-02-01&amp;amp;chfieldto=2016-02-07&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;15 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7759. 55 pull requests merged into the language:
  7760.  
  7761. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-01..2016-02-07&quot;&gt;47 into DMD&lt;/a&gt;,
  7762. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-01..2016-02-07&quot;&gt;7 into Phobos&lt;/a&gt;, and
  7763. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-01..2016-02-07&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7764. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-02-01..2016-02-07&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  7765. &lt;/li&gt;&lt;/ul&gt;
  7766.  
  7767. &lt;h2&gt;Major Changes&lt;/h2&gt;
  7768.  
  7769. &lt;p&gt;A flurry of small pull requests on dmd aimed to move forward the D-style refactoring. dmd has been converted from C++ to D, but still doesn't take much advantage of D's features. The changes are being done slowly to avoid regressions as the refactoring is done.&lt;/p&gt;
  7770.  
  7771. &lt;h2&gt;In the community&lt;/h2&gt;
  7772.  
  7773. &lt;h3&gt;Notable threads&lt;/h3&gt;
  7774.  
  7775. &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/programming/comments/44il5j/things_that_keep_d_from_evolving/&quot;&gt;&amp;quot;Things that keep D from evolving?&amp;quot;&lt;/a&gt; was a thread that made it to Reddit. It hasn't gotten much attention yet, though the talk so far has been about memory management not being revolutionary and some people feel the language has already become too large.&lt;/p&gt;
  7776.  
  7777. &lt;p&gt;There has also been &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pull/3971&quot;&gt;a pull request with discussion&lt;/a&gt; about adding a trivial &lt;tt&gt;print&lt;/tt&gt; function that adds separators between arguments. I think this is notable because it speaks to some Phobos philosophy.&lt;/p&gt;
  7778.  
  7779. &lt;p&gt;Phobos is simultaneously pulled in several directions: it wants to be approachable, but it wants to be flexible. It wants to be deep and orthogonal, yet it wants to be comprehensive.&lt;/p&gt;
  7780.  
  7781. &lt;p&gt;Historically, Walter's position is that Phobos shouldn't have any thin wrappers. He felt that if something can be done in just a few lines of code, then there should not be a Phobos function for it. He has warned against making it a huge bag of shallow functions.&lt;/p&gt;
  7782.  
  7783. &lt;p&gt;Andrei, on the other hand, has been advocating a &amp;quot;batteries included&amp;quot; philosophy, and wants it to do more to be immediately useful to the new user... but he also wants it to be written with a high quality toward genericness and flexibility.&lt;/p&gt;
  7784.  
  7785. &lt;p&gt;And, of course, the wildcard in the whole debate is that of a package manager. Dub has entered the scene and gotten a fair amount of traction in the community, but is not seen by the main players as a piece of the Phobos puzzle, but rather as a supplemental tool.&lt;/p&gt;
  7786.  
  7787. &lt;p&gt;That PR comments thread is a microcosm of this old debate, and the way it ends up going may prove to be an indicator of Phobos' direction in the coming year. Andrei's eagerness to expand the library is probably a good thing, though the question of how it expands is up in the air.&lt;/p&gt;
  7788.  
  7789. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7790.  
  7791. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n8mbe0$1es$1@digitalmars.com&quot;&gt;Beginning D: Unittesting, IntelliJ, &amp;amp; Dub&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jbmxowmorebsebyhcvbf@forum.dlang.org&quot;&gt;Utah Meetup group&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n8tc1l$93p$1@digitalmars.com&quot;&gt;Article: We're Overlooking A Key Part of C/C++ to D User Migration&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yuyuwdurysvcgfpfmhhu@forum.dlang.org&quot;&gt;D popularity clearly on the rise in early 2016?!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yrcbbvyrtwpdftrsgocp@forum.dlang.org&quot;&gt;IDE - Coedit 2 rc1&lt;/a&gt;
  7792. &lt;/li&gt;&lt;/ul&gt;
  7793.  
  7794. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7795.  
  7796. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  7797.  
  7798. &lt;p&gt;The compiler has semi-internal names for constructors and destructors, which are normally named via the &lt;tt&gt;this&lt;/tt&gt; keyword: &lt;tt&gt;__ctor&lt;/tt&gt; and &lt;tt&gt;__dtor&lt;/tt&gt;.&lt;/p&gt;
  7799.  
  7800. &lt;p&gt;If you are trying to reference them in a context where the &lt;tt&gt;this&lt;/tt&gt; keyword is not accepted, try using the &lt;tt&gt;__ctor&lt;/tt&gt; or &lt;tt&gt;__dtor&lt;/tt&gt; alternative names instead.&lt;/p&gt;
  7801.  
  7802. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; M() {
  7803. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;) {}
  7804. }
  7805.  
  7806. &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Foo {
  7807. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; M mixedin;
  7808. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(string) {}
  7809. &lt;font color=&quot;green&quot;&gt;// alias this = mixedin.this; fails to compile
  7810. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; __ctor = mixedin.__ctor; &lt;font color=&quot;green&quot;&gt;// but this works
  7811. &lt;/font&gt;}
  7812. &lt;/pre&gt;
  7813.  
  7814. &lt;div class=&quot;tip&quot;&gt;  &lt;p&gt;BTW, if you swap the order of the constructor declaration and the alias line in that example, it will no longer compile.&lt;/p&gt;
  7815.  
  7816.  &lt;p&gt;&lt;tt&gt;l.d(7): Error: alias l.Foo.__ctor is not a constructor; identifiers starting with __ are reserved for the implementation&lt;/tt&gt;&lt;/p&gt;
  7817.  
  7818.  &lt;p&gt;The leading double underscore is technically a reserved word and not supposed to be used in user code, however it is the only way to make certain things work. Use it carefully and remember there might be strange edge cases that need other workarounds, like here, defining the constructor first so the name is already in scope by the time you try to use it.&lt;/p&gt;
  7819. &lt;/div&gt;
  7820.  
  7821. &lt;p&gt;The code above uses &lt;tt&gt;alias&lt;/tt&gt; to bring the mixed in constructor into the overload set, allowing both &lt;tt&gt;this(int)&lt;/tt&gt; and &lt;tt&gt;this(string)&lt;/tt&gt; to be used by consumer code.&lt;/p&gt;
  7822.  
  7823. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7824. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7825. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7826. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7827. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7828. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7829. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7830. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7831. &lt;/li&gt;&lt;/ul&gt;
  7832.  
  7833.  
  7834. &lt;/div&gt;
  7835. </description></item><item><title>Issue #55</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jan-31.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jan-31.html</guid><pubDate>Sun, 31 Jan 2016 12:00:00 GMT</pubDate><description>
  7836. &lt;div id=&quot;body-container&quot;&gt;
  7837. &lt;h1&gt;
  7838. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7839. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7840. &lt;span id=&quot;title-date&quot;&gt;January 31, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7841.  
  7842. &lt;div id=&quot;preface&quot;&gt;
  7843.  
  7844. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7845.  
  7846. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7847.  
  7848. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7849.  
  7850. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7851.  
  7852. &lt;/div&gt;
  7853.  
  7854. &lt;h2&gt;Statistics&lt;/h2&gt;
  7855.  
  7856. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-01-25&amp;amp;chfieldto=2016-01-31&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7857. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-01-25&amp;amp;chfieldto=2016-01-31&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;28 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7858. 44 pull requests merged into the language:
  7859.  
  7860. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-25..2016-01-31&quot;&gt;28 into DMD&lt;/a&gt;,
  7861. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-25..2016-01-31&quot;&gt;9 into Phobos&lt;/a&gt;, and
  7862. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-25..2016-01-31&quot;&gt;7 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7863. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-25..2016-01-31&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  7864. &lt;/li&gt;&lt;/ul&gt;
  7865.  
  7866. &lt;h2&gt;Major Changes&lt;/h2&gt;
  7867.  
  7868. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n8bbs9$1p8h$1@digitalmars.com&quot;&gt;DMD 2.070.0&lt;/a&gt; was released this week. It includes the official packaging of the new win32 bindings.&lt;/p&gt;
  7869.  
  7870. &lt;h2&gt;In the community&lt;/h2&gt;
  7871.  
  7872. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7873.  
  7874. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gpktxgbcrjyqqhpxyird@forum.dlang.org&quot;&gt;New DCD and dfmt betas&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pholllvotxtbutiswedc@forum.dlang.org&quot;&gt;GDC Explorer Site Update&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kjtlbdkbzjhpjwmlhjep@forum.dlang.org&quot;&gt;LDC 0.17.0-beta2 has been released!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ieddlynbverfprcjukfb@forum.dlang.org&quot;&gt;Sublime Text 3 Gets Better D Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n841pk$2d5v$1@digitalmars.com&quot;&gt;Vision for the first semester of 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n8mbe0$1es$1@digitalmars.com&quot;&gt;Beginning D: Unittesting, IntelliJ, &amp;amp; Dub&lt;/a&gt;
  7875. &lt;/li&gt;&lt;/ul&gt;
  7876.  
  7877. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7878.  
  7879. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  7880.  
  7881. &lt;p&gt;Today, I want to write about comments. Yes, what code does should be easy to see from the name or the code itself. But why it is doing that is an entirely different story and that's where comments are uniquely useful.&lt;/p&gt;
  7882.  
  7883. &lt;p&gt;Everybody knows &lt;tt&gt;/* add one to i */ i += 1;&lt;/tt&gt; is useless. Even &lt;tt&gt;/* skip past closing character */ i += 1;&lt;/tt&gt; is arguably best written as &lt;tt&gt;skipPastClosingCharacter();&lt;/tt&gt; or whatever.&lt;/p&gt;
  7884.  
  7885. &lt;p&gt;But we shouldn't say &amp;quot;you shouldn't need comments&amp;quot; just because &lt;tt&gt;i += 1&lt;/tt&gt; is easy to read because there can still be a legitimate question: Why is it there? Why do we need to skip past the closing character? Why isn't it done elsewhere?&lt;/p&gt;
  7886.  
  7887. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;/* findCloser leaves us on the closing character but we don't want to process it */&lt;/font&gt;
  7888. i += 1;
  7889. &lt;/pre&gt;
  7890.  
  7891. &lt;p&gt;That's quite a bit more interesting now.&lt;/p&gt;
  7892.  
  7893. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;/* returns the remainder, including the closing character, so you can test what it was */&lt;/font&gt;
  7894. &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt; findCloser() {}
  7895. &lt;/pre&gt;
  7896.  
  7897.  
  7898. &lt;p&gt;Now the reader understands the rationale for this choice and can take that into consideration when they go to fix &amp;quot;bugs&amp;quot; (is it a bug or did you just not understand the purpose?) or refactor or whatever.&lt;/p&gt;
  7899.  
  7900.  
  7901. &lt;p&gt;Working on Github recently, I've seen a lot of this happen in github comments. That sucks! (Actually, I think most github comments ought to be replaced with code edits, but that's another story.) When someone is reading the new file, they won't see github comments, and they can be pretty hard to find even if you go hunting with blame and whatnot. But they will see code comments, and they will be right there, in full context.&lt;/p&gt;
  7902.  
  7903. &lt;p&gt;If you are writing code and anticipate a reviewer to ask a question, don't email them. Comment the code with the answer! Or any other place where a reader might say &amp;quot;why?&amp;quot; or &amp;quot;I think I'm going to change this&amp;quot; and you think they shouldn't, comment that.&lt;/p&gt;
  7904.  
  7905.  
  7906. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7907. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7908. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7909. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7910. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7911. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7912. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7913. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7914. &lt;/li&gt;&lt;/ul&gt;
  7915.  
  7916.  
  7917. &lt;/div&gt;
  7918. </description></item><item><title>Issue #54</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jan-24.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jan-24.html</guid><pubDate>Sun, 24 Jan 2016 12:00:00 GMT</pubDate><description>
  7919. &lt;div id=&quot;body-container&quot;&gt;
  7920. &lt;h1&gt;
  7921. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7922. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7923. &lt;span id=&quot;title-date&quot;&gt;January 24, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7924.  
  7925. &lt;div id=&quot;preface&quot;&gt;
  7926.  
  7927. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7928.  
  7929. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7930.  
  7931. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7932.  
  7933. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7934.  
  7935. &lt;/div&gt;
  7936.  
  7937. &lt;h2&gt;Statistics&lt;/h2&gt;
  7938.  
  7939. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-01-18&amp;amp;chfieldto=2016-01-24&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7940. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-01-18&amp;amp;chfieldto=2016-01-24&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  7941. 18 pull requests merged into the language:
  7942.  
  7943. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-18..2016-01-24&quot;&gt;6 into DMD&lt;/a&gt;,
  7944. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-18..2016-01-24&quot;&gt;7 into Phobos&lt;/a&gt;, and
  7945. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-18..2016-01-24&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7946. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-18..2016-01-24&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  7947. &lt;/li&gt;&lt;/ul&gt;
  7948.  
  7949. &lt;h2&gt;Major Changes&lt;/h2&gt;
  7950.  
  7951. &lt;p&gt;C++ interfacing continues to grow in git, now including multiple inheritance and some front end work for exception catching. See:
  7952. &lt;a href=&quot;http://forum.dlang.org/thread/n7jorc$1ied$1@digitalmars.com&quot;&gt;D is now catching C++ exceptions!&lt;/a&gt;&lt;/p&gt;
  7953.  
  7954. &lt;p&gt;Andrei also wrote a &lt;a href=&quot;http://forum.dlang.org/thread/n841pk$2d5v$1@digitalmars.com&quot;&gt;vision for the first half of 2016&lt;/a&gt;, setting memory management, tooling, C++ integration, and other goals.&lt;/p&gt;
  7955.  
  7956. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/fglyajphcqvwfyuklohr@forum.dlang.org&quot;&gt;Ever want to compile D on your Android phone? Well, now you can!&lt;/a&gt; announces an alpha build of LDC for Android!&lt;/p&gt;
  7957.  
  7958. &lt;h2&gt;In the community&lt;/h2&gt;
  7959.  
  7960. &lt;h3&gt;Community announcements&lt;/h3&gt;
  7961.  
  7962. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7u01r$kpm$1@digitalmars.com&quot;&gt;DConf 2016 Second Call for Submissions&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/swkbqwqqogyqflefjhqx@forum.dlang.org&quot;&gt;wiringPi-D-the D wrapper for WiringPi, is ok&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ukxisgarrlxmerqyikzv@forum.dlang.org&quot;&gt;Tutorial on using eclipse with D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n83o1c$20nc$1@digitalmars.com&quot;&gt;First crack at D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/sbbipskredskddvbimvg@forum.dlang.org&quot;&gt;very simple pure CPU raymarching demo&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7t2ug$2ft9$1@digitalmars.com&quot;&gt;vibe.d 0.7.27-beta.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7u2tb$pe3$1@digitalmars.com&quot;&gt;Bruce Eckel is evaluating languages&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mlnxxbkozrbiimxkjkmy@forum.dlang.org&quot;&gt;Walter on his experience as a dev, on running an open source project and D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7uff0$196n$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup January 28, 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/owriwcszzjkkfpbrluhu@forum.dlang.org&quot;&gt;blog post - &amp;quot;An illustrated guide to using Sublime Text 3 for D programming&amp;quot;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/dcywzsyofcytaccavgfe@forum.dlang.org&quot;&gt;D Article: Memory Safety&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7nii5$qo2$1@digitalmars.com&quot;&gt;Airfares to Berlin for DConf 2016&lt;/a&gt;
  7963. &lt;/li&gt;&lt;/ul&gt;
  7964.  
  7965. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  7966.  
  7967. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  7968. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  7969. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7970. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7971. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  7972. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  7973. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  7974. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  7975. &lt;/li&gt;&lt;/ul&gt;
  7976.  
  7977.  
  7978. &lt;/div&gt;
  7979. </description></item><item><title>Issue #53</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jan-17.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jan-17.html</guid><pubDate>Sun, 17 Jan 2016 12:00:00 GMT</pubDate><description>
  7980. &lt;div id=&quot;body-container&quot;&gt;
  7981. &lt;h1&gt;
  7982. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  7983. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  7984. &lt;span id=&quot;title-date&quot;&gt;January 17, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  7985.  
  7986. &lt;div id=&quot;preface&quot;&gt;
  7987.  
  7988. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  7989.  
  7990. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  7991.  
  7992. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  7993.  
  7994. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  7995.  
  7996. &lt;/div&gt;
  7997.  
  7998. &lt;h2&gt;Statistics&lt;/h2&gt;
  7999.  
  8000. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-01-11&amp;amp;chfieldto=2016-01-17&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8001. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-01-11&amp;amp;chfieldto=2016-01-17&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;17 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8002. 39 pull requests merged into the language:
  8003.  
  8004. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-11..2016-01-17&quot;&gt;9 into DMD&lt;/a&gt;,
  8005. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-11..2016-01-17&quot;&gt;21 into Phobos&lt;/a&gt;, and
  8006. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-11..2016-01-17&quot;&gt;9 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8007. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-11..2016-01-17&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  8008. &lt;/li&gt;&lt;/ul&gt;
  8009.  
  8010. &lt;h2&gt;Major Changes&lt;/h2&gt;
  8011.  
  8012. &lt;p&gt;The new &lt;a href=&quot;http://dlang.org/&quot;&gt;dlang.org website&lt;/a&gt; design is live.&lt;/p&gt;
  8013.  
  8014. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ombebxyahbklhlywtazn@forum.dlang.org&quot;&gt;LDC 0.17.0-beta1 has been released!&lt;/a&gt;&lt;/p&gt;
  8015.  
  8016. &lt;p&gt;And &lt;a href=&quot;http://forum.dlang.org/thread/n7gv4j$qch$1@digitalmars.com&quot;&gt;Beta D 2.070.0-b2&lt;/a&gt; has been released.&lt;/p&gt;
  8017.  
  8018. &lt;p&gt;In git, D also gained more support for catching C++ exception, and the website is getting better interlinking capability.&lt;/p&gt;
  8019.  
  8020. &lt;h2&gt;In the community&lt;/h2&gt;
  8021.  
  8022. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8023.  
  8024. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wtlqyrrcdaaqmaltgvmf@forum.dlang.org&quot;&gt;Wandbox: A new online editor/runner with dmd and gdc!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wndtgcibeqhlkwnjfyhe@forum.dlang.org&quot;&gt;New D tool releases - DCD, dfmt, dscanner, dfix, dparse, and more&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yiidahxzjclqdrjqoydz@forum.dlang.org&quot;&gt;DCD and dfmt bugfix releases&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7e1hq$5e$1@digitalmars.com&quot;&gt;Type safe OpenGL - Converting strings into types in D by Maik Klein&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n7dt3l$2rqj$1@digitalmars.com&quot;&gt;DStep 0.2.1 - tool for automatically generating bindings from C&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fkmbvkgbzxihdlblrkqx@forum.dlang.org&quot;&gt;Logo for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cnbupfsddalzqreisrrv@forum.dlang.org&quot;&gt;Using D with IntelliJ&lt;/a&gt;
  8025. &lt;/li&gt;&lt;/ul&gt;
  8026.  
  8027. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8028.  
  8029. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8030.  
  8031. &lt;p&gt;Here's a quick debugging tip: when testing code, you can paste this line scattered throughout your code to get it to print out the last line executed:&lt;/p&gt;
  8032.  
  8033. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;writeln(&lt;font color=&quot;blue&quot;&gt;__LINE__&lt;/font&gt;); &lt;font color=&quot;green&quot;&gt;// know which line was last executed
  8034. &lt;/font&gt;&lt;/pre&gt;
  8035.  
  8036. &lt;p&gt;The magic tokens in D, &lt;tt&gt;__LINE__&lt;/tt&gt;, &lt;tt&gt;__FILE__&lt;/tt&gt;, &lt;tt&gt;__FUNCTION__&lt;/tt&gt;, &lt;tt&gt;__MODULE__&lt;/tt&gt;, and &lt;tt&gt;__PRETTY_FUNCTION__&lt;/tt&gt;, are all replaced at compile time with information about their context, and best yet, can even appear as default arguments in a function to get information about the &lt;i&gt;call site&lt;/i&gt;!&lt;/p&gt;
  8037.  
  8038. &lt;p&gt;The &lt;tt&gt;Exception&lt;/tt&gt; constructor uses default arguments of &lt;tt&gt;__LINE__&lt;/tt&gt; and &lt;tt&gt;__FILE__&lt;/tt&gt; to store the place where the exception was constructed, and this works in any function.&lt;/p&gt;
  8039.  
  8040. &lt;p&gt;Between default arguments and convenient single lines you can easily cut and paste around to help debug code, these magic tokens are really helpful to remember.&lt;/p&gt;
  8041.  
  8042. &lt;p&gt;Learn more &lt;a href=&quot;http://dlang.org/spec/traits.html#specialkeywords&quot;&gt;here in the spec&lt;/a&gt;.&lt;/p&gt;
  8043.  
  8044. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8045. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8046. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8047. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8048. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8049. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8050. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8051. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8052. &lt;/li&gt;&lt;/ul&gt;
  8053.  
  8054.  
  8055. &lt;/div&gt;
  8056. </description></item><item><title>Issue #52</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jan-10.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jan-10.html</guid><pubDate>Sun, 10 Jan 2016 12:00:00 GMT</pubDate><description>
  8057. &lt;div id=&quot;body-container&quot;&gt;
  8058. &lt;h1&gt;
  8059. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8060. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8061. &lt;span id=&quot;title-date&quot;&gt;January 10, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8062.  
  8063. &lt;div id=&quot;preface&quot;&gt;
  8064.  
  8065. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8066.  
  8067. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8068.  
  8069. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8070.  
  8071. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8072.  
  8073. &lt;/div&gt;
  8074.  
  8075. &lt;h2&gt;Statistics&lt;/h2&gt;
  8076.  
  8077. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2016-01-04&amp;amp;chfieldto=2016-01-10&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8078. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2016-01-04&amp;amp;chfieldto=2016-01-10&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;35 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8079. 40 pull requests merged into the language:
  8080.  
  8081. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-04..2016-01-10&quot;&gt;13 into DMD&lt;/a&gt;,
  8082. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-04..2016-01-10&quot;&gt;16 into Phobos&lt;/a&gt;, and
  8083. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-04..2016-01-10&quot;&gt;0 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8084. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2016-01-04..2016-01-10&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  8085. &lt;/li&gt;&lt;/ul&gt;
  8086.  
  8087. &lt;h2&gt;Major Changes&lt;/h2&gt;
  8088.  
  8089. &lt;p&gt;This week had a flurry of activity after the holiday lull, with the biggest change being a redesign of the dlang.org website going temporarily live, but reverted pending a few minor bugs and testing. We expect it will be made permanently live later in the week.&lt;/p&gt;
  8090.  
  8091. &lt;p&gt;The new design was actually an old design, by Ivan Smirnov, revived by Jacob Carlborg, and &lt;a href=&quot;http://forum.dlang.org/post/n6pdes$1upn$1@digitalmars.com&quot;&gt;implemented by a user going only by anonymous&lt;/a&gt;. It is a lighter theme that most the community likes, though it may have been brought live slightly prematurely and will probably have a few more little tweaks going forward, but the redesign will certainly be staying.&lt;/p&gt;
  8092.  
  8093. &lt;p&gt;In other news, &lt;a href=&quot;http://blog.livecoding.tv/2015/12/26/choose-the-right-coding-category/&quot;&gt;livecoding.tv now supports D tag&lt;/a&gt;, showing growing awareness of D!&lt;/p&gt;
  8094.  
  8095. &lt;h2&gt;In the community&lt;/h2&gt;
  8096.  
  8097. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8098.  
  8099. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n6dh08$2mcg$1@digitalmars.com&quot;&gt;Writing a scalable chat room service in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mailman.3363.1452073954.22025.digitalmars-d-announce@puremagic.com&quot;&gt;D Cookbook [eBook] Free on PackPub&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kolnopbozjtcrxgpanbi@forum.dlang.org&quot;&gt;Berlin D Meetup January 2016&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xtumfdriuezdsfijfjqp@forum.dlang.org&quot;&gt;My LLVM talk @ FOSDEM'16&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n6odlg$j2n$1@digitalmars.com&quot;&gt;Andrei on Optimization&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wnrtijnejqtlcxpoukes@forum.dlang.org&quot;&gt;Flipboard collection of D articles&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cgllhybyzglcriynvfcg@forum.dlang.org&quot;&gt;Next London D Meetup: Wednesday 20th January 2016&lt;/a&gt;
  8100. &lt;/li&gt;&lt;/ul&gt;
  8101.  
  8102. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8103.  
  8104. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8105.  
  8106. &lt;p&gt;This week's tip is not D specific, but one I feel is important: &lt;b&gt;when writing tests, make sure you cover the edge cases&lt;/b&gt;.&lt;/p&gt;
  8107.  
  8108. &lt;p&gt;The main metric I see people talk about with testing, especially in D with its built-in code coverage analyzer via &lt;tt&gt;dmd -cov&lt;/tt&gt;, is the percentage of code lines covered by tests. However, I feel the percentage of the &lt;i&gt;problem domain&lt;/i&gt; covered is more important... and harder to automatically measure.&lt;/p&gt;
  8109.  
  8110. &lt;p&gt;Code coverage will ensure your tests cover the implementation, but will not ensure your tests cover the actual problem. You need to understand the problem well enough to know what the edge cases are where you might have forgotten an important branch in the code.&lt;/p&gt;
  8111.  
  8112. &lt;p&gt;Make sure you cover various different types of input. If an algorithm depends on chunking, be sure you test it with input of various chunk sizes, including a partial chunk, two chunks, one and a partial chunk, and exactly one chunk. I once wrote an implementation of a hash algorithm that worked on all input... unless the input was exactly 64 bytes long, the length of one chunk. My implementation incorrectly padded it by an extra byte there. The unit tests covered all the code... but the code didn't cover the full problem domain.&lt;/p&gt;
  8113.  
  8114. &lt;p&gt;Similarly, no date/time library is complete without checking the times right around daylight saving transitions and leap years.&lt;/p&gt;
  8115.  
  8116. &lt;p&gt;I saw a URL library with a lot of tests that looked good and had 100% coverage, but never implemented nor tested &lt;tt&gt;//domain.com/file.html&lt;/tt&gt; links, which are common on the web.&lt;/p&gt;
  8117.  
  8118. &lt;p&gt;The list goes on. Don't mistake fully tested &lt;i&gt;code&lt;/i&gt; with a fully tested &lt;i&gt;solution&lt;/i&gt;. Having a comprehensive knowledge of the problem and relevant background is necessary to write correct tests as well as correct code. Take your time to see a variety of real world and apply as much contextual knowledge as you can when writing tests.&lt;/p&gt;
  8119.  
  8120.  
  8121. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8122. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8123. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8124. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8125. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8126. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8127. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8128. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8129. &lt;/li&gt;&lt;/ul&gt;
  8130.  
  8131.  
  8132. &lt;/div&gt;
  8133. </description></item><item><title>Issue #51</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/2016-jan-03.html</link><guid>http://arsdnet.net/this-week-in-d/2016-jan-03.html</guid><pubDate>Sun, 03 Jan 2016 12:00:00 GMT</pubDate><description>
  8134. &lt;div id=&quot;body-container&quot;&gt;
  8135. &lt;h1&gt;
  8136. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8137. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8138. &lt;span id=&quot;title-date&quot;&gt;January 3, 2016&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8139.  
  8140. &lt;div id=&quot;preface&quot;&gt;
  8141.  
  8142. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8143.  
  8144. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8145.  
  8146. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8147.  
  8148. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8149.  
  8150. &lt;/div&gt;
  8151.  
  8152. &lt;h2&gt;Statistics&lt;/h2&gt;
  8153.  
  8154. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-12-28&amp;amp;chfieldto=2016-01-03&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;4 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8155. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-12-28&amp;amp;chfieldto=2016-01-03&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;26 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8156. 12 pull requests merged into the language:
  8157.  
  8158. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-28..2016-01-03&quot;&gt;8 into DMD&lt;/a&gt;,
  8159. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-28..2016-01-03&quot;&gt;6 into Phobos&lt;/a&gt;, and
  8160. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-28..2016-01-03&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8161. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-28..2016-01-03&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  8162. &lt;/li&gt;&lt;/ul&gt;
  8163.  
  8164. &lt;h2&gt;Major Changes&lt;/h2&gt;
  8165.  
  8166. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n6bsnt$iuc$1@digitalmars.com&quot;&gt;Beta D 2.070-b1&lt;/a&gt; was released today. It includes a new package &lt;a href=&quot;https://www.reddit.com/r/programming/comments/3z6f7a/using_d_and_stdndslice_as_a_numpy_replacement/&quot;&gt;std.experimental.ndslice&lt;/a&gt;, DWARF-based exception handling on Linux which is a major step toward compatibility with C++ exceptions, and, finally, full Windows headers!&lt;/p&gt;
  8167.  
  8168. &lt;p&gt;The library change of &lt;tt&gt;TypeInfo.init&lt;/tt&gt; to &lt;tt&gt;TypeInfo.initializer&lt;/tt&gt; is also liable to break some low-level code, so be on the lookout for it if you've written anything on that level.&lt;/p&gt;
  8169.  
  8170. &lt;p&gt;The git commits this week included a small change to &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1458&quot;&gt;add indication of which test started&lt;/a&gt; when running unittests so you can see which one was starting in the event of a crash. This is a small change but should help people track bugs down a little more easily.&lt;/p&gt;
  8171.  
  8172. &lt;p&gt;The ddoc generator also got &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pull/5311&quot;&gt;improved constraint and overload formatting&lt;/a&gt;.&lt;/p&gt;
  8173.  
  8174. &lt;p&gt;Meanwhile, my unofficial doc generator continued to be developed at a quick pace and is approaching half done. See its current state &lt;a href=&quot;http://dpldocs.info/experimental-docs/std.array.join.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  8175.  
  8176. &lt;h2&gt;In the community&lt;/h2&gt;
  8177.  
  8178. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8179.  
  8180. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/flhwremfrxyaixdokkjv@forum.dlang.org&quot;&gt;Better docs for D (WIP) announces the project spotlit here last week&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wuyfgwcqldgryduvxoal@forum.dlang.org&quot;&gt;Poodinis 6.0.0 released - dependency injection framework&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n5sk2g$216v$1@digitalmars.com&quot;&gt;Implementing a Programming Language in D: Lexical Analysis&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/sfdskjxnbnszictolvsv@forum.dlang.org&quot;&gt;Hash Tables in D - blog post&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zocretojtuvjrzoigsjc@forum.dlang.org&quot;&gt;Using D and std.ndslice as a Numpy Replacement&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jwiidjuprtvxfwypqvkq@forum.dlang.org&quot;&gt;Damage Control: An homage to Rampart (Alpha)&lt;/a&gt;
  8181.  
  8182. &lt;/li&gt;&lt;/ul&gt;
  8183.  
  8184. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8185.  
  8186. &lt;p&gt;Another D streamer was located this week too: &lt;a href=&quot;https://www.livecoding.tv/satoshi/&quot;&gt;satoshi&lt;/a&gt;.&lt;/p&gt;
  8187.  
  8188. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8189.  
  8190. &lt;p&gt;A brief tip this week, but one that has eluded a lot of users I've observed: &lt;b&gt;adding seconds to a DateTime or SysTime&lt;/b&gt; is as simple as using the + operator:&lt;/p&gt;
  8191.  
  8192. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.datetime, std.stdio;
  8193. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  8194.    SysTime time = Clock.currTime();
  8195.    writeln(time);
  8196.    time += 15.seconds;
  8197.    writeln(time);
  8198.  
  8199.    &lt;font color=&quot;green&quot;&gt;// convert to a DateTime with cast
  8200. &lt;/font&gt;    DateTime dt = &lt;font color=&quot;blue&quot;&gt;cast&lt;/font&gt;(DateTime) time;
  8201.    dt += 5.days; &lt;font color=&quot;green&quot;&gt;// you can still use the + operator
  8202. &lt;/font&gt;    writeln(dt);
  8203. }
  8204. &lt;/pre&gt;
  8205.  
  8206. &lt;p&gt;The documentation mentions a function, &lt;tt&gt;add&lt;/tt&gt;, which works for months or years, leading people to think you can ONLY add months or years to these objects. That's not correct.&lt;/p&gt;
  8207.  
  8208. &lt;p&gt;The reason &lt;tt&gt;add&lt;/tt&gt; is special for years or months is because years and months are of variable length, whereas the other durations aren't (well, usually aren't but std.datetime chose to ignore (yes, the author is very familiar with all the edge cases!) those bizarre cases for simplicity). &lt;tt&gt;+ 1.months&lt;/tt&gt; would have to return a special type that is no longer plain arithmetic to account for the different number of days in a month, so it uses a special method instead.&lt;/p&gt;
  8209.  
  8210. &lt;p&gt;But, for the other cases, you need no special method and can just use the regular addition operator. The durations can be written as &lt;tt&gt;number.seconds&lt;/tt&gt; or as &lt;tt&gt;seconds(int)&lt;/tt&gt;.&lt;/p&gt;
  8211.  
  8212. &lt;div class=&quot;tip&quot;&gt; The convenience names for units smaller than a second are abbreviated. So &lt;tt&gt;msecs&lt;/tt&gt; for milliseconds, while it is &lt;tt&gt;seconds&lt;/tt&gt; for seconds and bigger. Jonathan M. Davis suggests a way to remember it are really small units are small words, and thus abbreviated.
  8213. &lt;/div&gt;
  8214.  
  8215.  
  8216. &lt;p&gt;You can learn more by reading this &lt;a href=&quot;http://stackoverflow.com/a/14385218/1457000&quot;&gt;Stack Overflow answer by the author&lt;/a&gt;, and this &lt;a href=&quot;http://dlang.org/intro-to-datetime.html&quot;&gt;article on the main website&lt;/a&gt;.&lt;/p&gt;
  8217.  
  8218. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8219. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8220. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8221. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8222. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8223. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8224. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8225. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8226. &lt;/li&gt;&lt;/ul&gt;
  8227.  
  8228.  
  8229. &lt;/div&gt;
  8230. </description></item><item><title>Issue #50</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/dec-27.html</link><guid>http://arsdnet.net/this-week-in-d/dec-27.html</guid><pubDate>Sun, 27 Dec 2015 12:00:00 GMT</pubDate><description>
  8231. &lt;div id=&quot;body-container&quot;&gt;
  8232. &lt;h1&gt;
  8233. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8234. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8235. &lt;span id=&quot;title-date&quot;&gt;December 27, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8236.  
  8237.  
  8238. &lt;div id=&quot;preface&quot;&gt;
  8239.  
  8240. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8241.  
  8242. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8243.  
  8244. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8245.  
  8246. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8247.  
  8248. &lt;/div&gt;
  8249.  
  8250. &lt;h2&gt;Statistics&lt;/h2&gt;
  8251.  
  8252. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-12-21&amp;amp;chfieldto=2015-12-28&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;1 bug fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8253. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-12-21&amp;amp;chfieldto=2015-12-28&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8254. 12 pull requests merged into the language:
  8255.  
  8256. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-21..2015-12-28&quot;&gt;5 into DMD&lt;/a&gt;,
  8257. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-21..2015-12-28&quot;&gt;4 into Phobos&lt;/a&gt;, and
  8258. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-21..2015-12-28&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8259. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-21..2015-12-28&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  8260. &lt;/li&gt;&lt;/ul&gt;
  8261.  
  8262. &lt;h2&gt;In the community&lt;/h2&gt;
  8263.  
  8264. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8265.  
  8266. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zifsqyjgxqlhuhvhtsjd@forum.dlang.org&quot;&gt;Coedit 2 alpha 4, split view and dfmt&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pleeienagbqkzoxxdkqp@forum.dlang.org&quot;&gt;iz - it's so easy&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rswsieypsmcvlbsjbuxo@forum.dlang.org&quot;&gt;Packt ebooks are currently $5.00&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rklcnrrzcznbaglluscv@forum.dlang.org&quot;&gt;DLanguage IntelliJ plugin released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n5fgio$v2s$1@digitalmars.com&quot;&gt;So You Want To Write Your Own Language&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nilhvnqbsgqhxdshpqfl@forum.dlang.org&quot;&gt;2016Q1: std.blas&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n59csj$r6v$1@digitalmars.com&quot;&gt;Three Cool Things about D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bncrcllzumhcifbqbwqo@forum.dlang.org&quot;&gt;pl0stuff an optimizing pl0 &amp;gt; c transcompiler&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m2bn9b74o4.fsf@comcast.net&quot;&gt;Better watch out! D runs on watchOS!&lt;/a&gt;
  8267. &lt;/li&gt;&lt;/ul&gt;
  8268.  
  8269. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8270.  
  8271. &lt;h2&gt;Project Spotlight&lt;/h2&gt;
  8272.  
  8273. &lt;p&gt;This week, I, Adam Ruppe, am going to talk about what I started working on a few days ago: a new documentation generator.&lt;/p&gt;
  8274.  
  8275. &lt;p&gt;First, why another documentation generator? The major alternatives for D are ddoc, built into the compiler, ddox, from the vibe.d project, and harborD, by Brian Schott. There's also an old project called candydoc which just styles and enhances ddoc with CSS and JS while still using the dmd generator, and there is the old version of my dpldocs.info which just navigates the JSON output from dmd.&lt;/p&gt;
  8276.  
  8277. &lt;p&gt;The three big ones, though, are &lt;tt&gt;dmd -D&lt;/tt&gt;, &lt;a href=&quot;https://github.com/rejectedsoftware/ddox&quot;&gt;ddox&lt;/a&gt;, and &lt;a href=&quot;https://github.com/economicmodeling/harbored&quot;&gt;harbored&lt;/a&gt;. Each one shares a number of flaws in my eyes.&lt;/p&gt;
  8278.  
  8279. &lt;p&gt;First, let me go over the problems with built-in ddoc. The first, and most obvious one is that it sucks out of the box. ddoc's greatest strength is being built into the compiler so there's little excuse to not write some inline docs in your code. However, the default output is so bad that I think you're better off just looking at the source instead of actually running the generator!&lt;/p&gt;
  8280.  
  8281. &lt;p&gt;However, even if you do fix the output with ample amounts of redefined ddoc macros and CSS, the generated documentation, while passable, is still short of ideal:&lt;/p&gt;
  8282.  
  8283. &lt;ul&gt;&lt;li&gt; The compiler's output for function prototypes is readable only for the simplest functions.&lt;/li&gt;&lt;li&gt; There's no interlinking capability, except hand-written links and often handwritten or hard-to-discover anchors (though the anchors can be automated by macros too, this step still needs to be done by the author and realized by the reader)&lt;/li&gt;&lt;li&gt; Similarly, it has no table of contents feature at all.&lt;/li&gt;&lt;li&gt; The only capability for encoding characters in the output are the code block and inline backtick syntaxes. A random , for example, needs to be encoded as $(LT). Ddoc calls this a feature: embedded html, but it makes it easy to corrupt output.&lt;/li&gt;&lt;li&gt; The macros have limited semantic capabilities, both for text and for code.&lt;/li&gt;&lt;li&gt; It always outputs one file per module.&lt;/li&gt;&lt;li&gt; It is tied too closely to the dmd compilation model, including conditional compilation. Building docs on Linux can exclude even mentioning Windows functions since they are versioned out of the build, as well as code behind other &lt;tt&gt;-version&lt;/tt&gt; flags! D and ddoc offers &lt;tt&gt;-version(DDoc)&lt;/tt&gt; to work around this, but the use in practice is awkward at best.&lt;/li&gt;&lt;li&gt; The macro syntax is awkward and error-prone, using common text characters like commas as significant syntax, the &amp;quot;current symbol&amp;quot; is highlighted which is virtually never useful to me, and words with colons in them are assumed to denote a new section which often isn't what I want.
  8284. &lt;/li&gt;&lt;/ul&gt;
  8285.  
  8286. &lt;p&gt;None of these are fatal flaws to me. I do find ddoc usable, with a handful of redefined macros and css improvements, but each one is a limitation that adds up to hurt the end user experience.&lt;/p&gt;
  8287.  
  8288. &lt;p&gt;While I have tried to improve ddoc in the past, including writing the `code` feature myself, before which it was impossible to automatically encode samples for html output, it isn't an easy process to get changes into the compiler due to the worry of breaking everyone else's documentation. Everybody who uses ddoc has built up careful workarounds that work for them and any change to the status quo may break their process.&lt;/p&gt;
  8289.  
  8290. &lt;p&gt;These problems have spawned the other replacements. Let's look at &lt;b&gt;ddox&lt;/b&gt;.&lt;/p&gt;
  8291.  
  8292. &lt;p&gt;ddox's major change is one file per entity instead of one file per module, and it also makes an attempt at automatic interlinking and does a good job at generating tables of contents. Otherwise though, it is a pretty conservative reimplementation of ddoc, aiming for full compatibility.&lt;/p&gt;
  8293.  
  8294. &lt;p&gt;ddox also works by parsing the JSON file dmd outputs with its &lt;tt&gt;-X -D&lt;/tt&gt; options. I also went this route with the first draft of my dpldocs.info website because it is easy to do - just run &lt;tt&gt;dmd -X -D&lt;/tt&gt; and run a standard json parser on the resulting output to get a list of declarations and their attached comments, with some preprocessing done by dmd itself.&lt;/p&gt;
  8295.  
  8296. &lt;p&gt;The problem with this approach is it retains several of ddoc's quirks related to the D compilation model. Versioned out declarations are still missing from this output. Moreover, the semantic richness is limited by what dmd offers in the JSON output. Now, dmd outputs a lot of information in that file, and the richness is always growing, but going beyond it necessitates reading strings of D source code, either form the json output or opening the original file yourself. But, if you have to parse D anyway, the ease of json starts to lose its appeal. In some cases, you must demangle names to get type information out of the json, and in others you must parse strings. In either case though, you lose out on some of the details of the original source.&lt;/p&gt;
  8297.  
  8298. &lt;p&gt;ddox today does very little additional parsing.&lt;/p&gt;
  8299.  
  8300. &lt;p&gt;Finally, &lt;b&gt;harbored&lt;/b&gt;, written by the author of libdparse, dcd, dscanner, and other useful D analyzer tools, tries to transcend the limits of dmd's model by using its own lexer and parser and it does a reasonable job, however it still falls short for me:&lt;/p&gt;
  8301.  
  8302. &lt;ul&gt;&lt;li&gt; It syntax highlights function prototypes, but does not further format them&lt;/li&gt;&lt;li&gt; It has individual pages, but hides them inside HTML frames, making linking awkward.&lt;/li&gt;&lt;li&gt; It still doesn't exploit semantic information through source code analysis as much as I'd like.&lt;/li&gt;&lt;li&gt; It removes some of ddoc's useless features, but retains other ddoc flaws in the name of compatibility.
  8303. &lt;/li&gt;&lt;/ul&gt;
  8304.  
  8305. &lt;p&gt;I believe all three doc generators are competent implementations and useful... but I also believe I can do better.&lt;/p&gt;
  8306.  
  8307. &lt;p&gt;I started writing mine using &lt;a href=&quot;https://github.com/Hackerpilot/libdparse/&quot;&gt;libdparse&lt;/a&gt; to analyze the source itself, independently of dmd's output, just like harbored does. After two days of hacking, I created something fairly usable.&lt;/p&gt;
  8308.  
  8309. &lt;p&gt;Compare and contrast these links to see what I'm talking about:&lt;/p&gt;
  8310.  
  8311. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://dlang.org/phobos/std_algorithm_searching.html#minPos&quot;&gt;Ddoc generated std.algorithm.searching.minPos&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://dlang.org/library/std/algorithm/searching/min_pos.html&quot;&gt;Ddox's version of the same content&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://economicmodeling.github.io/containers/containers/treemap.TreeMap.html&quot;&gt;a random harbored function (I haven't run it on Phobos for a direct comparison)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://dpldocs.info/experimental-docs/std.algorithm.searching.minPos.html&quot;&gt;and finally, the output from my new generator&lt;/a&gt;
  8312. &lt;/li&gt;&lt;/ul&gt;
  8313.  
  8314. &lt;p&gt;Getting the link for the ddox version and my version were both easy: I simply copy/pasted the url bar when I found the function. Getting it out of ddoc and harbored meant finding the doc, then going back and copy link location because the destination url was not apparent on the page. In ddoc, it was hidden as an anchor in the source, not visible in the output. In harbored, it was hidden behind a html frame.&lt;/p&gt;
  8315.  
  8316. &lt;p&gt;I believe copy/pasting a URL is the easiest way to share a doc link with someone and you shouldn't have to search for it. Of the existing ones, only ddox passed this test. My generator does too by generating one page per entity.&lt;/p&gt;
  8317.  
  8318. &lt;p&gt;Next, look at the function prototypes. Phobos' ddoc generated pages are nearly universally considered completely unreadable. All the text is crammed together on one line with no attempt at highlighting (except the function name itself). Harbored highlights and ddox does some formatting, but none of them pass the readability test to me.&lt;/p&gt;
  8319.  
  8320. &lt;p&gt;Inspired by MSDN, which manages to make complex function calls like Win32's CreateWindowEx which has many parameters readable, I make liberal use of whitespace to organize things. My code is only a few days old and still has a few bugs, but I think it is already significantly more readable than the competition.&lt;/p&gt;
  8321.  
  8322. &lt;p&gt;My prototype is more than just text, though, it is also links. I still have a lot of work to do on this, but I am parsing the source and can pick out language features in use, such as alias parameters or auto returns, and link those keywords to supplemental articles explaining those features.&lt;/p&gt;
  8323.  
  8324. &lt;p&gt;The target audience for these docs are intermediate users. Beginners won't even know how to get here and should have tutorials to guide them at a higher level, and advanced users probably already know this stuff and only use docs to refresh their memory. Intermediate users, as well as beginners who land here via a web search, will appreciate the additional context and learning opportunities the links allow without impacting the immediate doc's usability.&lt;/p&gt;
  8325.  
  8326. &lt;p&gt;I will also parse these features into an automatically generated list of links for the See Also section.&lt;/p&gt;
  8327.  
  8328. &lt;p&gt;Next, the parameters. These are defined in ddoc as a section, but each formats them a little differently. Phobos's ddoc output is a straight table. ddox copies the table, but also attempts to automatically interlink... and fails, due to the lack of semantic richness in its source material. It thinks &lt;tt&gt;range&lt;/tt&gt; in the description refers to the parameter and makes it a link, but it actually refers to the concept. Harbored also uses a table.&lt;/p&gt;
  8329.  
  8330. &lt;p&gt;I decided to go with a vertical list, again making liberal use of whitespace, inspired by MSDN. Some parameters require more than one line of explanation and I don't want to limit it to half the screen in a table cell. The additional space also gives me room to add other information from the parser such as type, and coming later, I will also extract some information out of template constraints.&lt;/p&gt;
  8331.  
  8332. &lt;p&gt;For example, for &lt;tt&gt;range&lt;/tt&gt;, it is possible to make the parameter table also link to an explanation of forward ranges and infinite ranges. It is possible to recognize the is(typeof(binaryFun)) pattern and explain that too. (I haven't finished writing this yet.) With the extra space, I don't feel like I have to try to cram everything in.&lt;/p&gt;
  8333.  
  8334. &lt;p&gt;The return value is basically the same on all, it just has the type and text. I will, however, also link in some information for auto returns.&lt;/p&gt;
  8335.  
  8336. &lt;p&gt;Finally, the examples are the same in all, though ddox doesn't syntax highlight it (probably because it isn't syntax highlighted in the original input json...). Since many of these examples are unittests which must compile with import name resolution though, I will be able to link function names in them to the exact overload they refer to.&lt;/p&gt;
  8337.  
  8338. &lt;p&gt;One final subtle change on my doc is the use of dynamic javascript to enhance the experience, which I feel none of the others have even tried to exploit. Try hovering your mouse over the word &lt;tt&gt;Range&lt;/tt&gt; in the function prototype of &lt;a href=&quot;http://dpldocs.info/experimental-docs/std.algorithm.searching.minPos.html&quot;&gt;my link&lt;/a&gt;. Notice how it highlights the other occurrences of it, giving you at-a-glance eyeballing of where the type is used - template arg, runtime arg, return value, constraint, docs. All now stand out at a glance as being related.&lt;/p&gt;
  8339.  
  8340. &lt;hr /&gt;
  8341.  
  8342. &lt;p&gt;My docs are still very young, but I believe I have already improved upon the UX and that my approach brings a lot of potential that the competition leaves either virtually impossible or unutilized. My approach of being willing to break ddoc compatibility and hack a bit of common pattern recognition will also allow me to make doc writing easier and richer without major limitation.&lt;/p&gt;
  8343.  
  8344. &lt;p&gt;I really look forward to continuing work on this in the coming weeks to make my whole dream of stellar D documentation a reality. We can innovate in this field and set a new standard, using D's rich semantics, to make docs that other languages cannot parallel.&lt;/p&gt;
  8345.  
  8346. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8347. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8348. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8349. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8350. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8351. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8352. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8353. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8354. &lt;/li&gt;&lt;/ul&gt;
  8355.  
  8356.  
  8357. &lt;/div&gt;
  8358. </description></item><item><title>Issue #49</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/dec-20.html</link><guid>http://arsdnet.net/this-week-in-d/dec-20.html</guid><pubDate>Sun, 20 Dec 2015 12:00:00 GMT</pubDate><description>
  8359. &lt;div id=&quot;body-container&quot;&gt;
  8360. &lt;h1&gt;
  8361. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8362. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8363. &lt;span id=&quot;title-date&quot;&gt;December 20, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8364.  
  8365.  
  8366. &lt;div id=&quot;preface&quot;&gt;
  8367.  
  8368. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8369.  
  8370. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8371.  
  8372. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8373.  
  8374. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8375.  
  8376. &lt;/div&gt;
  8377.  
  8378. &lt;h2&gt;Statistics&lt;/h2&gt;
  8379.  
  8380. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-12-14&amp;amp;chfieldto=2015-12-20&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;5 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8381. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-12-14&amp;amp;chfieldto=2015-12-20&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;22 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8382. 10 pull requests merged into the language:
  8383.  
  8384. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-14..2015-12-20&quot;&gt;2 into DMD&lt;/a&gt;,
  8385. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-14..2015-12-20&quot;&gt;6 into Phobos&lt;/a&gt;, and
  8386. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-14..2015-12-20&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8387. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-14..2015-12-20&quot;&gt;1 pull requests merged into the website.&lt;/a&gt;
  8388. &lt;/li&gt;&lt;/ul&gt;
  8389.  
  8390. &lt;h2&gt;Major Developments&lt;/h2&gt;
  8391.  
  8392. &lt;p&gt;Talk about the website dominated activity in the D forums and code work this week. It started with a thread &lt;a href=&quot;http://forum.dlang.org/thread/ejpuwwlutklvlozyfnqy@forum.dlang.org&quot;&gt;offering some feedback on the site's usability&lt;/a&gt; and the discussion turned to visual design, implementation language, and build process.&lt;/p&gt;
  8393.  
  8394. &lt;p&gt;Many people don't understand the build process, so &lt;a href=&quot;http://wiki.dlang.org/Contributing_to_dlang.org&quot;&gt;Andrei wrote a document about contributing to the website&lt;/a&gt; in an attempt to clear it up. The hope is that with better documentation, people will have an easier time getting involved and improving the website content.&lt;/p&gt;
  8395.  
  8396. &lt;p&gt;The website is written in DDoc, the D documentation generator. People often criticize this, but it is unlikely to change in the short term and with the process documented perhaps it will be all right to more contributors too.&lt;/p&gt;
  8397.  
  8398. &lt;p&gt;We also had several ideas on how to make the content more usable, including both minor and major visual redesigns. A major issue is the difficulty of reading constraint template overloads and ideas on how to reformat them were abound. Andrei wants to change the font, and we also plan to format it with better whitespace, grouping, and perhaps even dynamic highlighting to make these signatures readable.&lt;/p&gt;
  8399.  
  8400. &lt;p&gt;I also realized similar formatting improvements can help make dmd's error messages more readable and started &lt;a href=&quot;http://forum.dlang.org/thread/yygwguzyrffcvtotldtz@forum.dlang.org&quot;&gt;thinking about that&lt;/a&gt;. My time is limited, but if I can find the time, I'd like to implement that too.&lt;/p&gt;
  8401.  
  8402. &lt;p&gt;Anyway, the other big website issue that will surely get attention is linking. The D website lacks anchors in many places and those that do exist, are hard to find. As a result, linking to a part to share with someone, e.g. for discussion or to answer a question, is painful. This just needs some attention in a pull request.&lt;/p&gt;
  8403.  
  8404. &lt;p&gt;Similarly, linking in the documentation of code, including the samples, is basically missing. When you see &lt;tt&gt;isInputRange&lt;/tt&gt; in a constraint, you can't click it to go to the explanation of what it means. This will probably need a change to the documentation generator, but we could also fix it by adding a link to the prose of these functions. Any pull requests on the website improving these documentation would surely be accepted.&lt;/p&gt;
  8405.  
  8406. &lt;p&gt;Lastly, the whole visual style of the website came under fire and &lt;a href=&quot;http://forum.dlang.org/post/n53ps0$2j8f$1@digitalmars.com&quot;&gt;an old proposal for an overhaul came back&lt;/a&gt;. If we want an overhaul to happen, someone will have to do the work of making it possible inside the existing framework. Andrei indicated he is open to the idea of a redesign, even if there's no major improvement, so this may happen but there is no guarantee.&lt;/p&gt;
  8407.  
  8408. &lt;hr /&gt;
  8409.  
  8410. &lt;p&gt;A small, backward-compatible change to &lt;tt&gt;Throwable&lt;/tt&gt; also went through this week: a virtual &lt;tt&gt;message&lt;/tt&gt; function which can be overridden in child classes. Perhaps more changes to the exception objects are coming, as the discussion indicated that this still wasn't idea.&lt;/p&gt;
  8411.  
  8412. &lt;h2&gt;In the community&lt;/h2&gt;
  8413.  
  8414. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8415.  
  8416. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/blymrjsuneeylpzqqyfy@forum.dlang.org&quot;&gt;D Structs(Enums) to Typescript Interfaces(Enums)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n51njv$2ssv$1@digitalmars.com&quot;&gt;&amp;quot;Programming in D&amp;quot; hardcover edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lwxjgncbrppnbbuzbvwy@forum.dlang.org&quot;&gt;dqml for Ubuntu Unity apps&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jgizsajlgoylecczhvbu@forum.dlang.org&quot;&gt;Small minesweeper game in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/becskaeoydsrmujsrfbb@forum.dlang.org&quot;&gt;IAP Tools for D&lt;/a&gt;
  8417. &lt;/li&gt;&lt;/ul&gt;
  8418.  
  8419. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8420.  
  8421. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8422.  
  8423. &lt;p&gt;&lt;b&gt;What are &lt;tt&gt;out&lt;/tt&gt; params and how do they differ from &lt;tt&gt;ref&lt;/tt&gt; params?&lt;/b&gt;&lt;/p&gt;
  8424.  
  8425. &lt;p&gt;Think of &lt;tt&gt;out&lt;/tt&gt; params as being additional return values rather than as arguments in the traditional sense and you should be ok.&lt;/p&gt;
  8426.  
  8427. &lt;p&gt;D didn't used to have &lt;tt&gt;ref&lt;/tt&gt;. It instead used &lt;tt&gt;in&lt;/tt&gt;, &lt;tt&gt;out&lt;/tt&gt;, and &lt;tt&gt;inout&lt;/tt&gt; as the parameter storage classes.&lt;/p&gt;
  8428.  
  8429. &lt;p&gt;&lt;tt&gt;in&lt;/tt&gt; meant (and means, it is still there) that you are going to look at, but not modify or store a reference to it (the latter is what makes it distinct from &lt;tt&gt;const&lt;/tt&gt; - you are allowed to store &lt;tt&gt;const&lt;/tt&gt;, but not &lt;tt&gt;in&lt;/tt&gt; or &lt;tt&gt;scope&lt;/tt&gt; params, which lets the compiler, in theory, optimize the memory allocation of them). It is just for data consumption.&lt;/p&gt;
  8430.  
  8431. &lt;p&gt;&lt;tt&gt;out&lt;/tt&gt; means the function is going to store data in that variable, but is not going to look at or store it. The value that is already in there beforehand will be lost as the function writes its result to it. The compiler resets it upon function entry to guarantee the program doesn't depend on some value passed in through it.&lt;/p&gt;
  8432.  
  8433. &lt;p&gt;And finally, the old &lt;tt&gt;inout&lt;/tt&gt; was it would take the data in, and store a value out. Today (well, starting like five years ago), this usage is long gone and &lt;tt&gt;inout&lt;/tt&gt; means something entirely different (&lt;tt&gt;const&lt;/tt&gt; but returning constness is conditional on the input; the const/immutable/mutable qualifiers have the same out as they do in) and the old usage was replaced with &lt;tt&gt;ref&lt;/tt&gt;.&lt;/p&gt;
  8434.  
  8435. &lt;p&gt;While &lt;tt&gt;out&lt;/tt&gt; is implemented as &lt;tt&gt;ref&lt;/tt&gt; plus automatic reinitialization, you should remember the original meaning: you write data to it but don't do anything else. Do not take its address - that's legal with &lt;tt&gt;ref&lt;/tt&gt; (unless it is &lt;tt&gt;scope ref&lt;/tt&gt; or &lt;tt&gt;in ref&lt;/tt&gt;...) but incorrect with &lt;tt&gt;out&lt;/tt&gt;. You are supposed to write to it, nothing more.&lt;/p&gt;
  8436.  
  8437.  
  8438. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8439. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8440. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8441. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8442. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8443. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8444. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8445. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8446. &lt;/li&gt;&lt;/ul&gt;
  8447.  
  8448.  
  8449. &lt;/div&gt;
  8450. </description></item><item><title>Issue #48</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/dec-13.html</link><guid>http://arsdnet.net/this-week-in-d/dec-13.html</guid><pubDate>Sun, 13 Dec 2015 12:00:00 GMT</pubDate><description>
  8451. &lt;div id=&quot;body-container&quot;&gt;
  8452. &lt;h1&gt;
  8453. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8454. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8455. &lt;span id=&quot;title-date&quot;&gt;December 13, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8456.  
  8457.  
  8458. &lt;div id=&quot;preface&quot;&gt;
  8459.  
  8460. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8461.  
  8462. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8463.  
  8464. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8465.  
  8466. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8467.  
  8468. &lt;/div&gt;
  8469.  
  8470. &lt;h2&gt;Statistics&lt;/h2&gt;
  8471.  
  8472. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-12-07&amp;amp;chfieldto=2015-12-13&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8473. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-12-07&amp;amp;chfieldto=2015-12-13&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8474. 14 pull requests merged into the language:
  8475.  
  8476. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-07..2015-12-13&quot;&gt;3 into DMD&lt;/a&gt;,
  8477. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-07..2015-12-13&quot;&gt;10 into Phobos&lt;/a&gt;, and
  8478. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-07..2015-12-13&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8479. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-12-07..2015-12-13&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  8480. &lt;/li&gt;&lt;/ul&gt;
  8481.  
  8482. &lt;h2&gt;Major Developments&lt;/h2&gt;
  8483.  
  8484. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n44g82$2sj7$1@digitalmars.com&quot;&gt;DConf 2016 news: 20+% sold out&lt;/a&gt; and a book signing was announced with Andrei Alexandrescu, author of the book, The D Programming Language, Mike Parker, author of the new Learning D, Ali &amp;#199;hreli, author of Programming in D, and Kai Nacke, author of D Web Development, all signing their respective books.&lt;/p&gt;
  8485.  
  8486. &lt;p&gt;See the list of &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;D books here&lt;/a&gt;.&lt;/p&gt;
  8487.  
  8488. &lt;p&gt;A long requested feature, a &lt;a href=&quot;http://forum.dlang.org/thread/xpwumezshxwksejpfczd@forum.dlang.org&quot;&gt;Testing Nightly Build Service&lt;/a&gt; was also released this week.&lt;/p&gt;
  8489.  
  8490. &lt;h2&gt;In the community&lt;/h2&gt;
  8491.  
  8492. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8493.  
  8494. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/onxfuwwtjbbzwkahtfdx@forum.dlang.org&quot;&gt;DlangIDE update&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n4ig4i$2q39$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup December 17, 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vurvggqzsnkuresaebtm@forum.dlang.org&quot;&gt;Voting Open For std.experimental.ndslice&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bfvlxbtlmkiudtysmmrg@forum.dlang.org&quot;&gt;MurmurHash3&lt;/a&gt;
  8495. &lt;/li&gt;&lt;/ul&gt;
  8496.  
  8497. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8498.  
  8499. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8500.  
  8501. &lt;p&gt;If you need to clear an associative array, some people try to assign &lt;tt&gt;[]&lt;/tt&gt; to it, and find it doesn't work. Instead, you can use &lt;tt&gt;= null&lt;/tt&gt; to clear an AA.&lt;/p&gt;
  8502.  
  8503. &lt;p&gt;On built-in arrays, &lt;tt&gt;[]&lt;/tt&gt; and &lt;tt&gt;null&lt;/tt&gt; are basically the same thing, but &lt;tt&gt;[]&lt;/tt&gt; is typed &lt;tt&gt;T[]&lt;/tt&gt;, with T deduced automatically from context or contents, and &lt;tt&gt;null&lt;/tt&gt; has a special type all to itself (which you can reference in your code with &lt;tt&gt;typeof(null)&lt;/tt&gt;, which you can overload on, but remember ONLY the &lt;tt&gt;null&lt;/tt&gt; &lt;i&gt;literal&lt;/i&gt; has this type). &lt;tt&gt;[]&lt;/tt&gt; can implicitly convert to other array types, and thus, for example, &lt;tt&gt;int[] foo = [];&lt;/tt&gt; works, but it can not convert to associated array types, so &lt;tt&gt;int[string] foo = [];&lt;/tt&gt; does &lt;i&gt;not&lt;/i&gt; work.&lt;/p&gt;
  8504.  
  8505. &lt;p&gt;&lt;tt&gt;typeof(null)&lt;/tt&gt;, on the other hand, does implicitly convert to both array and associative array types, so &lt;tt&gt;int[string] foo = null;&lt;/tt&gt; compiles successfully. The implementation does the same thing: it sets the pointer to null (&lt;tt&gt;[]&lt;/tt&gt; also sets it to null to avoid array allocations when just emptying the array) which the runtime will lazily allocation when you actually use it.&lt;/p&gt;
  8506.  
  8507. &lt;div class=&quot;tip&quot;&gt;&lt;tt&gt;typeof(null)&lt;/tt&gt; will implicitly construct several built-in types, meaning you can pass &lt;tt&gt;null&lt;/tt&gt; to a function expecting &lt;tt&gt;int[]&lt;/tt&gt;, for example, but not to any user-defined types. In D today, there is no way to define implicit constructors, meaning a library array type can never fully replace built-in arrays, despite operator overloading making everything else possible. In my personal opinion, the mistake C++ made with its implicit constructors wasn't including them in the language, they do serve a useful purpose, but the mistake they made was making implicit the default, and making &lt;tt&gt;explicit&lt;/tt&gt; the keyword to turn it off. I'd love to see D add explicitly implicit constructors; one of the few language features I still wish for despite being generally quite pleased with D's features.&lt;/div&gt;
  8508.  
  8509. &lt;p&gt;This lazy allocation, by the way, can be surprising in some cases:&lt;/p&gt;
  8510.  
  8511. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio : writeln;
  8512. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[string] a) {
  8513. a[&lt;font color=&quot;red&quot;&gt;&amp;quot;something&amp;quot;&lt;/font&gt;] = 10;
  8514. }
  8515.  
  8516. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  8517. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[string] a = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  8518. a[&lt;font color=&quot;red&quot;&gt;&amp;quot;else&amp;quot;&lt;/font&gt;] = 20;
  8519. foo(a);
  8520. writeln(a);
  8521. }
  8522. &lt;/pre&gt;
  8523.  
  8524. &lt;p&gt;That program will print &lt;tt&gt;[&amp;quot;something&amp;quot;:10, &amp;quot;else&amp;quot;:20]&lt;/tt&gt;, showing both values got saved in the array.&lt;/p&gt;
  8525.  
  8526. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;green&quot;&gt;// In this example, the printed value will only show
  8527. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// [&amp;quot;else&amp;quot;:20] in contrast to the previous one, but all
  8528. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// I changed, was swapping the order of the function call
  8529. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// and the assignment lines!
  8530. &lt;/font&gt;
  8531. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio : writeln;
  8532. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[string] a) {
  8533. a[&lt;font color=&quot;red&quot;&gt;&amp;quot;something&amp;quot;&lt;/font&gt;] = 10;
  8534. }
  8535.  
  8536. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  8537. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[string] a = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;;
  8538. foo(a);
  8539. a[&lt;font color=&quot;red&quot;&gt;&amp;quot;else&amp;quot;&lt;/font&gt;] = 20;
  8540. writeln(a);
  8541. }
  8542. &lt;/pre&gt;
  8543.  
  8544. &lt;p&gt;The reason for the difference is lazy initialization of the content pointer in the array: in the first case, we set a value before the function call, meaning it was non-null going into it. In the second case, the initialization came after &lt;tt&gt;null&lt;/tt&gt; was already passed to the function &lt;tt&gt;foo&lt;/tt&gt;, meaning it got lazy initialized twice - two separate copies.&lt;/p&gt;
  8545.  
  8546. &lt;p&gt;I typically advise against passing arrays in D as &lt;tt&gt;ref&lt;/tt&gt;, because the array contents are already passed as reference (the pointer to the contents is passed by value, meaning the contents aren't copied), but this is one case where you might want to use &lt;tt&gt;ref&lt;/tt&gt;. The pointer is modified and ref would pass that up the chain too.&lt;/p&gt;
  8547.  
  8548. &lt;p&gt;Some people try to avoid this behavior by initializing with &lt;tt&gt;= []&lt;/tt&gt; instead of &lt;tt&gt;= null&lt;/tt&gt;, but aside from the type mismatch described above, this also doesn't work because &lt;tt&gt;[]&lt;/tt&gt; still keeps a null pointer! You need to actually set a value in the same scope as initialization to get it to allocate a unique pointer.&lt;/p&gt;
  8549.  
  8550. &lt;p&gt;While &lt;tt&gt;[]&lt;/tt&gt; and &lt;tt&gt;null&lt;/tt&gt; basically do the same thing, a null array and an empty array are still slightly different in D. An empty array can also be the result of a slice at the end of an array: &lt;tt&gt;int[] a = [1]; a = a[$ .. $]; /* yields an empty, but non-null array */&lt;/tt&gt;, whereas a null array is one that is not yet allocated.&lt;/p&gt;
  8551.  
  8552. &lt;p&gt;I recommend you use the explicit &lt;tt&gt;if(arr.length == 0)&lt;/tt&gt; or &lt;tt&gt;if(arr.empty)&lt;/tt&gt;  (&lt;tt&gt;import std.array;&lt;/tt&gt; for the &lt;tt&gt;empty&lt;/tt&gt; function) to test for emptiness, which also includes null arrays, and &lt;tt&gt;if(arr is null)&lt;/tt&gt; if you want to specifically test for &lt;tt&gt;null&lt;/tt&gt;. Only check for null if you are sure that is what you want. Since null arrays will automatically allocate in D, you can get away with never actually worrying about it and just using them as interchangeable with empty arrays. Avoid &lt;tt&gt;if(arr)&lt;/tt&gt;, which checks for nullness but is unclear to readers of the code who do not understand the distinctions described here.&lt;/p&gt;
  8553.  
  8554. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8555. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8556. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8557. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8558. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8559. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8560. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8561. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8562. &lt;/li&gt;&lt;/ul&gt;
  8563.  
  8564.  
  8565. &lt;/div&gt;
  8566. </description></item><item><title>Issue #47</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/dec-06.html</link><guid>http://arsdnet.net/this-week-in-d/dec-06.html</guid><pubDate>Sun, 06 Dec 2015 12:00:00 GMT</pubDate><description>
  8567. &lt;div id=&quot;body-container&quot;&gt;
  8568. &lt;h1&gt;
  8569. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8570. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8571. &lt;span id=&quot;title-date&quot;&gt;December 6, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8572.  
  8573.  
  8574. &lt;div id=&quot;preface&quot;&gt;
  8575.  
  8576. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8577.  
  8578. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8579.  
  8580. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8581.  
  8582. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8583.  
  8584. &lt;/div&gt;
  8585.  
  8586. &lt;h2&gt;Statistics&lt;/h2&gt;
  8587.  
  8588. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-11-30&amp;amp;chfieldto=2015-12-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8589. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-11-30&amp;amp;chfieldto=2015-12-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8590. 19 pull requests merged into the language:
  8591.  
  8592. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-30..2015-12-06&quot;&gt;11 into DMD&lt;/a&gt;,
  8593. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-30..2015-12-06&quot;&gt;6 into Phobos&lt;/a&gt;, and
  8594. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-30..2015-12-06&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8595. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-30..2015-12-06&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  8596. &lt;/li&gt;&lt;/ul&gt;
  8597.  
  8598. &lt;h2&gt;Major Developments&lt;/h2&gt;
  8599.  
  8600. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/nzifimwtvopawrwvopoz@forum.dlang.org&quot;&gt;Official Announcement: 'Learning D' is Released&lt;/a&gt;, a new book!&lt;/p&gt;
  8601.  
  8602. &lt;p&gt;I haven't read the whole book yet, but from the sample and author Mike Parker's other work, I'm pretty confident in expecting quality from the book!&lt;/p&gt;
  8603.  
  8604. &lt;p&gt;TWID Readers: if you want to write a review for any of our D books and email it to me, destructionator@gmail.com, I'll add them here too!&lt;/p&gt;
  8605.  
  8606. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/rrzpcyttbaeblhjesulq@forum.dlang.org&quot;&gt;Release D 2.069.2&lt;/a&gt; was also made this week with bug fixes.&lt;/p&gt;
  8607.  
  8608. &lt;h2&gt;In the community&lt;/h2&gt;
  8609.  
  8610. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8611.  
  8612. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fpxxxgkxwryovzealcxi@forum.dlang.org&quot;&gt;DLang users telegram group&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wttcwkpaudmejwfdkbbe@forum.dlang.org&quot;&gt;learningd.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n3nqld$1rgq$1@digitalmars.com&quot;&gt;https everywhere update - dlang.org gets an &amp;quot;A&amp;quot; now!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cjxbrgliihtgrljduohn@forum.dlang.org&quot;&gt;Learning D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n3gfrp$1m40$1@digitalmars.com&quot;&gt;Beta D 2.069.2-b2&lt;/a&gt;
  8613. &lt;/li&gt;&lt;/ul&gt;
  8614.  
  8615. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8616.  
  8617. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8618.  
  8619. &lt;p&gt;D has an excellent feature called bounds checking. Arrays and slices know their own length, so trying to access an index before or after the valid area of the array will throw a RangeError, protecting you from memory corruption problems.&lt;/p&gt;
  8620.  
  8621. &lt;p&gt;Bounds checking is useful for safety, correctness, and debugging, but in tight loops, it can be a performance hit. As such, the compiler has an option to disable it: &lt;tt&gt;  -boundscheck=[on|safeonly|off]   bounds checks on, in @safe only, or off&lt;/tt&gt;.&lt;/p&gt;
  8622.  
  8623. &lt;p&gt;With this, combined with separate compilation of modules or packages, you can turn it off in sections of the program, but leave it on for others. With &lt;tt&gt;-boundscheck=safeonly&lt;/tt&gt;, you can disable it in tight &lt;tt&gt;@system&lt;/tt&gt; code, while keeping it in &lt;tt&gt;@safe&lt;/tt&gt; code, but still you may want finer-grained control, and that's where you need to get a little creative.&lt;/p&gt;
  8624.  
  8625. &lt;p&gt;The trick is to use a pointer! Pointers in D can still be indexed (as in C), but do not know their length, and thus do not do bounds checks. This is considered &lt;tt&gt;@system&lt;/tt&gt;, since you are taking memory-safety into your own hands, but that's true whenever you disable bounds checking.&lt;/p&gt;
  8626.  
  8627. &lt;p&gt;The generated code for &lt;tt&gt;arr.ptr[0]&lt;/tt&gt; is the same as &lt;tt&gt;arr[0]&lt;/tt&gt;, with the exception of skipping the bounds check. There is no cost in accessing the &lt;tt&gt;.ptr&lt;/tt&gt; property of a D array/slice.&lt;/p&gt;
  8628.  
  8629. &lt;p&gt;So, if you need to disable access checking in a single expression rather than a whole module, you don't want the command line switch, instead, just use the &lt;tt&gt;.ptr&lt;/tt&gt; property.&lt;/p&gt;
  8630.  
  8631. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8632. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8633. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8634. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8635. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8636. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8637. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8638. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8639. &lt;/li&gt;&lt;/ul&gt;
  8640.  
  8641.  
  8642. &lt;/div&gt;
  8643. </description></item><item><title>Issue #46</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/nov-29.html</link><guid>http://arsdnet.net/this-week-in-d/nov-29.html</guid><pubDate>Sun, 29 Nov 2015 12:00:00 GMT</pubDate><description>
  8644. &lt;div id=&quot;body-container&quot;&gt;
  8645. &lt;h1&gt;
  8646. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8647. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8648. &lt;span id=&quot;title-date&quot;&gt;November 29, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8649.  
  8650.  
  8651. &lt;div id=&quot;preface&quot;&gt;
  8652.  
  8653. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8654.  
  8655. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8656.  
  8657. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8658.  
  8659. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8660.  
  8661. &lt;/div&gt;
  8662.  
  8663. &lt;h2&gt;Statistics&lt;/h2&gt;
  8664.  
  8665. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-11-23&amp;amp;chfieldto=2015-11-29&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;19 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8666. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-11-23&amp;amp;chfieldto=2015-11-29&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8667. 20 pull requests merged into the language:
  8668.  
  8669. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-23..2015-11-29&quot;&gt;9 into DMD&lt;/a&gt;,
  8670. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-23..2015-11-29&quot;&gt;8 into Phobos&lt;/a&gt;, and
  8671. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-23..2015-11-29&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8672. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-23..2015-11-29&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  8673. &lt;/li&gt;&lt;/ul&gt;
  8674.  
  8675. &lt;h2&gt;Major Developments&lt;/h2&gt;
  8676.  
  8677. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n3cnk7$170d$1@digitalmars.com&quot;&gt;Beta D 2.069.2-b1&lt;/a&gt; was released this week, as well as &lt;a href=&quot;http://forum.dlang.org/thread/n3br8r$8q5$1@digitalmars.com&quot;&gt;Visual D 0.3.43&lt;/a&gt;, which has better support for VS 2015.&lt;/p&gt;
  8678.  
  8679. &lt;p&gt;The dlang.org team also &lt;a href=&quot;http://forum.dlang.org/thread/n2vug4$1pdg$1@digitalmars.com&quot;&gt;rolled out https&lt;/a&gt;, as a step toward making the distribution more secure. Currently, the https option is available, but not enforced. Next steps are putting https on the forum and This Week in D, then making it the default, and digitally signing the code so systems like Mac OSX and Windows see it as a trusted publisher.&lt;/p&gt;
  8680.  
  8681. &lt;p&gt;In the compiler world, dmd is &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pull/5286&quot;&gt;working on exception handling changes&lt;/a&gt;. The goal is to get cross-language exceptions working. gdc and ldc already have some support for interfacing with C++ exceptions and dmd is getting it now too. The goal for dmd is to be able to actually catch a C++ std::exception to bring interoperability with C++ to the next level.&lt;/p&gt;
  8682.  
  8683. &lt;h2&gt;In the community&lt;/h2&gt;
  8684.  
  8685. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8686.  
  8687. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rnfyngbtqjbiqymsygpr@forum.dlang.org&quot;&gt;SuperStruct v0.2.0 - a struct that acts like a class&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jocreinztvjmlqefgiix@forum.dlang.org&quot;&gt;D wrapper for TestU01 random-number-generator test batteries&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/njqzoppwwzigxyxihkql@forum.dlang.org&quot;&gt;Melbourne Meetup&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hbmbztydvyfwemfnerwb@forum.dlang.org&quot;&gt;Graillon 1.0 - VST effect fully made with D - practical example of real time audio in D&lt;/a&gt;
  8688. &lt;/li&gt;&lt;/ul&gt;
  8689.  
  8690. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8691.  
  8692. &lt;h3&gt;Notable Threads&lt;/h3&gt;
  8693.  
  8694. &lt;p&gt;Andrei is working on a container library for Phobos and asked us about construction methods: &lt;a href=&quot;http://forum.dlang.org/thread/n3adit$23b0$1@digitalmars.com&quot;&gt;do we want a factory function or static opCall&lt;/a&gt;?&lt;/p&gt;
  8695.  
  8696. &lt;p&gt;He was convinced by the arguments for factory functions and is moving forward with them. The containers library is being written with his design by introspection idea and using his std.allocator.&lt;/p&gt;
  8697.  
  8698. &lt;p&gt;Please note that a container library using std.allocator already exists, &lt;a href=&quot;https://github.com/economicmodeling/containers&quot;&gt;written by EMSI and open sourced&lt;/a&gt;. I don't know how much (if any) of their work that Andrei is using, because he wants to try the new introspection technique. However, if you need a working container library today, EMSI's code is quite good.&lt;/p&gt;
  8699.  
  8700. &lt;hr /&gt;
  8701.  
  8702. &lt;p&gt;Earlier today, Manu &lt;a href=&quot;http://forum.dlang.org/thread/mailman.2458.1448772039.22025.digitalmars-d@puremagic.com&quot;&gt;brought up a point on interoperating with C++ namespaces&lt;/a&gt;. He's having some trouble with it. The thread is young, but since the C++ interop features are currently poorly documented and even more poorly understood, reading this thread will surely be educational for many of us. Manu's experience in using it with existing C++ codebases may lead to D language enhancements too (though it is also possible that the D idioms just need to be worked out with the existing features).&lt;/p&gt;
  8703.  
  8704. &lt;hr /&gt;
  8705.  
  8706. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/hbmbztydvyfwemfnerwb@forum.dlang.org&quot;&gt;Graillon announcement thread&lt;/a&gt; also got a lot of discussion. Much of it was flame throwing, though there was also some principled disagreement on the nature of real time code and what it means to use it with the GC.&lt;/p&gt;
  8707.  
  8708. &lt;p&gt;The techniques used by the Graillon author, Guillaume Piolat, were to avoid anything that might trigger a GC collection in the real time thread. He used the language feature &lt;tt&gt;@nogc&lt;/tt&gt; and an operating system thread, not registered with the D runtime, to ensure the work thread would never stop.&lt;/p&gt;
  8709.  
  8710. &lt;p&gt;If you never call a GC allocating function, a collection cycle will never happen in D. The garbage collector does NOT run in a thread that may stop the program at random, it only runs on demand. The &lt;tt&gt;@nogc&lt;/tt&gt; annotation works to ensure you never run a GC allocation in the marked function. (It does this a bit conservatively, only allowing you to call other functions annotated with it too, which is sometimes limiting since it needs to be @nogc all the way down, but it works well when you do. Guillaume was originally a skeptic of &lt;tt&gt;@nogc&lt;/tt&gt; but said he found it surprisingly useful in practice.)&lt;/p&gt;
  8711.  
  8712. &lt;p&gt;The other complication is if the GC collects, it pauses all threads known to the D runtime to ensure there's no race conditions during the cycle. The key there, in this case, was &amp;quot;known to the D runtime&amp;quot;. If you create a thread using OS primitives and fail to register it, that thread will *not* be paused in the event of a collection cycle. It then, of course, becomes your responsibility to ensure it doesn't reference any memory the garbage collector may be actively scanning, but if carefully managed, it is possible to pull this off correctly and not stop the whole world.&lt;/p&gt;
  8713.  
  8714. &lt;p&gt;Of course, he also had to be sure the rest of the code was optimized correctly for real time audio as well. No one language feature replaced programmer diligence in making a good product. Guillaume said he might write more details about his experience, but probably won't.&lt;/p&gt;
  8715.  
  8716. &lt;hr /&gt;
  8717.  
  8718. &lt;p&gt;And, the thread many of you have been waiting to hear about... there was a &lt;a href=&quot;http://forum.dlang.org/thread/gnfctbuhiemidetngrzi@forum.dlang.org&quot;&gt;very lengthy flamewar&lt;/a&gt; over the dub configuration file format.&lt;/p&gt;
  8719.  
  8720. &lt;p&gt;dub uses either standard JSON or a somewhat obscure format called Simple Declarative Language, or SDLang, for its package definition files. The two formats encode exactly the same data and work the same way. The user simply chooses which one they prefer. SDLang is a bit leaner than JSON and also supports comments, making it the format of choice for most the vibe.d and dub team, but others, including Walter and Andrei, prefer JSON because it is a better known format. They mistakenly believed that SDLang was invented by the vibe.d team (dub is a product of vibe.d) recently, but they were corrected - the truth is SDLang already existed before vibe.d started using it (though it never became very big). vibe.d has been using it since 2013, after a community poll selected it.&lt;/p&gt;
  8721.  
  8722. &lt;p&gt;Andrei stated plainly that he feels supporting SDLang was a mistake and it ought to be dropped, so everyone goes back to using JSON, and that he felt it was a waste of time to even discuss the matter. This basically kicked off a flamewar due to the tone and mistaken beliefs about the history.&lt;/p&gt;
  8723.  
  8724. &lt;p&gt;To make a long thread short, the probable take-aways are dub might switch back to defaulting to json, though sdlang will probably not be removed. We need also better communication about decisions in the community to avoid these kind of after-the-fact misconceptions in the future.&lt;/p&gt;
  8725.  
  8726. &lt;p&gt;Phobos will also likely get JSON5 support, which allows more conveniences from Javascript in JSON, notably, comments.&lt;/p&gt;
  8727.  
  8728. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8729. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8730. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8731. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8732. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8733. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8734. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8735. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8736. &lt;/li&gt;&lt;/ul&gt;
  8737.  
  8738.  
  8739. &lt;/div&gt;
  8740. </description></item><item><title>Issue #45</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/nov-22.html</link><guid>http://arsdnet.net/this-week-in-d/nov-22.html</guid><pubDate>Sun, 22 Nov 2015 12:00:00 GMT</pubDate><description>
  8741. &lt;div id=&quot;body-container&quot;&gt;
  8742. &lt;h1&gt;
  8743. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8744. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8745. &lt;span id=&quot;title-date&quot;&gt;November 22, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8746.  
  8747.  
  8748. &lt;div id=&quot;preface&quot;&gt;
  8749.  
  8750. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8751.  
  8752. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8753.  
  8754. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8755.  
  8756. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8757.  
  8758. &lt;/div&gt;
  8759.  
  8760. &lt;h2&gt;Statistics&lt;/h2&gt;
  8761.  
  8762. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-11-16&amp;amp;chfieldto=2015-11-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;23 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8763. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-11-16&amp;amp;chfieldto=2015-11-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;31 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8764. 20 pull requests merged into the language:
  8765.  
  8766. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-16..2015-11-22&quot;&gt;8 into DMD&lt;/a&gt;,
  8767. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-16..2015-11-22&quot;&gt;8 into Phobos&lt;/a&gt;, and
  8768. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-16..2015-11-22&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8769. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-16..2015-11-22&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  8770. &lt;/li&gt;&lt;/ul&gt;
  8771.  
  8772. &lt;h2&gt;In the community&lt;/h2&gt;
  8773.  
  8774. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8775.  
  8776. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n2d34c$204$1@digitalmars.com&quot;&gt;DConf 2016 Early Bird Registration Open&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xronawqwoekzfjiupouh@forum.dlang.org&quot;&gt;Formal Review of std.range.ndslice - multi-dimension slice&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n2cs8j$2rve$1@digitalmars.com&quot;&gt;D compiler daily downloads at an all-time high&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n2inej$2iar$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup November 19, 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hniuujnhupttpfywcmfl@forum.dlang.org&quot;&gt;PowerNex - My 64bit kernel written in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n2g46a$2u5k$1@digitalmars.com&quot;&gt;The D Language Foundation has 000 to its name&lt;/a&gt;
  8777. &lt;/li&gt;&lt;/ul&gt;
  8778.  
  8779. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8780.  
  8781. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8782.  
  8783. &lt;p&gt;A lot of people ask me for metaprogramming debugging tips. My biggest tip is to just remember that metaprogramming is still programming!&lt;/p&gt;
  8784.  
  8785. &lt;p&gt;If you are making a code generator, make sure it runs at ordinary runtime before running it at compile time. Code with string mixins can be ugly, but it is still basically just ordinary string generation code. Inspect the generated string for correctness! Try replacing &lt;tt&gt;mixin(code_generation_function())&lt;/tt&gt; with &lt;tt&gt;pragma(msg, code_generation_function())&lt;/tt&gt; to print it at compile time, or simply use &lt;tt&gt;writeln&lt;/tt&gt; or &lt;tt&gt;std.file.write&lt;/tt&gt; to print it out and compile and run the program as an ordinary program with ordinary output!&lt;/p&gt;
  8786.  
  8787. &lt;pre class=&quot;d_code&quot;&gt; string code_generation_function() {
  8788. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;red&quot;&gt;&amp;quot;int a;&amp;quot;&lt;/font&gt;;
  8789. }
  8790.  
  8791. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(code_generation_function()); &lt;font color=&quot;green&quot;&gt;// metaprogramming
  8792. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;pragma&lt;/font&gt;(msg, code_generation_function()); &lt;font color=&quot;green&quot;&gt;// compile-time printing
  8793. &lt;/font&gt;
  8794. &lt;font color=&quot;green&quot;&gt;// ordinary runtime printing of the same code!
  8795. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  8796. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.file;
  8797. std.file.write(&lt;font color=&quot;red&quot;&gt;&amp;quot;generated-code.d&amp;quot;&lt;/font&gt;, code_generation_function());
  8798. }
  8799. &lt;/pre&gt;
  8800.  
  8801. &lt;p&gt;Writing the code you intend to mixin to a file means you can format it (see &lt;a href=&quot;https://github.com/Hackerpilot/dfmt&quot;&gt;dfmt&lt;/a&gt; for an automated tool that can handle even ugly generated code) and syntax highlight it in your editor to make it easier to read. Moreover, if the program fails for whatever reason, you can now debug it like any other program too - you can use traditional techniques from printf debugging to programs like &lt;tt&gt;gdb&lt;/tt&gt; - instead of worrying about finding a compile-time debugger.&lt;/p&gt;
  8802.  
  8803. &lt;div class=&quot;tip&quot;&gt;Actually, running a code generator as a separate program can be advantageous in larger programs too because you can run it as a separate step in your build process. This can help keep your build memory and time down and allow caching of the generated code. Consider this option if needed by your build constraints and circumstances.&lt;/div&gt;
  8804.  
  8805. &lt;p&gt;Template metaprogramming is tougher to debug, but also tend to generally be simpler, because complex metaprograms in D tend to be written as CTFE functions rather than complicated templates. If you are having a hard time writing a template, you may wish to try to rewrite it as a regular runtime function too.&lt;/p&gt;
  8806.  
  8807. &lt;p&gt;However, of course, many templates are best as templates, and rare metaprogramming tasks can only be done with templates. Templates are relatively easy to debug though: just try instantiating it and see what errors the compiler puts out.&lt;/p&gt;
  8808.  
  8809. &lt;p&gt;Instantiation just means giving a template arguments:&lt;/p&gt;
  8810.  
  8811. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;green&quot;&gt;// this is a template definition
  8812. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Foo(T) {
  8813. T member;
  8814. }
  8815.  
  8816. &lt;font color=&quot;green&quot;&gt;// so is this
  8817. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo(T)(T t) {}
  8818.  
  8819. &lt;font color=&quot;blue&quot;&gt;unittest&lt;/font&gt; {
  8820. Foo!&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; test; &lt;font color=&quot;green&quot;&gt;// this is a template instantiation
  8821. &lt;/font&gt; foo(10); &lt;font color=&quot;green&quot;&gt;// so is this
  8822. &lt;/font&gt; }
  8823. &lt;/pre&gt;
  8824.  
  8825. &lt;div class=&quot;tip&quot;&gt;Remember, uninstantiated templates are checked only for syntax correctness, but not semantics. Always try to instantiate a template with common arguments in your own code, perhaps in a &lt;tt&gt;unittest&lt;/tt&gt; block, before releasing a library to ensure it actually compiles in practice!&lt;/div&gt;
  8826.  
  8827. &lt;p&gt;Since template code tends to look like ordinary code, the compiler error messages should help you get it working. The tricky bit is &lt;tt&gt;static if&lt;/tt&gt; - be sure to test it with arguments that will evaluate to true and false.&lt;/p&gt;
  8828.  
  8829. &lt;p&gt;You may use &lt;tt&gt;static assert&lt;/tt&gt; on individual conditions inside a static if to help figure out why it is or isn't triggering:&lt;/p&gt;
  8830.  
  8831. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(a!T &amp;amp;&amp;amp; b!T) {} &lt;font color=&quot;green&quot;&gt;// wondering why this isn't triggering when passing int?
  8832. &lt;/font&gt;
  8833. &lt;font color=&quot;green&quot;&gt;// add this to figure it out:
  8834. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T == &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)) {
  8835. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(a!T);
  8836. &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(b!T);
  8837. &lt;font color=&quot;green&quot;&gt;// compile this and one of the asserts will fail, telling you which
  8838. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// part of the if above isn't working so you can dig deeper
  8839. &lt;/font&gt; }
  8840. &lt;/pre&gt;
  8841.  
  8842. &lt;p&gt;For debugging compile-time reflection, see the above on functions: just run the CT reflection as a runtime function! The overall reflection function should be decomposable into static if branches and CTFE functions, which the above two techniques should help you narrow down your problem.&lt;/p&gt;
  8843.  
  8844. &lt;p&gt;Lastly, when debugging recursive templates, I like to just look at it and reason one step at a time. Try simplifying it to just two arguments when instantiating to understand what's going wrong, then you can handle it like above again.&lt;/p&gt;
  8845.  
  8846. &lt;hr /&gt;
  8847.  
  8848. &lt;p&gt;The general tip with all debugging is to try to reduce the problem to something smaller that you already know how to handle. The 'meta' in 'metaprogramming' can often be removed in D by just running the program at ordinary runtime, dealing with compile time separately. Since the same function works in both contexts, writing and debugging metaprograms in D means you can handle it using the knowledge you already have.&lt;/p&gt;
  8849.  
  8850. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8851. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8852. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8853. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8854. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8855. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8856. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8857. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8858. &lt;/li&gt;&lt;/ul&gt;
  8859.  
  8860.  
  8861. &lt;/div&gt;
  8862. </description></item><item><title>Issue #44</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/nov-15.html</link><guid>http://arsdnet.net/this-week-in-d/nov-15.html</guid><pubDate>Sun, 15 Nov 2015 12:00:00 GMT</pubDate><description>
  8863. &lt;div id=&quot;body-container&quot;&gt;
  8864. &lt;h1&gt;
  8865. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8866. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8867. &lt;span id=&quot;title-date&quot;&gt;November 15, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8868.  
  8869.  
  8870. &lt;div id=&quot;preface&quot;&gt;
  8871.  
  8872. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8873.  
  8874. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8875.  
  8876. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8877.  
  8878. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8879.  
  8880. &lt;/div&gt;
  8881.  
  8882. &lt;h2&gt;Statistics&lt;/h2&gt;
  8883.  
  8884. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-11-09&amp;amp;chfieldto=2015-11-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8885. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-11-09&amp;amp;chfieldto=2015-11-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;27 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8886. 26 pull requests merged into the language:
  8887.  
  8888. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-09..2015-11-15&quot;&gt;11 into DMD&lt;/a&gt;,
  8889. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-09..2015-11-15&quot;&gt;12 into Phobos&lt;/a&gt;, and
  8890. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-09..2015-11-15&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8891. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-09..2015-11-15&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  8892. &lt;/li&gt;&lt;/ul&gt;
  8893.  
  8894. &lt;h2&gt;New Release&lt;/h2&gt;
  8895.  
  8896. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n1vatr$1106$1@digitalmars.com&quot;&gt;Release D 2.069.1&lt;/a&gt; was an unplanned point release whose sole purpose is to fix a severe Windows installer bug.&lt;/p&gt;
  8897.  
  8898. &lt;h2&gt;London Meetup on the 18th&lt;/h2&gt;
  8899.  
  8900. &lt;p&gt;If you are in the London area, check out the &lt;a href=&quot;http://forum.dlang.org/thread/gpvsesnvjqjywoxonabe@forum.dlang.org&quot;&gt;next London D Meetup - 18th November&lt;/a&gt;!&lt;/p&gt;
  8901.  
  8902. &lt;h2&gt;In the community&lt;/h2&gt;
  8903.  
  8904. &lt;h3&gt;Community announcements&lt;/h3&gt;
  8905.  
  8906. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1qjfh$30nn$1@digitalmars.com&quot;&gt;Martin's article about writing a vibe.d app on reddit&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xqfjfosfguxyszvcshsv@forum.dlang.org&quot;&gt;Sciter Bootstrap for making HTML based desktop apps in D (e.g: CEF for D)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1sksa$1m48$3@digitalmars.com&quot;&gt;Dhee - tiny app to learn/try out D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1t4a6$23cs$1@digitalmars.com&quot;&gt;Atila's article on Reddit: &amp;quot;Rust impressions from a C++/D programmer, part 1&amp;quot;&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1v170$o9p$1@digitalmars.com&quot;&gt;Tonight: Introduction to D at Codeaholics (HK)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1vc6k$122a$1@digitalmars.com&quot;&gt;Andrei Alexandrescu is now the official Language Architect&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1u45i$2vr1$1@digitalmars.com&quot;&gt;Andrei's Quora comments on Reddit: &amp;quot;D has no vision. Go is out of its depth. Rust skipped leg day.&amp;quot;&lt;/a&gt;
  8907. &lt;/li&gt;&lt;/ul&gt;
  8908.  
  8909. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  8910.  
  8911. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  8912.  
  8913. &lt;p&gt;Function and struct/class templates in D are often written in short form, like so:&lt;/p&gt;
  8914.  
  8915. &lt;pre class=&quot;d_code&quot;&gt; T foo(T)(T t) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; t; }
  8916. &lt;/pre&gt;
  8917.  
  8918. &lt;p&gt;This is a short-hand way of writing the full version, which is:&lt;/p&gt;
  8919.  
  8920. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; foo(T) {
  8921. T foo(T t) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; t; }
  8922. }
  8923. &lt;/pre&gt;
  8924.  
  8925. &lt;p&gt;A template in D is a collection of declarations parameterized on a compile-time argument list. It is similar to an aggregate in that it can have several members (which you can reference with dot notation, by the way, the trick seen here is called the eponymous trick - a template member with the same name as the template itself is automatically referenced, but that's not what I want to talk about today), and those members can be of any type - including other templates.&lt;/p&gt;
  8926.  
  8927. &lt;p&gt;Knowing this fact can be used to create complex multi-level templates. In cases where the compiler passes you an argument (such as implicit instantiations, opDispatch, opBinary, etc.) AND you want to pass an additional template argument, you can have trouble just doing one short-hand function with multiple arguments (Though in some cases, that does work). To achieve this, you can write the long-form style, putting a template inside a template:&lt;/p&gt;
  8928.  
  8929. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; foo {
  8930. &lt;font color=&quot;green&quot;&gt;// The compiler invokes this with the string after the dot
  8931. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; opDispatch(string s) {
  8932. &lt;font color=&quot;green&quot;&gt;// then your explicit arguments go here
  8933. &lt;/font&gt; T implementation(T)() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; T.init + 10; }
  8934.  
  8935. &lt;font color=&quot;green&quot;&gt;// this triggers the eponymous trick (you could
  8936. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// also have just named it opDispatch directly, but
  8937. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// the separate alias can also be used to add more
  8938. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// members or wrappings, so I am demoing it here)
  8939. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; opDispatch = implementation;
  8940. }
  8941. }
  8942. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  8943. foo f;
  8944. &lt;font color=&quot;green&quot;&gt;// runs with the arguments &amp;quot;intprop&amp;quot; and int
  8945. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a = f.intprop!&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;;
  8946. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  8947. writeln(a);
  8948. }
  8949. &lt;/pre&gt;
  8950.  
  8951. &lt;p&gt;Generally speaking, I think knowing the long form, or lower level implementation, is always useful. If a given feature doesn't work for you, being able to take it apart and put it back together again slightly differently can very often give you the flexibility you need. Since so much of D is made by combining building blocks, you rarely need to stop when you hit a wall - don't see it as an obstacle, see it as a source of building bricks!&lt;/p&gt;
  8952.  
  8953. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  8954. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  8955. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8956. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8957. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  8958. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  8959. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8960. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  8961. &lt;/li&gt;&lt;/ul&gt;
  8962.  
  8963.  
  8964. &lt;/div&gt;
  8965. </description></item><item><title>Issue #43</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/nov-08.html</link><guid>http://arsdnet.net/this-week-in-d/nov-08.html</guid><pubDate>Sun, 08 Nov 2015 12:00:00 GMT</pubDate><description>
  8966. &lt;div id=&quot;body-container&quot;&gt;
  8967. &lt;h1&gt;
  8968. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  8969. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  8970. &lt;span id=&quot;title-date&quot;&gt;November 8, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  8971.  
  8972.  
  8973. &lt;div id=&quot;preface&quot;&gt;
  8974.  
  8975. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  8976.  
  8977. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  8978.  
  8979. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  8980.  
  8981. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  8982.  
  8983. &lt;/div&gt;
  8984.  
  8985. &lt;h2&gt;Statistics&lt;/h2&gt;
  8986.  
  8987. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-11-02&amp;amp;chfieldto=2015-11-08&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8988. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-11-02&amp;amp;chfieldto=2015-11-08&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;27 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  8989. 16 pull requests merged into the language:
  8990.  
  8991. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-02..2015-11-08&quot;&gt;5 into DMD&lt;/a&gt;,
  8992. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-02..2015-11-08&quot;&gt;9 into Phobos&lt;/a&gt;, and
  8993. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-02..2015-11-08&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  8994. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-11-02..2015-11-08&quot;&gt;1 pull request merged into the website.&lt;/a&gt;
  8995. &lt;/li&gt;&lt;/ul&gt;
  8996.  
  8997. &lt;h2&gt;Major Developments&lt;/h2&gt;
  8998. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n1bo9e$2ils$1@digitalmars.com&quot;&gt;DMD 2.069.0 was released&lt;/a&gt; this week, making the official switch to ddmd - the self-hosted compiler, ported to D. In the release are rangified functions and the experimental std.allocator in Phobos.&lt;/p&gt;
  8999.  
  9000. &lt;p&gt;Other major improvements are line numbers in backtraces on Linux and basic support for calling Objective-C functions was added to the language on Mac.&lt;/p&gt;
  9001.  
  9002. &lt;h3&gt;Please help support D on Mobile&lt;/h3&gt;
  9003.  
  9004. &lt;p&gt;The Objective-C support in dmd (soon likely to be ported to ldc and gdc) is just one step toward better D support on mobile. &lt;a href=&quot;http://forum.dlang.org/thread/jhsgzqzdafvziupkglki@forum.dlang.org&quot;&gt;An LDC cross-compiler for Android/ARM&lt;/a&gt; based on the previous version of dmd was also released this week, as well as a &lt;a href=&quot;http://forum.dlang.org/thread/m2io5g7uvj.fsf@comcast.net&quot;&gt;iOS LDC binary release based on D 2.067.1&lt;/a&gt;.&lt;/p&gt;
  9005.  
  9006. &lt;p&gt;These two compilers for Android and iOS could use help: developers and especially &lt;a href=&quot;http://forum.dlang.org/thread/wnaxhoadwibctcbwpctl@forum.dlang.org&quot;&gt;testers&lt;/a&gt;.&lt;/p&gt;
  9007.  
  9008. &lt;p&gt;If you can, please help these efforts by running the &lt;a href=&quot;http://forum.dlang.org/thread/wnaxhoadwibctcbwpctl@forum.dlang.org&quot;&gt;tests on your ARM Android device&lt;/a&gt;!&lt;/p&gt;
  9009.  
  9010. &lt;h2&gt;In the community&lt;/h2&gt;
  9011.  
  9012. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9013.  
  9014. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1hqe5$1n24$1@digitalmars.com&quot;&gt;Atrium - 3D game written in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1aidl$1j54$1@digitalmars.com&quot;&gt;DConf 2016 venue: beautiful Heimathafen Neukolln&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1ccre$3q$1@digitalmars.com&quot;&gt;Release vibe.d 0.7.26&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tpwljwodpgamipualuud@forum.dlang.org&quot;&gt;Google Summer of Code 2016 Ideas Page&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1l23f$1d6o$1@digitalmars.com&quot;&gt;Brief interview in Poland with Andrei Alexandrescu&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n1cj7m$7po$1@digitalmars.com&quot;&gt;Please vote for the DConf logo&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tkqkyhvqqxvdffvrlmgx@forum.dlang.org&quot;&gt;2.069.0 Installation problem with .exe for Windows&lt;/a&gt;
  9015. &lt;/li&gt;&lt;/ul&gt;
  9016.  
  9017. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  9018.  
  9019. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9020. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9021. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9022. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9023. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9024. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9025. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9026. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9027. &lt;/li&gt;&lt;/ul&gt;
  9028.  
  9029.  
  9030. &lt;/div&gt;
  9031. </description></item><item><title>Issue #42</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/nov-01.html</link><guid>http://arsdnet.net/this-week-in-d/nov-01.html</guid><pubDate>Sun, 01 Nov 2015 12:00:00 GMT</pubDate><description>
  9032. &lt;div id=&quot;body-container&quot;&gt;
  9033. &lt;h1&gt;
  9034. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9035. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9036. &lt;span id=&quot;title-date&quot;&gt;November 1, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9037.  
  9038.  
  9039. &lt;div id=&quot;preface&quot;&gt;
  9040.  
  9041. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9042.  
  9043. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9044.  
  9045. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9046.  
  9047. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9048.  
  9049. &lt;/div&gt;
  9050.  
  9051. &lt;h2&gt;Statistics&lt;/h2&gt;
  9052.  
  9053. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-10-26&amp;amp;chfieldto=2015-11-01&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;21 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9054. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-10-26&amp;amp;chfieldto=2015-11-01&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9055. 36 pull requests merged into the language:
  9056.  
  9057. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-26..2015-11-01&quot;&gt;11 into DMD&lt;/a&gt;,
  9058. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-26..2015-11-01&quot;&gt;16 into Phobos&lt;/a&gt;, and
  9059. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-26..2015-11-01&quot;&gt;9 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9060. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-26..2015-11-01&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  9061. &lt;/li&gt;&lt;/ul&gt;
  9062.  
  9063. &lt;h2&gt;Major Developments&lt;/h2&gt;
  9064.  
  9065. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/group/study&quot;&gt;working group&lt;/a&gt; was formed to discuss alternate memory management schemes. The discussions in this first week were centered around adding some kind of automatic reference counting to the language itself, with proponents pointing out the potential for easing interfacing with COM and Objective-C, with detractors saying the proposed solutions have holes and are not general enough.&lt;/p&gt;
  9066.  
  9067. &lt;p&gt;As of this writing, the details are still being hashed out. As more consensus is reached, I will try to summarize it here each week.&lt;/p&gt;
  9068.  
  9069. &lt;h2&gt;Job Openings&lt;/h2&gt;
  9070.  
  9071. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n0b9lo$1faf$3@digitalmars.com&quot;&gt;Two new openings at EMSI (D experience a plus) - Data Engineer and API Developer, Moscow, Idaho&lt;/a&gt;&lt;/p&gt;
  9072.  
  9073. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/jaciytmrovhuxggfvngv@forum.dlang.org&quot;&gt;Sociomantic Labs is looking for Software Developers! (D language), Berlin, Germany&lt;/a&gt;&lt;/p&gt;
  9074.  
  9075. &lt;h2&gt;In the community&lt;/h2&gt;
  9076.  
  9077. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9078.  
  9079. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wnaxhoadwibctcbwpctl@forum.dlang.org&quot;&gt;D 2.068.2 test runner for Android ARM, please test and report results from your Android device&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n0unr5$24lm$1@digitalmars.com&quot;&gt;CppCast interview with Andrei Alexandrescu&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kkeekhcrzbdtfvfewwrt@forum.dlang.org&quot;&gt;LDC 0.16.1 has been released!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n10brs$l9e$1@digitalmars.com&quot;&gt;Release Candidate D 2.069.0-rc2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qntwqpmtxkzhtbbfgepv@forum.dlang.org&quot;&gt;DCD 0.7.3 - D Completion Daemon&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n0pvcp$tq4$1@digitalmars.com&quot;&gt;&amp;quot;Programming in D&amp;quot; ebook is available for purchase&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/puzrcxrrnszsjqymkrsf@forum.dlang.org&quot;&gt;D talk at the EPFL university in Lausanne, Switzerland&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n0qn8f$1joj$1@digitalmars.com&quot;&gt;Short film about our visit in Brasov&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfswzlqmvlwypkpglnjw@forum.dlang.org&quot;&gt;Dgraph v0.0.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n0mfvc$pc1$1@digitalmars.com&quot;&gt;scod - a clean and lightweight theme for ddox&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/frqwntwjanikzdykvwmn@forum.dlang.org&quot;&gt;Heroku Buildpack for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/n1677k$2vl$1@digitalmars.com&quot;&gt;ACCU: Self Publishing a Technical Book / Ask an expert about D; November 11, 2015&lt;/a&gt;
  9080. &lt;/li&gt;&lt;/ul&gt;
  9081.  
  9082. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  9083.  
  9084. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9085.  
  9086. &lt;p&gt;If you see an error message in Phobos along the lines of &amp;quot;no matching template for...&amp;quot;, often adding &lt;tt&gt;.array&lt;/tt&gt; right before it in the range pipeline will fix the problem.&lt;/p&gt;
  9087.  
  9088. &lt;p&gt;This week, I wrote up a &lt;a href=&quot;http://stackoverflow.com/a/33381643/1457000&quot;&gt;more detailed explanation with other alternative solutions&lt;/a&gt; on Stack Overflow to answer this FAQ and provide some background on why it works - and doesn't work - the way it is.&lt;/p&gt;
  9089.  
  9090. &lt;p&gt;If you are using or writing any range functions, I suggest you familiarize yourself with the std.algorithm zero-hidden-cost philosophy which is at work here to write more efficient code.&lt;/p&gt;
  9091.  
  9092.  
  9093. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9094. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9095. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9096. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9097. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9098. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9099. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9100. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9101. &lt;/li&gt;&lt;/ul&gt;
  9102.  
  9103.  
  9104. &lt;/div&gt;
  9105. </description></item><item><title>Issue #41</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/oct-25.html</link><guid>http://arsdnet.net/this-week-in-d/oct-25.html</guid><pubDate>Sun, 25 Oct 2015 12:00:00 GMT</pubDate><description>
  9106. &lt;div id=&quot;body-container&quot;&gt;
  9107. &lt;h1&gt;
  9108. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9109. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9110. &lt;span id=&quot;title-date&quot;&gt;October 25, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9111.  
  9112.  
  9113. &lt;div id=&quot;preface&quot;&gt;
  9114.  
  9115. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9116.  
  9117. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9118.  
  9119. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9120.  
  9121. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9122.  
  9123. &lt;/div&gt;
  9124.  
  9125. &lt;h2&gt;Statistics&lt;/h2&gt;
  9126.  
  9127. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-10-19&amp;amp;chfieldto=2015-10-25&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;8 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9128. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-10-19&amp;amp;chfieldto=2015-10-25&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9129. 50 pull requests merged into the language:
  9130.  
  9131. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-19..2015-10-25&quot;&gt;19 into DMD&lt;/a&gt;,
  9132. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-19..2015-10-25&quot;&gt;22 into Phobos&lt;/a&gt;, and
  9133. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-19..2015-10-25&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9134. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-19..2015-10-25&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  9135. &lt;/li&gt;&lt;/ul&gt;
  9136.  
  9137. &lt;h2&gt;Major Developments&lt;/h2&gt;
  9138.  
  9139. &lt;p&gt;This Week in D is now featured on the dlang.org homepage!&lt;/p&gt;
  9140.  
  9141. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/sjvpbbkntukdxbyfcpkn@forum.dlang.org&quot;&gt;LDC 0.16.0 has been released!&lt;/a&gt; This is based on 2.067.1 frontend. Also has Win64 compiler available!&lt;/p&gt;
  9142.  
  9143. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n0dno0$2b8i$1@digitalmars.com&quot;&gt;DConf 2016, Berlin: Call for Submissions is now open!&lt;/a&gt; DConf 2016 will be hosted by Sociomantic Labs in Berlin, Germany, on May 4-6, 2016. They are now looking for talk submissions (an accepted talk will also mean the D Foundation will reimburse reasonable travel expenses to the conference). The submission deadline is February 26.&lt;/p&gt;
  9144.  
  9145. &lt;h2&gt;Job Openings&lt;/h2&gt;
  9146.  
  9147. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/n0b9lo$1faf$3@digitalmars.com&quot;&gt;Two new openings at EMSI (D experience a plus) - Data Engineer and API Developer, Moscow, Idaho&lt;/a&gt;&lt;/p&gt;
  9148.  
  9149. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/jaciytmrovhuxggfvngv@forum.dlang.org&quot;&gt;Sociomantic Labs is looking for Software Developers! (D language), Berlin, Germany&lt;/a&gt;&lt;/p&gt;
  9150.  
  9151. &lt;h2&gt;In the community&lt;/h2&gt;
  9152.  
  9153. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9154.  
  9155. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m2y4esrbh6.fsf@comcast.net&quot;&gt;LDC iOS cross-compiler with arm64&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gjivyaolrxagueffslzr@forum.dlang.org&quot;&gt;Calypso (C++ binder) progress report (+ updated MingW64 build)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvt4q8$27d$1@digitalmars.com&quot;&gt;Walter Bright, Scott Meyers and me live on the most watched morning show in Romania&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n032q0$291l$1@digitalmars.com&quot;&gt;CppCon: Declarative Control Flow&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/otmuincrkuoukogmluky@forum.dlang.org&quot;&gt;Swaggarize&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/n088cd$o0k$1@digitalmars.com&quot;&gt;O'Reily Software Architecture Call for Speakers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/eurkebwwfeoolpziftll@forum.dlang.org&quot;&gt;dfmt 0.4.1 - formatter for D source code&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uosbtuwpmukhetmyxrxy@forum.dlang.org&quot;&gt;DCD 0.7.1 - bug fix release for D Completion Daemon&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/20151014090114.60780ad6@marco-toshiba&quot;&gt;Fastest JSON parser in the world is a D project&lt;/a&gt;
  9156. &lt;/li&gt;&lt;/ul&gt;
  9157.  
  9158. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the announce forum&lt;/a&gt;.&lt;/p&gt;
  9159.  
  9160. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9161.  
  9162. &lt;p&gt;D's structs are a remarkably flexible part of the language and can enable more than you'd think at first glance. This week, I want to show you a trick I used in dom.d to beat Javascript on &lt;tt&gt;style&lt;/tt&gt;.&lt;/p&gt;
  9163.  
  9164. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Style {
  9165. string* _attribute;
  9166. &lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; string getAttribute() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; *_attribute; }
  9167. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; getAttribute &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;;
  9168.  
  9169. string opDispatch(string name)(string v = &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(name != &lt;font color=&quot;red&quot;&gt;&amp;quot;popFront&amp;quot;&lt;/font&gt;) {
  9170. name = camelCaseToDashes(name); &lt;font color=&quot;green&quot;&gt;// dot notation is camelCase, css style is camel-case
  9171. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(v !&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;) {
  9172. &lt;font color=&quot;green&quot;&gt;// parse the attribute, return the requested component
  9173. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;null&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// not implemented in example
  9174. &lt;/font&gt; } &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt; {
  9175. &lt;font color=&quot;green&quot;&gt;// set the component in the string
  9176. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; v;
  9177. }
  9178. }
  9179. }
  9180.  
  9181. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Element {
  9182. string styleAttribute;
  9183. @property Style style() { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; Style(&amp;amp;styleAttribute); }
  9184. }
  9185.  
  9186. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  9187. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; element = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Element();
  9188.  
  9189. element.style = &lt;font color=&quot;red&quot;&gt;&amp;quot;color: red; font-style: italic;&amp;quot;&lt;/font&gt;;
  9190. &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(element.style.color == &lt;font color=&quot;red&quot;&gt;&amp;quot;red&amp;quot;&lt;/font&gt;);
  9191. element.fontStyle = &lt;font color=&quot;red&quot;&gt;&amp;quot;bold&amp;quot;&lt;/font&gt;;
  9192. &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(element.style == &lt;font color=&quot;red&quot;&gt;&amp;quot;color: red; font-style: bold;&amp;quot;&lt;/font&gt;);
  9193. }
  9194. &lt;/pre&gt;
  9195.  
  9196. $(P This code is incomplete, the actual guts of the logic is left unimplemented, but the purpose of this is to show the language technique, not the details of how to parse CSS strings, etc. Nevertheless, from the assertions, you get the idea of what's possible. (If you are interested in those details, I did implement this in &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/dom.d#L612&quot;&gt;dom.d&lt;/a&gt;)
  9197.  
  9198. &lt;p&gt;The basic idea is to write a struct which gives custom functionality, then use &lt;tt&gt;alias this&lt;/tt&gt; subtyping to fall back on another type for additional functionality. Sometimes, you may want to alias this to yet another wrapper struct to provide even more fine-grained customizability.&lt;/p&gt;
  9199.  
  9200. &lt;p&gt;The &lt;tt&gt;Style&lt;/tt&gt; struct here is not really intended to be used as a traditional plain-old-data type; the end user would never declare one themselves. (Indeed, it arguably ought to be a Voldemort type - a struct declared inside the &lt;tt&gt;style&lt;/tt&gt; function itself, and returned with &lt;tt&gt;auto&lt;/tt&gt;, such that its name is never spoken outside the function. Personally, though, I don't like that pattern. It comes with a few tradeoffs including forced templating - which doesn't play well with virtual functions in interfaces and classes - different documentation (some believe it is worse, I'm personally on the fence, but it is undoubtedly different than many programmers are used to), and just a bit of a pain to peer inside.)&lt;/p&gt;
  9201.  
  9202. &lt;p&gt;Instead, the user simply calls the &lt;tt&gt;style&lt;/tt&gt; method/property and pretends it is data that just happens to exhibit some interesting behavior. Here, the &lt;tt&gt;opDispatch&lt;/tt&gt; provides a way to manipulate the string in a structured way, without the programmer needing to create code for the whole structure.&lt;/p&gt;
  9203.  
  9204. &lt;div class=&quot;tip&quot;&gt;The constraint, &lt;tt&gt;if(name != &amp;quot;popFront&amp;quot;)&lt;/tt&gt;, on my opDispatch is there so the style property will never be accidentally mistaken to be a range by other compile-time duck typing. This is arguably a bit sloppy, but it works to prevent strange code from compiling and doing wrong things like infinite looping when, for example, &lt;tt&gt;writeln&lt;/tt&gt; thinks it is an input range instead of a string.&lt;/div&gt;
  9205.  
  9206. &lt;p&gt;The &lt;tt&gt;alias this&lt;/tt&gt; does two things: for one, it provides a transition path for code that was previously written assuming &lt;tt&gt;style&lt;/tt&gt; would just be a string. If you treat it like a string, it still works the same way, so that old code will not necessarily break. (Though, since it no longer is a string, templates can detect the difference, so such tricks are not foolproof.) The second thing is it enables something Javascript cannot do: the same getter can return a string or a style access object, depending on how it is used. We beat Javascript on &lt;tt&gt;style&lt;/tt&gt;! :D &lt;/p&gt;
  9207.  
  9208. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; style = element.style;
  9209. style.color = &lt;font color=&quot;red&quot;&gt;&amp;quot;green&amp;quot;&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// works, the above got us the smart object
  9210. &lt;/font&gt;
  9211. string s = style; &lt;font color=&quot;green&quot;&gt;// still works, alias this makes it compatible with a string too!
  9212. &lt;/font&gt;&lt;/pre&gt;
  9213.  
  9214. &lt;hr /&gt;
  9215.  
  9216. &lt;p&gt;The bottom line here isn't any one struct-based technique, it is just the realization that with wrapper structs and smart subtyping, we can apply *any* struct-based techniques to basic types, without needing to surrender the simplicity of working with that basic type directly when we want to.&lt;/p&gt;
  9217.  
  9218. &lt;p&gt;Sometimes, a single struct cannot solve a problem, but creative combining of two or more may be able to. Don't give up when faced with a new challenge!&lt;/p&gt;
  9219.  
  9220.  
  9221. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9222. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9223. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9224. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9225. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9226. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9227. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9228. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9229. &lt;/li&gt;&lt;/ul&gt;
  9230.  
  9231.  
  9232. &lt;/div&gt;
  9233. </description></item><item><title>Issue #40</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/oct-18.html</link><guid>http://arsdnet.net/this-week-in-d/oct-18.html</guid><pubDate>Sun, 18 Oct 2015 12:00:00 GMT</pubDate><description>
  9234. &lt;div id=&quot;body-container&quot;&gt;
  9235. &lt;h1&gt;
  9236. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9237. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9238. &lt;span id=&quot;title-date&quot;&gt;October 18, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9239.  
  9240.  
  9241. &lt;div id=&quot;preface&quot;&gt;
  9242.  
  9243. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9244.  
  9245. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9246.  
  9247. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9248.  
  9249. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9250.  
  9251. &lt;/div&gt;
  9252.  
  9253. &lt;h2&gt;Statistics&lt;/h2&gt;
  9254.  
  9255. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-10-12&amp;amp;chfieldto=2015-10-18&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;23 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9256. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-10-12&amp;amp;chfieldto=2015-10-18&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9257. 50 pull requests merged into the language:
  9258.  
  9259. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-12..2015-10-18&quot;&gt;11 into DMD&lt;/a&gt;,
  9260. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-12..2015-10-18&quot;&gt;23 into Phobos&lt;/a&gt;, and
  9261. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-12..2015-10-18&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9262. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-12..2015-10-18&quot;&gt;10 pull requests merged into the website.&lt;/a&gt;
  9263. &lt;/li&gt;&lt;/ul&gt;
  9264.  
  9265. &lt;h2&gt;Major Developments&lt;/h2&gt;
  9266.  
  9267. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mvqi3k$ssi$1@digitalmars.com&quot;&gt;The D Language Foundation is now incorporated&lt;/a&gt; which is a legal entity to drove D development, taking donations and eventually, paying people to work on D!&lt;/p&gt;
  9268.  
  9269. &lt;p&gt;This happened last month, but I forgot to announce it! &lt;a href=&quot;https://sourceware.org/ml/gdb-patches/2015-09/msg00612.html&quot;&gt;Iain Buclaw was officially appointed as D language maintainer for gdb&lt;/a&gt;.&lt;/p&gt;
  9270.  
  9271. &lt;p&gt;The Windows enhancements discussed a few weeks ago got merged! &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pull/5147&quot;&gt;optlink.exe is the new name for link.exe&lt;/a&gt; to avoid name conflicts on 64 bit, and &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1402&quot;&gt;Windows headers from the win32 bindings project&lt;/a&gt; are now in druntime! This is going to be huge when it reaches the public release.&lt;/p&gt;
  9272.  
  9273. &lt;p&gt;There was a conference in Romania where Walter and Andrei spoke. &lt;a href=&quot;http://forum.dlang.org/thread/mulpjo$2t14$1@digitalmars.com?page=3#post-evzyiakrgydpdjcxsvkz:40forum.dlang.org&quot;&gt;Vladimir Panteleev summarized the conference here&lt;/a&gt;. The talks were also discussed on the most popular morning show in Romania!&lt;/p&gt;
  9274.  
  9275. &lt;h2&gt;In the community&lt;/h2&gt;
  9276.  
  9277. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9278.  
  9279. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvlmod$2vel$1@digitalmars.com&quot;&gt;Beta D 2.069.0-b2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvrqir$20gh$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup October 22, 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvsdnc$2eqo$1@digitalmars.com&quot;&gt;&amp;quot;Programming in D&amp;quot; code samples available as zip&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kbbvdqvqobarqnhowlhy@forum.dlang.org&quot;&gt;Berlin D Meetup October 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvm8aa$cra$1@digitalmars.com&quot;&gt;Semi-OT: Andrei's CppCon 2015 presentation is on Reddit&lt;/a&gt;
  9280. &lt;/li&gt;&lt;/ul&gt;
  9281.  
  9282. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9283.  
  9284. &lt;h3&gt;Notable Forum Threads&lt;/h3&gt;
  9285.  
  9286. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mvia2k$2pvh$1@digitalmars.com&quot;&gt;Synchronized classes have no public members&lt;/a&gt; discusses implementing a rule from the D Programming Language book as part of a drive to fix rough edges in the language spec and implementation.&lt;/p&gt;
  9287.  
  9288. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9289. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9290. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9291. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9292. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9293. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9294. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9295. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9296. &lt;/li&gt;&lt;/ul&gt;
  9297.  
  9298.  
  9299. &lt;/div&gt;
  9300. </description></item><item><title>Issue #39</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/oct-11.html</link><guid>http://arsdnet.net/this-week-in-d/oct-11.html</guid><pubDate>Sun, 11 Oct 2015 12:00:00 GMT</pubDate><description>
  9301. &lt;div id=&quot;body-container&quot;&gt;
  9302. &lt;h1&gt;
  9303. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9304. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9305. &lt;span id=&quot;title-date&quot;&gt;October 11, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9306.  
  9307.  
  9308. &lt;div id=&quot;preface&quot;&gt;
  9309.  
  9310. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9311.  
  9312. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9313.  
  9314. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9315.  
  9316. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9317.  
  9318. &lt;/div&gt;
  9319.  
  9320. &lt;h2&gt;Statistics&lt;/h2&gt;
  9321.  
  9322. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-10-05&amp;amp;chfieldto=2015-10-11&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9323. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-10-05&amp;amp;chfieldto=2015-10-11&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9324. 30 pull requests merged into the language:
  9325.  
  9326. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-05..2015-10-11&quot;&gt;22 into DMD&lt;/a&gt;,
  9327. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-05..2015-10-11&quot;&gt;7 into Phobos&lt;/a&gt;, and
  9328. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-05..2015-10-11&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9329. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-10-05..2015-10-11&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  9330. &lt;/li&gt;&lt;/ul&gt;
  9331.  
  9332. &lt;h2&gt;In the community&lt;/h2&gt;
  9333.  
  9334. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9335.  
  9336. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fhtrmbfjfrufwxgaqjfz@forum.dlang.org&quot;&gt;dnsmadeeasy API&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ukusatjdtljheyghoskg@forum.dlang.org&quot;&gt;Digger 2.4&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lvpwnztnatnmttpybfud@forum.dlang.org&quot;&gt;DSFML reaches version 2.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ngfntsklfphkraggfiak@forum.dlang.org&quot;&gt;Voting for std.experimental.testing&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uhchyejwoxilbrhktmul@forum.dlang.org&quot;&gt;D Language Implementation of DIgitalOcean API&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/unbnlpilitsqxkqfurmc@forum.dlang.org&quot;&gt;LDC 0.16.0 beta2 is out! Try out before we create the final release!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mv46j5$q48$1@digitalmars.com&quot;&gt;Beta D 2.069.0-b1&lt;/a&gt;
  9337. &lt;/li&gt;&lt;/ul&gt;
  9338.  
  9339. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9340.  
  9341.  
  9342. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9343. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9344. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9345. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9346. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9347. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9348. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9349. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9350. &lt;/li&gt;&lt;/ul&gt;
  9351.  
  9352.  
  9353. &lt;/div&gt;
  9354. </description></item><item><title>Issue #38</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/oct-04.html</link><guid>http://arsdnet.net/this-week-in-d/oct-04.html</guid><pubDate>Sun, 04 Oct 2015 12:00:00 GMT</pubDate><description>
  9355. &lt;div id=&quot;body-container&quot;&gt;
  9356. &lt;h1&gt;
  9357. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9358. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9359. &lt;span id=&quot;title-date&quot;&gt;October 4, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9360.  
  9361.  
  9362. &lt;div id=&quot;preface&quot;&gt;
  9363.  
  9364. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9365.  
  9366. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9367.  
  9368. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9369.  
  9370. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9371.  
  9372. &lt;/div&gt;
  9373.  
  9374. &lt;h2&gt;Statistics&lt;/h2&gt;
  9375.  
  9376. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-09-28&amp;amp;chfieldto=2015-10-04&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9377. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-09-28&amp;amp;chfieldto=2015-10-04&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;27 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9378. 52 pull requests merged into the language:
  9379.  
  9380. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-28..2015-10-04&quot;&gt;38 into DMD&lt;/a&gt;,
  9381. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-28..2015-10-04&quot;&gt;10 into Phobos&lt;/a&gt;, and
  9382. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-28..2015-10-04&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9383. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-28..2015-10-04&quot;&gt;1 pull request merged into the website.&lt;/a&gt;
  9384. &lt;/li&gt;&lt;/ul&gt;
  9385.  
  9386. &lt;h2&gt;Major Changes&lt;/h2&gt;
  9387.  
  9388. &lt;p&gt;CyberShadow and I made huge progress in including full Win32 bindings into druntime. I finally got the tests passing on &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1076&quot;&gt;my pull request&lt;/a&gt; after nine months of fighting with the Win64 Phobos build process, and CyberShadow is taking it to the next step with his own &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1402&quot;&gt;pull request&lt;/a&gt; which fixes several bugs he found in mine.&lt;/p&gt;
  9389.  
  9390. &lt;p&gt;While the whole Windows API has always been available from D, you used to need to declare some of the prototypes yourself or use a third party binding, which could cause name clashes. These recent steps will make it more than just possible, they will make it very easy.&lt;/p&gt;
  9391.  
  9392. &lt;p&gt;With both of us working on it, we hope to have these full bindings in the next major dmd release.&lt;/p&gt;
  9393.  
  9394. &lt;div class=&quot;tip&quot;&gt;Speaking of Windows, dmd has a little-known switch, &lt;tt&gt;-m32mscoff&lt;/tt&gt;, which generates Microsoft format object files and uses the MS linker even on 32 bit. (The default is to use Microsoft formats on 64 bit, but the older OMF format and Digital Mars' optlink linker on 32 bit, which causes some interop problems.)
  9395.  
  9396. In the new version of dmd, there are mscoff Phobos libraries included, so the &lt;tt&gt;-m32mscoff&lt;/tt&gt; switch will just work when building your own programs, if you have the Microsoft toolchain installed too.&lt;/div&gt;
  9397.  
  9398. &lt;p&gt;Walter also changed the name of optlink's binary from &lt;tt&gt;link.exe&lt;/tt&gt; to &lt;tt&gt;optlink.exe&lt;/tt&gt; in the main distribution, which will help disambiguate PATH problems.&lt;/p&gt;
  9399.  
  9400. &lt;p&gt;This is an exciting time for D's Windows users!&lt;/p&gt;
  9401.  
  9402. &lt;h2&gt;In the community&lt;/h2&gt;
  9403.  
  9404. &lt;h3&gt;D Livestreamers&lt;/h3&gt;
  9405.  
  9406. &lt;p&gt;Live streaming is a favorite pastime of both developers and gamers. With many different streaming options available on how to stream, it can be a bit confusing.&lt;/p&gt;
  9407.  
  9408. &lt;p&gt;With D there are currently two streamers:&lt;/p&gt;
  9409.  
  9410. &lt;ul&gt;&lt;li&gt; Known on the news group as Wild but a common nickname is Vild.
  9411. &lt;p&gt;Dan Printzell currently streams on Livecoding &lt;a href=&quot;http://www.livecoding.tv/wild&quot;&gt;www.livecoding.tv/wild&lt;/a&gt; he does a mix of OS based work and creating an Atom IDE plugin for D. Commonly Dan streams for about two hours every day.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;
  9412. Known commonly as alphaglosined, Richard (Rikki) Cattermole is commonly found on both #d Freenode and OFTC and the news group.
  9413. &lt;p&gt;Currently he streams on Livecoding &lt;a href=&quot;http://www.livecoding.tv/alphaglosined&quot;&gt;www.livecoding.tv/alphaglosined&lt;/a&gt; every Monday and Tuesday at roughly UTC+0 12pm for about two to three hours.&lt;/p&gt;
  9414. &lt;/li&gt;&lt;/ul&gt;
  9415.  
  9416. &lt;p&gt;This has introduced many people to the D programming language and it is hoped, will bring in more people as time goes on.&lt;/p&gt;
  9417.  
  9418.  
  9419. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9420.  
  9421. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wekcwmugblbipafgftrz@forum.dlang.org&quot;&gt;LDC 0.16.0 beta1 is out! We highly appreciate your feedback!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mulpjo$2t14$1@digitalmars.com&quot;&gt;Walter and I talk about D in Romania&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hxmemunyawufbjozesxm@forum.dlang.org&quot;&gt;A new article about working with files in D&lt;/a&gt;
  9422. &lt;/li&gt;&lt;/ul&gt;
  9423.  
  9424. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9425.  
  9426. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9427.  
  9428. &lt;p&gt;This week's tip was written by Rikki Cattermole:&lt;/p&gt;
  9429.  
  9430. &lt;p&gt;&lt;b&gt;Interfaces: D headers and separating concerns of implementation&lt;/b&gt;&lt;/p&gt;
  9431.  
  9432. &lt;p&gt;For the C/C++ converts, D has a very interesting feature. Or better put, lack of feature. Header files.&lt;/p&gt;
  9433.  
  9434. &lt;p&gt;The purpose of header files is to distinguish between declarations and implementations of classes, structs and free functions.&lt;/p&gt;
  9435.  
  9436. &lt;p&gt;Without focussing upon only this, there are other relevant aspects that must be considered. For example the D ABI mangles based upon the file. In C++ it is done based upon namespace instead. For C there is no name mangling.&lt;/p&gt;
  9437.  
  9438. &lt;p&gt;Because of the change between C++ and D, with D mangling symbols to the file. It is not possible for symbols to be defined in other files while also declared (it's prototype) in another file. This is one of the core problems when considering what header files do.  But this is not entirely true. It is possible to declare and implement functions and methods in separate files in D. It requires playing around with &lt;tt&gt;pragma(mangle, &amp;quot;_D....&amp;quot;)&lt;/tt&gt; on a symbol. There is an alternative and just as evil way.&lt;/p&gt;
  9439.  
  9440. &lt;p&gt;Function/method prototypes, are functions/methods declared but without a body. Commonly will have the &lt;tt&gt;extern&lt;/tt&gt; keyword attributed to it. This allows diverging the implementation to be provided to the linker instead of dmd. However keep in mind you will still need to implement it with the correct mangling for the symbol.&lt;/p&gt;
  9441.  
  9442. &lt;p&gt;So far everything that has been said has not been idiomatic D. Not by far. A more idiomatic approach is to use D interface files or more commonly known as .di files. These files are an alternative to the regularly .d files. While they may have function/method bodies it is highly uncommon for symbols to contain it. Generally they will be generated by the compiler (-H).&lt;/p&gt;
  9443.  
  9444. &lt;p&gt;While it is possible to write .di files manually, it is highly recommended against it. They are meant to accompany static/shared libraries. As a means to not give out your source code while making people able to include and use your code. They have quite a bit different purpose then C/C++ headers.&lt;/p&gt;
  9445.  
  9446. &lt;p&gt;Generally if you are finding you are wanting to separate out implementation and declaration to share. You are probably doing something wrong. At least in the open source community.&lt;/p&gt;
  9447.  
  9448.  
  9449.  
  9450. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9451. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9452. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9453. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9454. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9455. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9456. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9457. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9458. &lt;/li&gt;&lt;/ul&gt;
  9459.  
  9460.  
  9461. &lt;/div&gt;
  9462. </description></item><item><title>Issue #37</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/sep-27.html</link><guid>http://arsdnet.net/this-week-in-d/sep-27.html</guid><pubDate>Sun, 27 Sep 2015 12:00:00 GMT</pubDate><description>
  9463. &lt;div id=&quot;body-container&quot;&gt;
  9464. &lt;h1&gt;
  9465. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9466. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9467. &lt;span id=&quot;title-date&quot;&gt;September 27, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9468.  
  9469.  
  9470. &lt;div id=&quot;preface&quot;&gt;
  9471.  
  9472. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9473.  
  9474. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9475.  
  9476. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9477.  
  9478. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9479.  
  9480. &lt;/div&gt;
  9481.  
  9482. &lt;h2&gt;Statistics&lt;/h2&gt;
  9483.  
  9484. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-09-21&amp;amp;chfieldto=2015-09-27&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;14 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9485. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-09-21&amp;amp;chfieldto=2015-09-27&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;25 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9486. 40 pull requests merged into the language:
  9487.  
  9488. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-21..2015-09-27&quot;&gt;21 into DMD&lt;/a&gt;,
  9489. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-21..2015-09-27&quot;&gt;11 into Phobos&lt;/a&gt;, and
  9490. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-21..2015-09-27&quot;&gt;8 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9491. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-21..2015-09-27&quot;&gt;7 pull requests merged into the website.&lt;/a&gt;
  9492. &lt;/li&gt;&lt;/ul&gt;
  9493.  
  9494. &lt;h2&gt;New Compiler Release&lt;/h2&gt;
  9495.  
  9496. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mtvf1q$1bfv$1@digitalmars.com&quot;&gt;Release D 2.068.2&lt;/a&gt; came out this week. It has regression fixes from the previous release.&lt;/p&gt;
  9497.  
  9498. &lt;h2&gt;In the community&lt;/h2&gt;
  9499.  
  9500. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9501.  
  9502. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mto0m6$bl9$1@digitalmars.com&quot;&gt;cpp_binder, a not-yet-useful tool for generating C++ bindings&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/muyrvtbzelvblmoaeuoy@forum.dlang.org&quot;&gt;Coedit 2 alpha 1 - now with dub&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ekdwctyyyhnkkziqpdhm@forum.dlang.org&quot;&gt;Simple tutorial on deploying Vibe.d to Azure Web App&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pcfzdibkblwzjqnohvoc@forum.dlang.org&quot;&gt;OneDrive Client written in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mtsd38$16ub$1@digitalmars.com&quot;&gt;Scriptlike v0.9.4 - Perl-like interpolated strings, full examples and more.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zwpslyjxlagkkkhfqfuu@forum.dlang.org&quot;&gt;New blog about D&lt;/a&gt;
  9503. &lt;/li&gt;&lt;/ul&gt;
  9504.  
  9505. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9506.  
  9507. &lt;h3&gt;Significant forum threads&lt;/h3&gt;
  9508.  
  9509. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/ekdwctyyyhnkkziqpdhm@forum.dlang.org&quot;&gt;simple tutorial on deploying Vibe.d to Azure Web App&lt;/a&gt; wasn't the only interesting tutorial on the forums this week. There was also a post on &lt;a href=&quot;http://forum.dlang.org/thread/ojxbkutzoftsegswwvul@forum.dlang.org&quot;&gt;building Windows kernel-mode drivers in D&lt;/a&gt;&lt;/p&gt;
  9510.  
  9511. &lt;p&gt;The author described how to build a Windows driver in D, pointing out a solution to a checksum problem, and plans to add more to it. As it is though, it proves the concept works!&lt;/p&gt;
  9512.  
  9513.  
  9514. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9515.  
  9516. &lt;p&gt;This week, I want to talk about using UDAs and private implementations to generate modified public functions.&lt;/p&gt;
  9517.  
  9518. &lt;p&gt;UDAs (user-defined attributes) in D can only attach data to a declaration. They cannot transform code on their own. Thus, you need to use some kind of annotated input to generate the modified output. Sometimes, the generated output is is a class which is used through a static interface, or network implementation code for remote procedure calls. These are fairly straightforward because you don't need to call the generated code directly - you can use the ordinary interface and perhaps a factory function.&lt;/p&gt;
  9519.  
  9520. &lt;p&gt;But, sometimes you want the source to be practically hidden and the entire interface in your code to be modified. There's a few ways to do this, but all are basically the same: you write input declarations then mixin some transformed code.&lt;/p&gt;
  9521.  
  9522. &lt;p&gt;The class and interface based implementation option works here too - you could write a class that wraps another class and exposes the same interface. But I want to show something more unique to D today: using template mixins as the source.&lt;/p&gt;
  9523.  
  9524. &lt;p&gt;First, the example code. This will define a UDA called &lt;tt&gt;log&lt;/tt&gt; and a &lt;tt&gt;SourceImpl&lt;/tt&gt; source implementation that uses it. The &lt;tt&gt;ProcessLogging&lt;/tt&gt; function will generate the instrumented functions, which are mixed in at the top level to expose them as the public interface. Finally, the &lt;tt&gt;main&lt;/tt&gt; function shows that it will work.&lt;/p&gt;
  9525.  
  9526. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; log;
  9527.  
  9528. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; SourceImpl() {
  9529.        &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a;
  9530.        &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo() {
  9531.                &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  9532.                writeln(a);
  9533.        }
  9534.  
  9535.        @log &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; logMe() {
  9536.                a = 10;
  9537.        }
  9538. }
  9539.  
  9540. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;template&lt;/font&gt; ProcessLogging(&lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; Source) {
  9541.        &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; Source _sourceMixin;
  9542.  
  9543.        &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt;(_implementationStringMixin());
  9544.  
  9545.        &lt;font color=&quot;blue&quot;&gt;private&lt;/font&gt; string _implementationStringMixin() {
  9546.                string code;
  9547.  
  9548.                code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;static import std.traits;&amp;quot;&lt;/font&gt;;
  9549.  
  9550.                &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.traits;
  9551.                &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(memberName; &lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(allMembers, _sourceMixin)) {
  9552.                        &lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(hasUDA!(&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(getMember, _sourceMixin, memberName), log)) {
  9553.                                string f = &lt;font color=&quot;red&quot;&gt;&amp;quot;__traits(getMember, _sourceMixin, \&amp;quot;&amp;quot;&lt;/font&gt;~memberName~&lt;font color=&quot;red&quot;&gt;&amp;quot;\&amp;quot;)&amp;quot;&lt;/font&gt;;
  9554.                                code ~= &lt;font color=&quot;red&quot;&gt;&amp;quot;std.traits.ReturnType!(&amp;quot;&lt;/font&gt;~f~&lt;font color=&quot;red&quot;&gt;&amp;quot;) &amp;quot;&lt;/font&gt;~memberName~&lt;font color=&quot;red&quot;&gt;&amp;quot;(std.traits.ParameterTypeTuple!(&amp;quot;&lt;/font&gt;~f~&lt;font color=&quot;red&quot;&gt;&amp;quot;) args) {
  9555.                                        import std.stdio;
  9556.                                        writeln(\&amp;quot;Logging &amp;quot;&lt;/font&gt; ~ memberName ~&lt;font color=&quot;red&quot;&gt;&amp;quot;\&amp;quot;);
  9557.                                        return _sourceMixin.&amp;quot;&lt;/font&gt; ~ memberName ~ &lt;font color=&quot;red&quot;&gt;&amp;quot;(args);
  9558.                                }&amp;quot;&lt;/font&gt;;
  9559.  
  9560.                        }
  9561.                }
  9562.  
  9563.                &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; code;
  9564.        }
  9565. }
  9566.  
  9567. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; ProcessLogging!SourceImpl;
  9568.  
  9569. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  9570.        logMe();
  9571.        foo();
  9572.        &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.stdio;
  9573.        writeln(a);
  9574. }
  9575. &lt;/pre&gt;
  9576.  
  9577. &lt;p&gt;The implementation of &lt;tt&gt;SourceImpl&lt;/tt&gt; is fairly straightforward: it is just the ordinary declarations we would write anyway. &lt;tt&gt;mixin ProcessLogging!SourceImpl&lt;/tt&gt; will do the transformations of it. The part that needs more explanation is the &lt;tt&gt;ProcessLogging&lt;/tt&gt; function itself.&lt;/p&gt;
  9578.  
  9579. &lt;p&gt;The first interesting piece is the &lt;tt&gt;mixin Source _sourceMixin;&lt;/tt&gt; line. This starts things off by bringing in the original declarations as-is. This means anything in there that will not be instrumented will be made automatically available - no additional wrapping code needs to be written or generated. You'd want to do something similar to this inside each scope that needs transformation: do it at the top-level of a module or inside structs and classes that need changing too.&lt;/p&gt;
  9580.  
  9581. &lt;p&gt;The advantage of using a &lt;tt&gt;mixin template&lt;/tt&gt; for this is that all types of things will be automatically working out of the box - you don't need to write forwarding code for the various types of declarations yourself. The other advantage is they can be overridden by name, which we do next.&lt;/p&gt;
  9582.  
  9583. &lt;p&gt;The &lt;tt&gt;_implementationStringMixin&lt;/tt&gt; function generates the instrumented functions. (A more complex implementation could also handle more than just functions too.) For an explanation of why I used static imported traits inside the strings instead of &lt;tt&gt;.stringof&lt;/tt&gt;, see &lt;a href=&quot;http://arsdnet.net/this-week-in-d/sep-20.html&quot;&gt;last week' tip&lt;/a&gt;.&lt;/p&gt;
  9584.  
  9585. &lt;p&gt;This function goes down the list of members with &lt;tt&gt;__traits(allMembers)&lt;/tt&gt;, checking for the attribute we're interested in with &lt;tt&gt;std.traits.hasUDA&lt;/tt&gt;. If it is there, it generates a code string for a wrapper function - using the reflection traits in the string itself to forward values (BTW it should also probably forward various qualifiers like &lt;tt&gt;pure&lt;/tt&gt; and &lt;tt&gt;@safe&lt;/tt&gt; in a complete implementation - there are traits available for this too, though it can be a little tedious to write. Alternatively, it could generate templates that infer those annotations automatically) and inject the modified code.&lt;/p&gt;
  9586.  
  9587. &lt;p&gt;Then, it uses the named mixin to call the originally written function in the &lt;tt&gt;return _sourceMixin.&amp;quot; ~ memberName ~ &amp;quot;(args);&lt;/tt&gt; portion.&lt;/p&gt;
  9588.  
  9589. &lt;p&gt;Since template mixins allow you to override a symbol by name while still referring to the old version with the namespaced symbol, this means we will transform just the functions we want to transform while letting the compiler forward the others.&lt;/p&gt;
  9590.  
  9591. &lt;div class=&quot;tip&quot;&gt;If you wanted to transform some functions in an overload set but not all, you could use &lt;tt&gt;alias&lt;/tt&gt; to bring in the rest of the names from the named mixin.&lt;/div&gt;
  9592.  
  9593. &lt;hr /&gt;
  9594.  
  9595. &lt;p&gt;There's various other ways to implement function transforming in D. Another I like is to have a private implementation module and a public interface module containing the generated code. But this technique here brings together a couple nice features - mixin templates and UDAs - in a way that I think highlights benefits of both well.&lt;/p&gt;
  9596.  
  9597. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9598. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9599. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9600. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9601. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9602. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9603. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9604. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9605. &lt;/li&gt;&lt;/ul&gt;
  9606.  
  9607.  
  9608. &lt;/div&gt;
  9609. </description></item><item><title>Issue #36</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/sep-20.html</link><guid>http://arsdnet.net/this-week-in-d/sep-20.html</guid><pubDate>Sun, 20 Sep 2015 12:00:00 GMT</pubDate><description>
  9610. &lt;div id=&quot;body-container&quot;&gt;
  9611. &lt;h1&gt;
  9612. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9613. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9614. &lt;span id=&quot;title-date&quot;&gt;September 20, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9615.  
  9616.  
  9617. &lt;div id=&quot;preface&quot;&gt;
  9618.  
  9619. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9620.  
  9621. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9622.  
  9623. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9624.  
  9625. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9626.  
  9627. &lt;/div&gt;
  9628.  
  9629. &lt;h2&gt;Statistics&lt;/h2&gt;
  9630.  
  9631. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-09-14&amp;amp;chfieldto=2015-09-20&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;11 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9632. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-09-14&amp;amp;chfieldto=2015-09-20&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;27 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9633. 39 pull requests merged into the language:
  9634.  
  9635. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-14..2015-09-20&quot;&gt;28 into DMD&lt;/a&gt;,
  9636. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-14..2015-09-20&quot;&gt;9 into Phobos&lt;/a&gt;, and
  9637. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-14..2015-09-20&quot;&gt;2 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9638. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-14..2015-09-20&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  9639. &lt;/li&gt;&lt;/ul&gt;
  9640.  
  9641. &lt;h2&gt;Major Changes&lt;/h2&gt;
  9642.  
  9643. &lt;p&gt;A long-requested feature got implemented when a &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1354&quot;&gt;patch was merged&lt;/a&gt; this week adding file names and line numbers to backtraces printed by D programs on Linux with debug mode enabled. Previously, only addresses were given (which you could convert manually to file and line numbers using the &lt;tt&gt;addr2line&lt;/tt&gt; utility that comes with the C tools).&lt;/p&gt;
  9644.  
  9645. &lt;p&gt;You will have to compile with the &lt;tt&gt;-g&lt;/tt&gt; option to enable this information.&lt;/p&gt;
  9646.  
  9647. &lt;h2&gt;New Compiler Beta Releases&lt;/h2&gt;
  9648.  
  9649. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mt7cr6$hhv$1@digitalmars.com&quot;&gt;Beta D 2.068.2-b2&lt;/a&gt; and &lt;a href=&quot;http://forum.dlang.org/thread/bpnmmbjkhinyqcunstpf@forum.dlang.org&quot;&gt;LDC 0.16.0 alpha4&lt;/a&gt; are  out and need your feedback! Give them a try and file bugs if you find any to help make more stable releases.&lt;/p&gt;
  9650.  
  9651. &lt;h2&gt;In the community&lt;/h2&gt;
  9652.  
  9653. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9654.  
  9655. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mtmd67$1uja$1@digitalmars.com&quot;&gt;vibe.d 0.7.25 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mtn1rd$2fa5$1@digitalmars.com&quot;&gt;DUB 0.9.24 release - adds SDLang package format option and ARM build&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qmvbsjnpitsbkixqigkf@forum.dlang.org&quot;&gt;Berlin D Meetup September 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mt904a$26c3$1@digitalmars.com&quot;&gt;French translation of Ali &amp;#199;ehreli's &amp;quot;Programming in D&amp;quot; book : 53 chapter translated&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/zrguosahjpftxebaqtxp@forum.dlang.org&quot;&gt;reggae v0.5.0: new features in the D meta-build system&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mtccfb$2796$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup September 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pdyjjatncsznjzfzyfug@forum.dlang.org&quot;&gt;LDC 0.16.0 alpha3 is out! Get it, test it, give feedback!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/anylyjnrfnfsyshfxyeo@forum.dlang.org&quot;&gt;dfmt 0.4.0 - a formatter for D source code&lt;/a&gt;
  9656. &lt;/li&gt;&lt;/ul&gt;
  9657.  
  9658. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9659.  
  9660. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9661.  
  9662. &lt;p&gt;This week, I want to highlight a tip I wrote about string mixins over on &lt;a href=&quot;http://stackoverflow.com/a/32621854/1457000&quot;&gt;Stack Overflow&lt;/a&gt;. The short of it is &lt;b&gt;always use local names in string mixins&lt;/b&gt;, avoiding the use of things like &lt;tt&gt;T.stringof&lt;/tt&gt;.&lt;/p&gt;
  9663.  
  9664. &lt;p&gt;Please see the link for a detailed explanation and example. Also notice the example of an iffy error message in there. A common complaint about D this week has been error messages. I agree a lot of them could use work... but in the mean time, knowing them will help you make quick understanding of them.&lt;/p&gt;
  9665.  
  9666. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9667. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9668. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9669. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9670. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9671. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9672. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9673. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9674. &lt;/li&gt;&lt;/ul&gt;
  9675.  
  9676.  
  9677. &lt;/div&gt;
  9678. </description></item><item><title>Issue #35</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/sep-13.html</link><guid>http://arsdnet.net/this-week-in-d/sep-13.html</guid><pubDate>Sun, 13 Sep 2015 12:00:00 GMT</pubDate><description>
  9679. &lt;div id=&quot;body-container&quot;&gt;
  9680. &lt;h1&gt;
  9681. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9682. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9683. &lt;span id=&quot;title-date&quot;&gt;September 13, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9684.  
  9685.  
  9686. &lt;div id=&quot;preface&quot;&gt;
  9687.  
  9688. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9689.  
  9690. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9691.  
  9692. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9693.  
  9694. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9695.  
  9696. &lt;/div&gt;
  9697.  
  9698. &lt;h2&gt;Statistics&lt;/h2&gt;
  9699.  
  9700. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-09-07&amp;amp;chfieldto=2015-09-13&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;19 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9701. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-09-07&amp;amp;chfieldto=2015-09-13&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;22 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9702. 51 pull requests merged into the language:
  9703.  
  9704. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-07..2015-09-13&quot;&gt;30 into DMD&lt;/a&gt;,
  9705. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-07..2015-09-13&quot;&gt;18 into Phobos&lt;/a&gt;, and
  9706. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-07..2015-09-13&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9707. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-09-07..2015-09-13&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  9708. &lt;/li&gt;&lt;/ul&gt;
  9709.  
  9710. &lt;h2&gt;In the community&lt;/h2&gt;
  9711.  
  9712. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9713.  
  9714. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/msqtvn$1e5a$1@digitalmars.com&quot;&gt;Beta D 2.068.2-b1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mt482s$vqp$1@digitalmars.com&quot;&gt;DVM - D Version Manager 0.4.4&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hloitwqnisvtgfougncf@forum.dlang.org&quot;&gt;Enumap -- a lightweight AA alternative when your keys are enums&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tekjnfyvvmrozmqixtro@forum.dlang.org&quot;&gt;std.experimental.testing formal review&lt;/a&gt;
  9715. &lt;/li&gt;&lt;/ul&gt;
  9716.  
  9717. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9718.  
  9719. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  9720.  
  9721. &lt;p&gt;If you work with a large project in D, it is possible that you will be forced to face the reality that dmd has a number of bugs. Each week, we see several bugs, usually minor but sometimes major, get fixed, but in the mean time, you don't want these bugs to interrupt your development.&lt;/p&gt;
  9722.  
  9723. &lt;p&gt;As such, it is helpful to be familiar with some of the harder-to-fix bugs and techniques to work around them with minimal disruption wherever possible.&lt;/p&gt;
  9724.  
  9725. &lt;p&gt;Today, we will see an example of a rare bug in dmd that is difficult to fix. It has been in dmd for many years and may remain in dmd for years to come, but thankfully, it is very easy to work around: it sometimes doesn't add necessary &lt;tt&gt;TypeInfo&lt;/tt&gt; data into an object file, causing a linker error.&lt;/p&gt;
  9726.  
  9727. &lt;p&gt;The workaround is simple: manually add a reference for it by making a function that returns &lt;tt&gt;typeid(the_given_Type).toString()&lt;/tt&gt;. You never need to call this function; simply writing it will cause the compiler to add the missing data to the object file and fix the bug.&lt;/p&gt;
  9728.  
  9729. &lt;div class=&quot;tip&quot;&gt;If you've ever studied the code to my cgi.d, you may have noticed this function: &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/cgi.d#L3014&quot;&gt;hackAroundLinkerError in cgi.d&lt;/a&gt;. Now you know why it is there!&lt;/div&gt;
  9730.  
  9731. &lt;p&gt;Andy Smith came across the missing TypeInfo bug and after I helped him quickly fix it, he wrote an excellent example and description of it on GitHub.&lt;/p&gt;
  9732.  
  9733. &lt;p&gt;Please see his example here now: &lt;a href=&quot;https://github.com/smandy/dmdLinkerProb&quot;&gt;https://github.com/smandy/dmdLinkerProb&lt;/a&gt; and familiarize yourself with the details, so if it happens to you, it will need to only take minutes out of your day instead of stopping you in your tracks.&lt;/p&gt;
  9734.  
  9735. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  9736. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  9737. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9738. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9739. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  9740. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  9741. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9742. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  9743. &lt;/li&gt;&lt;/ul&gt;
  9744.  
  9745.  
  9746. &lt;/div&gt;
  9747. </description></item><item><title>Issue #34</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/sep-06.html</link><guid>http://arsdnet.net/this-week-in-d/sep-06.html</guid><pubDate>Sun, 06 Sep 2015 12:00:00 GMT</pubDate><description>
  9748. &lt;div id=&quot;body-container&quot;&gt;
  9749. &lt;h1&gt;
  9750. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  9751. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  9752. &lt;span id=&quot;title-date&quot;&gt;September 6, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  9753.  
  9754.  
  9755. &lt;div id=&quot;preface&quot;&gt;
  9756.  
  9757. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  9758.  
  9759. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  9760.  
  9761. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  9762.  
  9763. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  9764.  
  9765. &lt;/div&gt;
  9766.  
  9767. &lt;h2&gt;Statistics&lt;/h2&gt;
  9768.  
  9769. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-08-31&amp;amp;chfieldto=2015-09-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;42 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9770. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-08-31&amp;amp;chfieldto=2015-09-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;27 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  9771. 71 pull requests merged into the language:
  9772.  
  9773. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-31..2015-09-06&quot;&gt;37 into DMD&lt;/a&gt;,
  9774. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-31..2015-09-06&quot;&gt;22 into Phobos&lt;/a&gt;, and
  9775. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-31..2015-09-06&quot;&gt;12 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  9776. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-31..2015-09-06&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  9777. &lt;/li&gt;&lt;/ul&gt;
  9778.  
  9779. &lt;h2&gt;New Releases&lt;/h2&gt;
  9780.  
  9781. &lt;h3&gt;LDC&lt;/h3&gt;
  9782.  
  9783. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/fweeavkiiwhxevbrizdl@forum.dlang.org&quot;&gt;LDC 0.16.0 alpha2 is out&lt;/a&gt;!&lt;/p&gt;
  9784.  
  9785. &lt;p&gt;This release brings the 2.067.1 frontend, to ldc and supports LLVM 3.1-3.7 for well-optimized generated code.&lt;/p&gt;
  9786.  
  9787. &lt;h3&gt;DMD&lt;/h3&gt;
  9788.  
  9789. &lt;p&gt;After a &lt;a href=&quot;http://forum.dlang.org/thread/ms0ql0$1v7o$1@digitalmars.com&quot;&gt;quick beta&lt;/a&gt;, &lt;a href=&quot;http://forum.dlang.org/thread/msieum$19p$1@digitalmars.com&quot;&gt;Release D 2.068.1 is ready&lt;/a&gt;!&lt;/p&gt;
  9790.  
  9791. &lt;p&gt;This release brings no new features, just several bug fixes from the 2.068 release.&lt;/p&gt;
  9792.  
  9793. &lt;h2&gt;In the community&lt;/h2&gt;
  9794.  
  9795. &lt;h3&gt;Community announcements&lt;/h3&gt;
  9796.  
  9797. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vawtekdubdcvafargwkn@forum.dlang.org&quot;&gt;Article: More hidden treasure in the D standard library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/awdcgerpelrgmuoyvzbn@forum.dlang.org&quot;&gt;Dynamic arrays - tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pculdgcninwlimizckeq@forum.dlang.org&quot;&gt;v0.2.1 of EMSI's containers library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lvjwcklzhpawfyhmppih@forum.dlang.org&quot;&gt;DCD 0.7.0 - Completion daemon for text editors and IDEs&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xiimzrescqvrmjswmdcd@forum.dlang.org&quot;&gt;LLVM 3.7 released - LDC is ready to use it!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bgtoroghgclvppytftdj@forum.dlang.org&quot;&gt;1st Ever Artificial Consciousness to be Written in D Language&lt;/a&gt;
  9798. &lt;/li&gt;&lt;/ul&gt;
  9799.  
  9800. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  9801.  
  9802.  
  9803. &lt;h2&gt;Community interview&lt;/h2&gt;
  9804.  
  9805. &lt;p&gt;This week we have an interview of &lt;b&gt;Atila Neves&lt;/b&gt;, again courtesy of Joakim. Huge thanks to both of them! Their interview follows:&lt;/p&gt;
  9806.  
  9807. &lt;p&gt;Atila Neves is a regular contributor to &lt;a href=&quot;
  9808. http://code.dlang.org&quot;&gt;dub&lt;/a&gt;, the D repository for third-party tools and
  9809. libraries.  He has written &lt;a href=&quot;
  9810. http://code.dlang.org/packages/reggae&quot;&gt;reggae, a meta-build system&lt;/a&gt;;
  9811. &lt;a href=&quot;http://code.dlang.org/packages/cerealed&quot;&gt;cerealed, a binary
  9812. serialisation library&lt;/a&gt;; and &lt;a href=&quot;
  9813. http://code.dlang.org/packages/unit-threaded&quot;&gt;unit-threaded, a
  9814. multi-threaded unit-testing framework&lt;/a&gt; which is being considered for
  9815. std.experimental in the D standard library, phobos.&lt;/p&gt;
  9816.  
  9817. &lt;p&gt;&lt;b&gt;Q: &lt;a href=&quot;
  9818. https://atilanevesoncode.wordpress.com/2014/10/16/computer-languages-ordering-my-favourites/&quot;&gt;
  9819. You've used a fair amount of programming languages&lt;/a&gt;, what stands out for
  9820. you when writing D?&lt;/b&gt;&lt;/p&gt;
  9821.  
  9822. &lt;p&gt;A: Very little boilerplate needed. And in the rare cases where there
  9823. is any, I can make the compiler write the code for me. There's nothing I
  9824. hate more in programming that repeating myself. Otherwise, D is very
  9825. close to being the language I'd come up with if I invented my own. In
  9826. fact, with a default of &lt;tt&gt;@safe @nothrow pure&lt;/tt&gt; for functions and
  9827. &lt;tt&gt;immutable&lt;/tt&gt; for variables it'd be 99.9% there.&lt;/p&gt;
  9828.  
  9829. &lt;p&gt;It's the little things, like the fact that defining &lt;tt&gt;opCmp&lt;/tt&gt; just
  9830. does what you expect it to. &lt;tt&gt;inout&lt;/tt&gt; means not having two versions of
  9831. functions, like what's required in C++. No header files as well, of
  9832. course, but every language with modules has that.&lt;/p&gt;
  9833.  
  9834. &lt;p&gt;And ultimately, my big D hammer: compile-time reflection.  Examples
  9835. of compile-time reflection usage are in all of my first D projects,
  9836. unit-threaded, cerealed and unencumbered. UDAs particularly make
  9837. customizing extremely easy.&lt;/p&gt;
  9838.  
  9839. &lt;p&gt;&lt;b&gt;Q: What's the status of reggae and where do you want to take it?
  9840.  Any plans to add features similar to ccache or distcc, ie caching or
  9841. distributed builds?&lt;/b&gt;&lt;/p&gt;
  9842.  
  9843. &lt;p&gt;A: The status is that I think it's ready to be used, but I'd expect
  9844. a bug here or there. The only way they'll be weeded out is by being used
  9845. on real-life builds. Distributed/cached builds are a great idea, but
  9846. there's a lot more that I want to do first.&lt;/p&gt;
  9847.  
  9848. &lt;p&gt;My two priorities at the moment are to write a Makefile to reggae
  9849. converter to make it easy to migrate, and to enable build descriptions
  9850. to be written in scripting languages. The reason for the latter is that
  9851. there are many build system options out there, and each of them seems to
  9852. cater to a niche of developers. Rubyists use Rake, Haskellers Shake,
  9853. Pythonistas Waf or SCons, and so forth. I want reggae to conquer the
  9854. world, so I want to make it possible to write build descriptions in
  9855. Python, Ruby, Lua, Perl, Emacs Lisp even!&lt;/p&gt;
  9856.  
  9857. &lt;p&gt;Another thing is to work on a killer feature: the fact that reggae
  9858. can output a binary backend. Theoretically, this could be similar to
  9859. &amp;quot;only D can do this&amp;quot; compile-time regular expressions: a custom-built
  9860. binary executable that knows everything about your build and therefore
  9861. is as fast as it gets. Every time I think there's not much else to
  9862. implement, I think of another important feature. Replacing CMake is a
  9863. tall order.&lt;/p&gt;
  9864.  
  9865. &lt;p&gt;&lt;b&gt;Q: How do you plan on implementing those two priority features
  9866. for reggae?&lt;/b&gt;&lt;/p&gt;
  9867.  
  9868. &lt;p&gt;A: One of them is done: it's possible to write build descriptions in
  9869. Python right now. I put the work in to define a generic interface that
  9870. any language could use and started with Python. It should be easy to add
  9871. any other scripting language now.&lt;/p&gt;
  9872.  
  9873. &lt;p&gt;As for converting makefiles, the goal there would be the current D
  9874. makefiles for phobos, druntime and dmd. I found a Python library for
  9875. parsing makefiles, I intend to use it to transform the Makefile AST into
  9876. a reggae description.&lt;/p&gt;
  9877.  
  9878. &lt;p&gt;&lt;b&gt;Q: Have you thought about automating build configuration,
  9879. &lt;a href=&quot;https://github.com/sandstorm-io/ekam&quot;&gt;like ekam&lt;/a&gt;?  I think
  9880. that's the future, with some manual nudges from the dev.&lt;/b&gt;&lt;/p&gt;
  9881.  
  9882. &lt;p&gt;A: I've seen it before, but from experience I'm sceptical that it
  9883. can do all the weird things I've had to specify before in C and C++
  9884. builds. Such an approach would be a lot more likely to work for D I
  9885. think, where tests are found easily since they're part of the language.&lt;/p&gt;
  9886.  
  9887. &lt;p&gt;Having said that, reggae is a fair bit of the way there already: dub
  9888. configurations are built by specifying them, dub files themselves are
  9889. mostly fire-and-forget, and the high level rules for C and C++ mostly
  9890. work by telling them directories, not individual source files. What Ekam
  9891. can figure out for the main binary would be:&lt;/p&gt;
  9892.  
  9893. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; reggae;
  9894. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; objs = objectFiles(Source!([&lt;font color=&quot;red&quot;&gt;&amp;quot;.&amp;quot;&lt;/font&gt;]));
  9895. &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; app = link!(ExeName(&lt;font color=&quot;red&quot;&gt;&amp;quot;app&amp;quot;&lt;/font&gt;), objs);
  9896. &lt;font color=&quot;blue&quot;&gt;mixin&lt;/font&gt; build!app;
  9897. &lt;/pre&gt;
  9898.  
  9899. &lt;p&gt;Which I don't think is all that much work. You'd still have to add
  9900. -I flags where appropriate. The other thing that comes to mind with
  9901. Ekam's approach (tried to find this, tries to find that) is speed. The
  9902. reason I discovered Ninja was because I was fed up with no-op builds
  9903. taking 8s on a 200k C++ codebase. I can only imagine what looking for
  9904. files and what to link would be like on a multi-million SLOC build.&lt;/p&gt;
  9905.  
  9906. &lt;p&gt;&lt;b&gt;Q: Why cerealed?  &lt;a href=&quot;
  9907. https://github.com/jacob-carlborg/orange&quot;&gt;Orange&lt;/a&gt; already exists, why
  9908. write another serialization library?&lt;/b&gt;&lt;/p&gt;
  9909.  
  9910. &lt;p&gt;A: I'm not sure I knew about the existence of Orange when I started
  9911. work on cerealed. Even if I did, I would've written it anyway, since one
  9912. of the goals was to understand how compile-time reflection could make
  9913. the task easier. Also, the two libraries focus on different things: at
  9914. least at the time I don't think Orange did binary serialisation, and
  9915. there was more boilerplate than I was comfortable with. That's what I
  9916. remember, anyway. Cerealed was built first and foremost to make
  9917. implementing network protocols easier. I think I've succeeded since I've
  9918. implemented quite a few now with it. I might extend it to handle JSON as
  9919. well, I've just not needed it. Or if I do, maybe I'll just use Orange.&lt;/p&gt;
  9920.  
  9921. &lt;p&gt;&lt;b&gt;Q: You wrote your own multi-threaded unit test framework,
  9922. unit-threaded, which you're now trying to get into phobos: how was the
  9923. experience of writing it?  Was it much work to integrate with the
  9924. built-in unit tests and extend them?&lt;/b&gt;&lt;/p&gt;
  9925.  
  9926. &lt;p&gt;A: It was my first D project and it was fun all the way. My brain
  9927. hurt a few times whilst I got to grip with what ran at compile-time and
  9928. what ran at run-time, but by the end I was a better programmer for it.
  9929. In the beginning, integrating the built-in unit tests was a bit
  9930. frustrating: the best you could do then was run all the unit tests in a
  9931. module as a single function. But since then &lt;tt&gt;__traits(getUnitTests)&lt;/tt&gt;
  9932. made it so easy as to make the use of test functions obsolete! I never
  9933. used test classes myself, so neither of those two are in the Phobos PR,
  9934. just regular built-in unittest blocks.&lt;/p&gt;
  9935.  
  9936. &lt;p&gt;&lt;b&gt;Q: Please tell us about yourself: who you are and where you're
  9937. from, what programming languages you used before D, and take us from
  9938. your experience first discovering and using D to writing your own D
  9939. libraries and tools.&lt;/b&gt;&lt;/p&gt;
  9940.  
  9941. &lt;p&gt;A: I was born in Brazil, spent the last third of my childhood in the
  9942. UK, and have a Portuguese passport as well on account of having lived
  9943. there for 10 years, but now I live in Switzerland. I have a PhD in
  9944. Particle Physics but always enjoyed programming more and didn't know
  9945. which of the subjects to pick when I went to university. In the end I
  9946. picked Physics, thinking that I could always learn programming by myself
  9947. if that's what I wanted to do. I was right.&lt;/p&gt;
  9948.  
  9949. &lt;p&gt;Before I chanced upon D, I learned these languages in chronological
  9950. order: Basic (the ZX Spectrum dialect), Pascal, C, Common Lisp, Java,
  9951. C++,  Perl, Ruby, Python. And after D, Haskell.&lt;/p&gt;
  9952.  
  9953. &lt;p&gt;I heard about D in 2007 or 2008, but back then there was the whole
  9954. Tango vs Phobos debate and I decided to come back after it was resolved.
  9955. I watched nearly all of the DConf2013 videos when they went online and
  9956. coincidentally mentioned D to a colleague who had a copy of TDPL and
  9957. asked if I wanted to borrow it. I said yes, read it from cover to cover
  9958. on a Sunday afternoon and was instantly hooked. This also happened to be
  9959. around the time I got disillusioned with C++11, so it all came together
  9960. to conspire into making me a D programmer.&lt;/p&gt;
  9961.  
  9962. &lt;p&gt;I started writing D to explore its compile-time reflection
  9963. capabilities. I'd heard about it from the DConf 2013 videos and didn't
  9964. really know what it meant, so I tried doing something useful that
  9965. required it. As it just so happened, I'd recently written two libraries
  9966. in C++11 that would benefit from said capabilities and wondered how much
  9967. easier they would be to write in D. A lot, as it turns out. They became
  9968. unit-threaded and cerealed. After that, a colleague who's a Go fan
  9969. issued a lunch-time challenge and that became my D implementation of an
  9970. MQTT broker. These first experiences were all great and that's what led
  9971. me on the path I am today.&lt;/p&gt;
  9972.  
  9973. &lt;p&gt;&lt;b&gt;Q: Do you use any D code at work?  What do you do for a living?&lt;/b&gt;&lt;/p&gt;
  9974.  
  9975. &lt;p&gt;A: I've written a few tools in D. Lately I even got to rewrite some
  9976. work features from scratch in D and who knows, that might even get
  9977. released to customers. Right now I work for Cisco, taking care of a
  9978. legacy C codebase written by another team that does network performance
  9979. monitoring.&lt;/p&gt;
  9980.  
  9981. &lt;p&gt;&lt;b&gt;Q: Can you talk about some concrete features or benefits of D
  9982. you've run across when writing one of your D libraries/tools?&lt;/b&gt;&lt;/p&gt;
  9983.  
  9984. &lt;p&gt;A: The main feature I've mentioned before: never having to repeat
  9985. myself. I try to only use mixins when I have to, but when I do the
  9986. overall complexity goes down globally. The other main benefit is to make
  9987. template code so easy that it's natural to use it. To give an example,
  9988. the C++ version of cerealed used traditional OOP dynamic dispatch and so
  9989. that's how the D version was born. Later on I realised that the
  9990. direction the (de)serialisation is happening in is never a run-time
  9991. decision; this is always known at compile-time. So why use dynamic
  9992. dispatch? I switched everything over to static dispatch with generic
  9993. code (and, I learned later on, design by introspection) and it got a lot
  9994. faster. I _could_ have written it similarly in C++, but I didn't because
  9995. it never occurred to me. And it never occurred to me because C++
  9996. templates are painful.&lt;/p&gt;
  9997.  
  9998. &lt;p&gt;Then there are the little things: final switch, not having to write
  9999. code to print out your structs and enums, getopt.&lt;/p&gt;
  10000.  
  10001. &lt;p&gt;&lt;b&gt;Q: What problems with the language or stdlib have you run into?&lt;/b&gt;&lt;/p&gt;
  10002.  
  10003. &lt;p&gt;A: The good thing about D and stdlib problems is you can always
  10004. submit a PR to fix them! I think the only things I had to write myself
  10005. was a parallel filter and a parallel map that used closures instead of
  10006. regular functions. My main problem is attributes. I try to make
  10007. everything &lt;tt&gt;@safe pure @nothrow&lt;/tt&gt;, but then I call a Phobos function and
  10008. it all has to change. To make matters worse, I don't think I've caught a
  10009. bug so far because of them, and they're so much work. Weeks ago I tried
  10010. using &lt;tt&gt;Algebraic&lt;/tt&gt; and immediately gave up since all of a sudden
  10011. everything became &lt;tt&gt;@system&lt;/tt&gt;. I don't think I'm still 100% on when and
  10012. how to use &lt;tt&gt;@trusted&lt;/tt&gt; either.&lt;/p&gt;
  10013.  
  10014. &lt;p&gt;The other thing that usually gets to me is how many times I have to
  10015. use &lt;tt&gt;auto&lt;/tt&gt; when I want to make everything immutable. I don't like
  10016. mutable state and want the bare minimum possible in my programs.
  10017. Sometimes D (or a library type) makes me use mutable state. I always
  10018. feel dirty.&lt;/p&gt;
  10019.  
  10020. &lt;p&gt;&lt;b&gt;Q: What do you love about D?  Hate?&lt;/b&gt;&lt;/p&gt;
  10021.  
  10022. &lt;p&gt;A: Love? The philosophy behind the language and its design
  10023. decisions, what's considered a good idea by the D creators is usually in
  10024. line with my opinions and preferences.  An example would be that users
  10025. should be able to do as the language designers, and that none of the
  10026. types in the library are &amp;quot;magical&amp;quot; - you can make one too! That's the
  10027. kind of thing that turned me away from Go, for instance.&lt;/p&gt;
  10028.  
  10029. &lt;p&gt;D's philosophy gels with my number one pet peeve in programming:
  10030. repeating myself. I never have to do that in D. The community, the
  10031. ability to participate and shape the course of the language and standard
  10032. library. How productive I am with it. Hate? Nothing.&lt;/p&gt;
  10033.  
  10034.  
  10035. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10036. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10037. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10038. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10039. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10040. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10041. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10042. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10043. &lt;/li&gt;&lt;/ul&gt;
  10044.  
  10045.  
  10046. &lt;/div&gt;
  10047. </description></item><item><title>Issue #33</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/aug-30.html</link><guid>http://arsdnet.net/this-week-in-d/aug-30.html</guid><pubDate>Sun, 30 Aug 2015 12:00:00 GMT</pubDate><description>
  10048. &lt;div id=&quot;body-container&quot;&gt;
  10049. &lt;h1&gt;
  10050. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10051. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10052. &lt;span id=&quot;title-date&quot;&gt;August 30, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10053.  
  10054.  
  10055. &lt;div id=&quot;preface&quot;&gt;
  10056.  
  10057. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10058.  
  10059. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10060.  
  10061. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10062.  
  10063. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10064.  
  10065. &lt;/div&gt;
  10066.  
  10067. &lt;h2&gt;Statistics&lt;/h2&gt;
  10068.  
  10069. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-08-24&amp;amp;chfieldto=2015-08-30&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;28 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10070. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-08-24&amp;amp;chfieldto=2015-08-30&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;29 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10071. 85 pull requests merged into the language:
  10072.  
  10073. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-24..2015-08-30&quot;&gt;55 into DMD&lt;/a&gt;,
  10074. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-24..2015-08-30&quot;&gt;18 into Phobos&lt;/a&gt;, and
  10075. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-24..2015-08-30&quot;&gt;12 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10076. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-24..2015-08-30&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  10077. &lt;/li&gt;&lt;/ul&gt;
  10078.  
  10079. &lt;h2&gt;Major Changes&lt;/h2&gt;
  10080.  
  10081. &lt;p&gt;The move to D for dmd itself led to a flurry of pull requests. Now that the basic port is complete, the developers are looking at cleaning it up and working on performance, and fixing a few regressions, including some performance issues.&lt;/p&gt;
  10082.  
  10083. &lt;h2&gt;In the community&lt;/h2&gt;
  10084.  
  10085. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10086.  
  10087. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xntyzvbixhdqoutkgofo@forum.dlang.org&quot;&gt;Blog post : OOP composition with mixins&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mrqglh$2drv$1@digitalmars.com&quot;&gt;Programming in D \u2013 Tutorial and Reference&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ammjtgzznpegpnuivjhj@forum.dlang.org&quot;&gt;dfmt 0.4.0-rc1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hgawkhhbvkkxbnjziieu@forum.dlang.org&quot;&gt;associative arrays with manual memory management&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xytvoedvtdoiexissdik@forum.dlang.org&quot;&gt;D jwtd library propagated on jwt.io&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/haatuiyrtrhloyencdvw@forum.dlang.org&quot;&gt;Coedit 1 - update 2&lt;/a&gt;
  10088. &lt;/li&gt;&lt;/ul&gt;
  10089.  
  10090. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10091.  
  10092. &lt;h3&gt;Significant Forum Threads&lt;/h3&gt;
  10093.  
  10094. &lt;p&gt;By far, the biggest news this week was Andrei Alexandrescu announcing that he was &lt;a href=&quot;http://forum.dlang.org/thread/xsqrdgwnzehdmfmvcznn@forum.dlang.org&quot;&gt;Moving forward with work on the D language and foundation&lt;/a&gt; - by quitting his day job at Facebook in order to work on D full time.&lt;/p&gt;
  10095.  
  10096. &lt;p&gt;This was on &lt;a href=&quot;https://www.reddit.com/r/programming/comments/3ioy9b/andrei_alexandrescu_c_guru_leaves_facebook_to/&quot;&gt;front page of Reddit&lt;/a&gt; for days, getting almost 1,900 points, over 500 comments, and an overwhelming positive response.&lt;/p&gt;
  10097.  
  10098. &lt;p&gt;This editor also heard people in-person talking about the news, people who don't typically follow D stories (but when they do hear them, they do often ask me about them since they know I'm involved in the community). The Reddit stats plus the personal anecdotes made this news appear to be one of the biggest publicity events for D in at least a year.&lt;/p&gt;
  10099.  
  10100. &lt;p&gt;Andrei's plans with the time are to finish the legal process of forming a not-for-profit D foundation, to write lots of code and documentation (possibly including a second edition of his &amp;quot;The D Programming Language&amp;quot; book), and to work on raising money for the foundation, starting with donating his own book proceeds to it.&lt;/p&gt;
  10101.  
  10102. &lt;p&gt;He stated in the Reddit thread that his personal situation is secure. This should be a stable, long-term decision.&lt;/p&gt;
  10103.  
  10104. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10105. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10106. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10107. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10108. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10109. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10110. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10111. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10112. &lt;/li&gt;&lt;/ul&gt;
  10113.  
  10114.  
  10115. &lt;/div&gt;
  10116. </description></item><item><title>Issue #32</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/aug-23.html</link><guid>http://arsdnet.net/this-week-in-d/aug-23.html</guid><pubDate>Sun, 23 Aug 2015 12:00:00 GMT</pubDate><description>
  10117. &lt;div id=&quot;body-container&quot;&gt;
  10118. &lt;h1&gt;
  10119. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10120. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10121. &lt;span id=&quot;title-date&quot;&gt;August 23, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10122.  
  10123.  
  10124. &lt;div id=&quot;preface&quot;&gt;
  10125.  
  10126. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10127.  
  10128. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10129.  
  10130. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10131.  
  10132. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10133.  
  10134. &lt;/div&gt;
  10135.  
  10136. &lt;h2&gt;Statistics&lt;/h2&gt;
  10137.  
  10138. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-08-17&amp;amp;chfieldto=2015-08-23&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10139. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-08-17&amp;amp;chfieldto=2015-08-23&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10140. 53 pull requests merged into the language:
  10141.  
  10142. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-17..2015-08-23&quot;&gt;31 into DMD&lt;/a&gt;,
  10143. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-17..2015-08-23&quot;&gt;17 into Phobos&lt;/a&gt;, and
  10144. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-17..2015-08-23&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10145. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-17..2015-08-23&quot;&gt;8 pull requests merged into the website.&lt;/a&gt;
  10146. &lt;/li&gt;&lt;/ul&gt;
  10147.  
  10148. &lt;h2&gt;Major Changes&lt;/h2&gt;
  10149.  
  10150. &lt;p&gt;The switch to ddmd happened this week - the D compiler is now officially written in D! This was achieved through a semi-automated porting process described &lt;a href=&quot;http://dconf.org/2015/talks/murphy.html&quot;&gt;here&lt;/a&gt; over the course of a couple years.&lt;/p&gt;
  10151.  
  10152. &lt;p&gt;All open pull requests will need to be updated, but there is a process described in the talk in how to do that fairly painlessly.&lt;/p&gt;
  10153.  
  10154. &lt;p&gt;The result, so far, has been slightly slower compiles as the ported D needs a bit of optimization work and the release needs to be built with gdc or ldc for max performance, but all the tests pass and pull requests have already started to be merged that leverage D's advantages over C++ to make a simpler, faster, and more reliable codebase than the original.&lt;/p&gt;
  10155.  
  10156. &lt;p&gt;Building dmd now requires a bootstrap D compiler to already be installed on the system. You can do this by simply installing the previous pre-compiled version on your development computer.&lt;/p&gt;
  10157.  
  10158. &lt;h2&gt;In the community&lt;/h2&gt;
  10159.  
  10160. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10161.  
  10162. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mr0k9s$2mdv$1@digitalmars.com&quot;&gt;&amp;quot;Programming in D&amp;quot; paper book is available for purchase&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/post/mr01d6$275c$1@digitalmars.com&quot;&gt;Build It And They Will Not Come - Walter's argument for marketing&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vgtkpjfnbjmsbeaxhfny@forum.dlang.org&quot;&gt;DCD v0.7.0-rc1 - autocomplete tool for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mr2uoq$1un9$1@digitalmars.com&quot;&gt;scriptlike v0.9.3 - write D code like scripts&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lclmbkntktelzvxpmhrz@forum.dlang.org&quot;&gt;update to Dlang HDF5 format bindings/wrappers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/epapljzvsztcsgfqtpvf@forum.dlang.org&quot;&gt;DerelictSteamworks - Steam API from D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/euxiznukswgnpselleyi@forum.dlang.org&quot;&gt;perpetual: new module for mapping file into memory&lt;/a&gt;
  10163. &lt;/li&gt;&lt;/ul&gt;
  10164.  
  10165. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10166.  
  10167. &lt;h3&gt;Significant Forum Threads&lt;/h3&gt;
  10168.  
  10169. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mqv2ct$1cpp$1@digitalmars.com&quot;&gt;dmd codegen improvements&lt;/a&gt; has Walter asking for people to help him find low-hanging fruit in dmd's optimizer that he can quickly fix for big gains.&lt;/p&gt;
  10170.  
  10171. &lt;p&gt;This received some pushback, including the usual call for him to abandon dmd and instead focus purely on gdc or ldc, and a more interesting objection: codegen optimizations are rarely free from regressions.&lt;/p&gt;
  10172.  
  10173. &lt;p&gt;(the D parts of all three compilers - the front end - is 99% shared, and moving toward 100% shared - but the code generating backend is different for all three. dmd uses the dmc backend, which was primarily written in the 90's and has very fast compile times for non-optimized builds, but generates code that tends to be about 30% slower than gdc or ldc with optimizations enabled. dmd is also the reference compiler in great part because it is easier to hack on too, with a smaller codebase (which Walter understands deeply, having written almost all of it himself) and simpler build system. gdc uses the gcc backend and ldc uses the llvm backend, both of which optimize well but are more complicated than the dmc one.)&lt;/p&gt;
  10174.  
  10175. &lt;p&gt;Walter disagreed on the regression point, arguing the test suite catches them, but others pointed to the record of seemingly innocent codegen optimizations that passed the tests nevertheless introducing bugs in production, saying it just isn't worth the risk. If you want dmd's compile speed and hackability, use it, otherwise, we should just use gdc and ldc for optimized release builds.&lt;/p&gt;
  10176.  
  10177. &lt;p&gt;Different compilers has been problematic for companies in the past though, because bugs can manifest differently. If you use dmd for development and testing, then gdc for a final build, you might end up with a buggy final build. This editor is aware of at least one company now funding work on ldc to close that bug gap, and the open source community is slowly but surely working on getting more code shared among them to ensure gdc and ldc keep up with dmd in both features and bug fixes. IMO there's a lot of hope in this being successful.&lt;/p&gt;
  10178.  
  10179. &lt;p&gt;This thread led to a new &lt;a href=&quot;http://dlang.org/download.html&quot;&gt;choose your compiler page&lt;/a&gt; which briefly outlines the pros and cons of the three options as they stand now and a few new enhancement requests filed that may help dmd's performance, though the point about regression risk seems to stand as of this writing.&lt;/p&gt;
  10180.  
  10181. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mr6bl7$26f5$@digitalmars.com&quot;&gt;Object.factory() and exe file size bloat&lt;/a&gt; is another thread from Walter talking about optimizations. This time, it is about modifying the &lt;tt&gt;factory&lt;/tt&gt; function in the standard library to enable more dead code elimination by the linker. This got pushback from the users of that function, and led to some discussion about shared library symbol exporting.&lt;/p&gt;
  10182.  
  10183. &lt;p&gt;The basic problem is that since the factory function can construct any class given a runtime argument, it needs to reference the TypeInfo of ALL classes in the build, including libraries, regardless of whether or not they are used by the rest of the program. This, in turn, means all class methods are retained in the final binary, which means every function they call is also retained, and so on and so forth.&lt;/p&gt;
  10184.  
  10185. &lt;p&gt;The linker will remove unreferenced functions, trimming the generated binary size, but with this, there are fewer unreferenced functions available. Walter proposed making factory an opt-in system with the &lt;tt&gt;export&lt;/tt&gt; keyword instead of having it apply to everything. Then, systems with limited space can choose not to make class factory available and trim out a lot of code, including dependence on TypeInfo. This would be a win for embedded systems especially.&lt;/p&gt;
  10186.  
  10187. $(P The thread went in three main directions: that this silently breaks working code, that the &lt;tt&gt;export&lt;/tt&gt; is a mistake and should be redesigned, and that &lt;tt&gt;TypeInfo&lt;/tt&gt; is overused in the library in general, due to most the compiler/runtime glue predating templates in D (and secondarily, because templates might bloat the runtime, but the recently-added &lt;tt&gt;pragma(inline)&lt;/tt&gt; can help with that, as well as runtime performance.)
  10188.  
  10189. &lt;p&gt;The code breakage argument seems strong - if &lt;tt&gt;factory&lt;/tt&gt; is to change, it should instead be removed so at least it is a compile failure when you use it instead of a random runtime call returning null when before it worked perfectly. This killed Walter's original idea, but offers a way to mitigate the problems. A decision has not yet been made as to which route they will take.&lt;/p&gt;
  10190.  
  10191. &lt;p&gt;The &lt;tt&gt;export&lt;/tt&gt; argument is an old one from people working on DLL support. In D, &lt;tt&gt;export&lt;/tt&gt; is a protection level rather than an independent attribute. This means it is not possible to export private methods, which at first seems like an oxymoron, but is actually quite useful in having private helper functions in a DLL that are used by public template methods, which do not necessarily actually reside in the dll binary but still need access to that helper function.&lt;/p&gt;
  10192.  
  10193. &lt;p&gt;Moreover, &lt;tt&gt;export&lt;/tt&gt; is unimplemented on Linux. On that system, all symbols are exported regardless of their protection level (which is also the common case in C and C++ on Linux), which causes a problem of binary bloat and load time slowdowns - it is becoming increasingly common for compiler flags to change this behavior in C++, showing it is likely to be a problem in D too. The critics want to change the Linux behavior to match the Windows behavior for consistency and performance. This argument is strong, though library authors would need to learn to start using it after the change.&lt;/p&gt;
  10194.  
  10195. &lt;p&gt;While the experts who work in the area all agree these changes would be good, it is unclear as to if they will actually get the changes out of worries of code breakage and the question of who would actually implement it.&lt;/p&gt;
  10196.  
  10197. &lt;p&gt;The third significant thread this week was &lt;a href=&quot;http://forum.dlang.org/thread/htmkdnmlqyvkidkrsmri@forum.dlang.org&quot;&gt;string &amp;lt;-&amp;gt; null/bool implicit conversion&lt;/a&gt;, with someone question what is up with the truthiness of arrays.&lt;/p&gt;
  10198.  
  10199. &lt;p&gt;The way it works is fairly simple: it checks if the pointer is null. But, this can be surprising if you aren't used to it, since an empty array is not necessarily null: &lt;tt&gt;[] is null&lt;/tt&gt; passes, since the literal avoids allocating for nothing, but &lt;tt&gt;[1][1..$] is null&lt;/tt&gt; fails, despite the array being empty, because the pointer is then set to the end of the input array.&lt;/p&gt;
  10200.  
  10201. &lt;p&gt;Many people argue this distinction between empty and null is unnecessary and confusing, and the shortcut syntax of &lt;tt&gt;if(a)&lt;/tt&gt; resulting in the null check instead of an empty check makes the problem even worse. On the other hand, if you do understand the rule behind it, the current behavior does make sense and is sometimes useful.&lt;/p&gt;
  10202.  
  10203. &lt;div class=&quot;tip&quot;&gt;To avoid the whole problem, explicitly use &lt;tt&gt;if(a is null)&lt;/tt&gt; or &lt;tt&gt;if(a.length == 0)&lt;/tt&gt; to check for null and empty, respectively. This will always work consistently and show you wrote what you meant. You may also &lt;tt&gt;import std.array&lt;/tt&gt; if you would like to use &lt;tt&gt;if(a.empty())&lt;/tt&gt;.&lt;/div&gt;
  10204.  
  10205. &lt;p&gt;There was a compiler pull to make the implicitly conversion a warning or error that got temporarily added, but removed after pushback from a user of the feature who was annoyed that it broke a lot of his code for, in his eyes, little benefit. He wasn't against the change per se, he was willing to change his code to fit, but he was annoyed that people argued the change had zero cost when it obviously didn't. The final decision to revert the change, however, was Walter and Andrei, who want to avoid any such breaks. (Which, in the opinion of several forum goers, is too extreme for them and hurting forward progress.)&lt;/p&gt;
  10206.  
  10207. &lt;p&gt;Little is likely to change as a result of this thread, though it did get on Hacker News as an example of a &amp;quot;misfeature&amp;quot; in D. Regardless, though, it helps to understand the current behavior of the language.&lt;/p&gt;
  10208.  
  10209. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10210. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10211. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10212. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10213. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10214. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10215. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10216. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10217. &lt;/li&gt;&lt;/ul&gt;
  10218.  
  10219.  
  10220. &lt;/div&gt;
  10221. </description></item><item><title>Issue #31</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/aug-16.html</link><guid>http://arsdnet.net/this-week-in-d/aug-16.html</guid><pubDate>Sun, 16 Aug 2015 12:00:00 GMT</pubDate><description>
  10222. &lt;div id=&quot;body-container&quot;&gt;
  10223. &lt;h1&gt;
  10224. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10225. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10226. &lt;span id=&quot;title-date&quot;&gt;August 16, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10227.  
  10228.  
  10229. &lt;div id=&quot;preface&quot;&gt;
  10230.  
  10231. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10232.  
  10233. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10234.  
  10235. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10236.  
  10237. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10238.  
  10239. &lt;/div&gt;
  10240.  
  10241. &lt;h2&gt;Statistics&lt;/h2&gt;
  10242.  
  10243. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-08-10&amp;amp;chfieldto=2015-08-16&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10244. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-08-10&amp;amp;chfieldto=2015-08-16&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10245. 18 pull requests merged into the language:
  10246.  
  10247. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-10..2015-08-16&quot;&gt;20 into DMD&lt;/a&gt;,
  10248. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-10..2015-08-16&quot;&gt;14 into Phobos&lt;/a&gt;, and
  10249. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-10..2015-08-16&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10250. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-10..2015-08-16&quot;&gt;13 pull requests merged into the website.&lt;/a&gt;
  10251. &lt;/li&gt;&lt;/ul&gt;
  10252.  
  10253. &lt;h2&gt;D 2.068 Released&lt;/h2&gt;
  10254.  
  10255. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mq9ohk$1c1r$1@digitalmars.com&quot;&gt;D 2.068.0 was released&lt;/a&gt; last Monday.&lt;/p&gt;
  10256.  
  10257. &lt;p&gt;A notable change in packaging also occurred that missed the changelog - the .zip now only has the files for one particular OS; there are separate .zip files for each OS. The directory layout is unchanged though, so if you need multiple OS binaries, you can simply download both zips to the same place and unzip them on top of each other. Then, it will work the same way as the old ones.&lt;/p&gt;
  10258.  
  10259.  
  10260. &lt;h2&gt;In the community&lt;/h2&gt;
  10261.  
  10262. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10263.  
  10264. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hbosnareuokemkeifmua@forum.dlang.org&quot;&gt;xcb-d - First release&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ubjyhbnaszwdadggqiap@forum.dlang.org&quot;&gt;SciD has a new home&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/yyhouamplbewhpwfxfkq@forum.dlang.org&quot;&gt;0MQD messaging library v1.0 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/iabqilgyadxgnoobkirp@forum.dlang.org&quot;&gt;mime - library for parsing shared MIME database&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gbotwdmvsvqbcvtpfhne@forum.dlang.org&quot;&gt;Next London D Meetup: Wednesday 30th September&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ujpnaipcixdeiauskago@forum.dlang.org&quot;&gt;mood : simple vibe.d based blog implementation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/epmyfmzasvlgifnnrbjz@forum.dlang.org&quot;&gt;Berlin D Meetup August 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mqamus$25ui$1@digitalmars.com&quot;&gt;vibe.d 0.7.24 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mqd9t7$193r$1@digitalmars.com&quot;&gt;DDT 0.13.0 released - DUB configurations support.&lt;/a&gt;
  10265. &lt;/li&gt;&lt;/ul&gt;
  10266.  
  10267. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10268.  
  10269.  
  10270. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10271. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10272. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10273. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10274. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10275. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10276. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10277. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10278. &lt;/li&gt;&lt;/ul&gt;
  10279.  
  10280.  
  10281. &lt;/div&gt;
  10282. </description></item><item><title>Issue #30</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/aug-09.html</link><guid>http://arsdnet.net/this-week-in-d/aug-09.html</guid><pubDate>Sun, 09 Aug 2015 12:00:00 GMT</pubDate><description>
  10283. &lt;div id=&quot;body-container&quot;&gt;
  10284. &lt;h1&gt;
  10285. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10286. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10287. &lt;span id=&quot;title-date&quot;&gt;August 9, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10288.  
  10289.  
  10290. &lt;div id=&quot;preface&quot;&gt;
  10291.  
  10292. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10293.  
  10294. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10295.  
  10296. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10297.  
  10298. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10299.  
  10300. &lt;/div&gt;
  10301.  
  10302. &lt;h2&gt;Statistics&lt;/h2&gt;
  10303.  
  10304. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-08-03&amp;amp;chfieldto=2015-08-09&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;16 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10305. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-08-03&amp;amp;chfieldto=2015-08-09&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;22 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10306. 18 pull requests merged into the language:
  10307.  
  10308. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-03..2015-08-09&quot;&gt;6 into DMD&lt;/a&gt;,
  10309. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-03..2015-08-09&quot;&gt;9 into Phobos&lt;/a&gt;, and
  10310. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-03..2015-08-09&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10311. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-08-03..2015-08-09&quot;&gt;5 pull requests merged into the website.&lt;/a&gt;
  10312. &lt;/li&gt;&lt;/ul&gt;
  10313.  
  10314. &lt;h2&gt;Release Candidate for D 2.068&lt;/h2&gt;
  10315.  
  10316. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mprjic$1ra1$1@digitalmars.com&quot;&gt;the RC for D 2.068&lt;/a&gt; was released this week. The new release is right around the corner!&lt;/p&gt;
  10317.  
  10318. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  10319.  
  10320. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;jobs page is the D Wiki&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  10321.  
  10322. &lt;h2&gt;In the community&lt;/h2&gt;
  10323.  
  10324. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10325.  
  10326. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tbugssjmjkliynevgvwm@forum.dlang.org&quot;&gt;Cerealed v0.6.1: even less boilerplate for binary serialization&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mpttnn$n08$1@digitalmars.com&quot;&gt;Visual D 0.3.42 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/soobhkdzpwlhezdfwtxi@forum.dlang.org&quot;&gt;line numbers for linux exception traces&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ufqiqrgfoeycdxmmzywq@forum.dlang.org&quot;&gt;DCD 0.7.0-alpha1 - DCD is an IDE and editor-independent autocompletion system for the D programming language.&lt;/a&gt;
  10327. &lt;/li&gt;&lt;/ul&gt;
  10328.  
  10329. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10330.  
  10331. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  10332.  
  10333. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mpom8f$2eta$1@digitalmars.com&quot;&gt;Wiki article: Starting as a Contributor&lt;/a&gt; had Andrei explaining how to set up D on a fresh box. Discussion let to a better wiki page that will hopefully help more people get started.&lt;/p&gt;
  10334.  
  10335. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/vtditlswoivcoijhphsr@forum.dlang.org&quot;&gt;D fund&lt;/a&gt; asked about how people can donate to D. Andrei said he is still working on the D foundation he talked about at DConf and still expects it to be ready some time next year, hopefully early in the year. In the mean time, Bountysource was discussed, as well as paypal donations to individuals.&lt;/p&gt;
  10336.  
  10337. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/xozchleoiyxbsalbevlg@forum.dlang.org&quot;&gt;D for Game Development&lt;/a&gt; raged on into a second week, talking about using stable C libraries from D, pros and cons of GC in games, and laments about how much work there is still to do on toolchain issues.&lt;/p&gt;
  10338.  
  10339.  
  10340. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10341. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10342. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10343. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10344. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10345. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10346. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10347. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10348. &lt;/li&gt;&lt;/ul&gt;
  10349.  
  10350.  
  10351. &lt;/div&gt;
  10352. </description></item><item><title>Issue #29</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/aug-02.html</link><guid>http://arsdnet.net/this-week-in-d/aug-02.html</guid><pubDate>Sun, 02 Aug 2015 12:00:00 GMT</pubDate><description>
  10353. &lt;div id=&quot;body-container&quot;&gt;
  10354. &lt;h1&gt;
  10355. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10356. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10357. &lt;span id=&quot;title-date&quot;&gt;August 2, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10358.  
  10359.  
  10360. &lt;div id=&quot;preface&quot;&gt;
  10361.  
  10362. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10363.  
  10364. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10365.  
  10366. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10367.  
  10368. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10369.  
  10370. &lt;/div&gt;
  10371.  
  10372. &lt;h2&gt;Statistics&lt;/h2&gt;
  10373.  
  10374. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-07-27&amp;amp;chfieldto=2015-08-02&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10375. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-07-27&amp;amp;chfieldto=2015-08-02&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10376. 22 pull requests merged into the language:
  10377.  
  10378. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-27..2015-08-02&quot;&gt;12 into DMD&lt;/a&gt;,
  10379. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-27..2015-08-02&quot;&gt;9 into Phobos&lt;/a&gt;, and
  10380. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-27..2015-08-02&quot;&gt;1 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10381. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-27..2015-08-02&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  10382. &lt;/li&gt;&lt;/ul&gt;
  10383.  
  10384. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  10385.  
  10386. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;jobs page is the D Wiki&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  10387.  
  10388. &lt;h2&gt;In the community&lt;/h2&gt;
  10389.  
  10390. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10391.  
  10392. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ehykvsjlykqloibsuofr@forum.dlang.org&quot;&gt;std.data.json formal review&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/phjgvfpapjnxszgidnok@forum.dlang.org&quot;&gt;[blog post] Dependent types in (half of) D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ysbvjficchocfcgcdrtt@forum.dlang.org&quot;&gt;DerelictCocoa&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cnwjgehysxfiytpadiic@forum.dlang.org&quot;&gt;D goes business! Bindings for SAP NetWeaver RFC SDK&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mpg5j9$1e4r$1@digitalmars.com&quot;&gt;SDLang-D v0.9.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wewydxmkgrpllrxtvnyv@forum.dlang.org&quot;&gt;London D meetups ...&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mpm70c$fg5$1@digitalmars.com&quot;&gt;Seattle D meetup&lt;/a&gt;
  10393. &lt;/li&gt;&lt;/ul&gt;
  10394.  
  10395. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10396.  
  10397. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  10398.  
  10399. &lt;p&gt;There was a review of &lt;a href=&quot;http://forum.dlang.org/post/bzfkbkbvmgdjtbfmvlof@forum.dlang.org&quot;&gt;std.data.json&lt;/a&gt; this week. The std.data.json proposal is a significant evolution of the json code from vibe.d and is intended to be a new stdlib upgrade from the old std.json with a nicer interface. The review pointed out that the stream parser is allocation-free, but the DOM parser does allocate, but does not support allocators (because allocators are still experimental in Phobos too).&lt;/p&gt;
  10400.  
  10401. &lt;p&gt;A little more work will probably be done on the module and it will likely be added to Phobos.&lt;/p&gt;
  10402.  
  10403. &lt;h3&gt;Stack Overflow&lt;/h3&gt;
  10404.  
  10405. &lt;p&gt;Jonathan M. Davis, author of std.datetime, answered a &lt;a href=&quot;http://stackoverflow.com/q/31772773/1457000&quot;&gt;question on Stack Overflow&lt;/a&gt; about the rationale behind some methods and he also elaborated on the difference between &lt;tt&gt;SysTime&lt;/tt&gt; and &lt;tt&gt;DateTime&lt;/tt&gt; - explaining how it works with time zone and daylight saving time.&lt;/p&gt;
  10406.  
  10407. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  10408.  
  10409. &lt;p&gt;&lt;b&gt;Reading dmd's error messages&lt;/b&gt; is the topic of our tip this week. An important practical skill when developing D code is knowing what the compiler error messages mean and how to fix them. Often, they are pretty easy to understand, but the first time you see one can be a bit confusing. Knowing the common error message patterns will help you quickly debug code.&lt;/p&gt;
  10410.  
  10411. &lt;p&gt;The biggest tip when reading the error messages is to scroll all the way to the top and &lt;b&gt;read the first error message&lt;/b&gt;. Often, the first error is the only valid one, and subsequent errors are caused by that first one. Fixing one at a time, then rerunning the compiler can save a lot of time. This is especially true in template mismatches or parse errors. The biggest exception to this general rule are undefined identifier errors or missing module errors. You can fix all those in one pass without recompiling in between. Type mismatch or &amp;quot;no template matches&amp;quot; errors are often caused by undefined identifiers though, so once you fix those typos, recompile and see if the other errors disappear before spending any more time thinking about them.&lt;/p&gt;
  10412.  
  10413. &lt;p&gt;It is also helpful to understand the causes of a few other common errors. For example, &lt;tt&gt;Error: class foo.Bar(T) is used as a type&lt;/tt&gt; indicates that you used a template as a type - in other words, you forgot to instantiate it with arguments in a declaration:&lt;/p&gt;
  10414.  
  10415. &lt;pre class=&quot;d_code&quot;&gt;   &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Bar(T) { }
  10416.   Bar b = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Bar(); &lt;font color=&quot;green&quot;&gt;// error, Bar is used as a type
  10417. &lt;/font&gt;   Bar!&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; b = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Bar!&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;(); &lt;font color=&quot;green&quot;&gt;// this is what you should do (with the correct arguments to the template, of course)
  10418. &lt;/font&gt;&lt;/pre&gt;
  10419.  
  10420. &lt;p&gt;If the compiler complains that no overload matches and the two method signatures look identical, double check the constness of the object and the method. It is easy to forget a &lt;tt&gt;const&lt;/tt&gt; somewhere.&lt;/p&gt;
  10421.  
  10422. &lt;p&gt;&amp;quot;No matching template found for...&amp;quot; errors might be caused by a simple typo in a lambda. Be sure to check the first error message, which might be obscured by several lines of template errors! The first line is probably something simple.&lt;/p&gt;
  10423.  
  10424. &lt;p&gt;&lt;tt&gt;not an lvalue&lt;/tt&gt; typically means you tried to pass a function's return value to a function expecting &lt;tt&gt;ref&lt;/tt&gt;, such as &lt;tt&gt;std.conv.parse&lt;/tt&gt;. If you can change the function you are calling, making it &lt;tt&gt;auto ref&lt;/tt&gt; might help. Otherwise, you can try a non-ref overload (for example, &lt;tt&gt;std.conv.to&lt;/tt&gt; in the place of &lt;tt&gt;std.conv.parse&lt;/tt&gt;), or put the return value in an intermediate:&lt;/p&gt;
  10425.  
  10426. &lt;pre class=&quot;d_code&quot;&gt; takes_ref(your_function()); &lt;font color=&quot;green&quot;&gt;// error, your_function is not an lvalue
  10427. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; tmp = your_function(); &lt;font color=&quot;green&quot;&gt;// use an intermediate...
  10428. &lt;/font&gt; takes_ref(tmp); &lt;font color=&quot;green&quot;&gt;// and now this works
  10429. &lt;/font&gt;&lt;/pre&gt;
  10430.  
  10431. &lt;p&gt;If using a std.algorithm function and it complains about no matching template, you will want to check your lambda signature and custom range definitions. After writing a range, put &lt;tt&gt;static assert(isInputRange!YourType);&lt;/tt&gt; under it. Also use &lt;tt&gt;static assert&lt;/tt&gt; to check other features you intended to implement, like &lt;tt&gt;isForwardRange&lt;/tt&gt; or &lt;tt&gt;hasLength&lt;/tt&gt;. Now, the compiler will double-check this for you at the declaration point, making errors much easier to find.&lt;/p&gt;
  10432.  
  10433. &lt;p&gt;&lt;b&gt;Tip:&lt;/b&gt; also write unit tests for your templates, trying to instantiate them with various types of input. You don't even need to run the tests themselves, just make sure they compile to ensure your code doesn't blow up unexpectedly with different sets of arguments.&lt;/p&gt;
  10434.  
  10435. &lt;p&gt;A mistake I make a lot is trying to call &lt;tt&gt;std.algorithm.sort&lt;/tt&gt; with a lambda that returns an &lt;tt&gt;int&lt;/tt&gt;, like &lt;tt&gt;cmp&lt;/tt&gt; on strings. This won't work - the lambda needs to return &lt;tt&gt;bool&lt;/tt&gt; instead. So try &lt;tt&gt;(a, b) =&amp;gt; cmp(a,b) &amp;lt; 0&lt;/tt&gt; instead of &lt;tt&gt;cmp(a,b)&lt;/tt&gt;, for example. (This specific example is unnecessary by the way, as &lt;tt&gt;sort&lt;/tt&gt; does that comparison by default with strings.)&lt;/p&gt;
  10436.  
  10437. &lt;p&gt;The error given is just &lt;tt&gt;static assert, invalid predicate passed to sort&lt;/tt&gt;, but the cause is often a wrong return value or something similar. Knowing this can save a lot of frustration in trying to figure it out.&lt;/p&gt;
  10438.  
  10439. &lt;p&gt;Library writers, also try to make your code return helpful error messages. If you trigger a failing static assert, make sure the message includes why as best you can, perhaps even using reflection to dig into details. The time it takes for you to make these messages will be much appreciated by your users! A good error message at compile time can save hours of debugging.&lt;/p&gt;
  10440.  
  10441. &lt;p&gt;Users, remember, imperfect error messages could be better... but if you get to know what they are really saying, the benefit is still pretty significant. When you see a confusing error message, take note of what cause it so if it happens again, you can handle it that much faster next time.&lt;/p&gt;
  10442.  
  10443. &lt;p&gt;Finally, if you are writing a tutorial, don't neglect common errors the user might face while experimenting with your lessons! A student who can't read compile errors will have a hard time when they try branch out on their own.&lt;/p&gt;
  10444.  
  10445. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10446. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10447. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10448. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10449. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10450. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10451. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10452. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10453. &lt;/li&gt;&lt;/ul&gt;
  10454.  
  10455.  
  10456. &lt;/div&gt;
  10457. </description></item><item><title>Issue #28</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jul-26.html</link><guid>http://arsdnet.net/this-week-in-d/jul-26.html</guid><pubDate>Sun, 26 Jul 2015 12:00:00 GMT</pubDate><description>
  10458. &lt;div id=&quot;body-container&quot;&gt;
  10459. &lt;h1&gt;
  10460. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10461. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10462. &lt;span id=&quot;title-date&quot;&gt;July 26, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10463.  
  10464.  
  10465. &lt;div id=&quot;preface&quot;&gt;
  10466.  
  10467. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10468.  
  10469. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10470.  
  10471. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10472.  
  10473. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10474.  
  10475. &lt;/div&gt;
  10476.  
  10477. &lt;h2&gt;Statistics&lt;/h2&gt;
  10478.  
  10479. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-07-20&amp;amp;chfieldto=2015-07-26&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;6 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10480. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-07-20&amp;amp;chfieldto=2015-07-26&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;18 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10481. 30 pull requests merged into the language:
  10482.  
  10483. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-20..2015-07-26&quot;&gt;11 into DMD&lt;/a&gt;,
  10484. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-20..2015-07-26&quot;&gt;14 into Phobos&lt;/a&gt;, and
  10485. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-20..2015-07-26&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10486. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-20..2015-07-26&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  10487. &lt;/li&gt;&lt;/ul&gt;
  10488.  
  10489. &lt;h2&gt;New Beta and TWO new books!&lt;/h2&gt;
  10490.  
  10491. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/movuvv$2ggd$1@digitalmars.com&quot;&gt;Beta D 2.068.0-b2&lt;/a&gt; was released this week, use the beta, file bugs to make a more stable relase.&lt;/p&gt;
  10492.  
  10493. &lt;p&gt;We also got two books announced about D: &lt;a href=&quot;http://forum.dlang.org/thread/fmdacptmuolqqqcsmzdy@forum.dlang.org&quot;&gt;&amp;quot;Learning D&amp;quot; is available for pre-order&lt;/a&gt;, as well as &lt;a href=&quot;http://forum.dlang.org/thread/onennbgfhjemovvkhdji@forum.dlang.org&quot;&gt;&amp;quot;D Web Development&amp;quot;&lt;/a&gt;. Both are coming from Packt Publishing, the same as my own &amp;quot;D Cookbook&amp;quot;.&lt;/p&gt;
  10494.  
  10495. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  10496.  
  10497. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;jobs page is the D Wiki&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  10498.  
  10499. &lt;h2&gt;In the community&lt;/h2&gt;
  10500.  
  10501. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10502.  
  10503. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uyualjdcrcpgczltjfgn@forum.dlang.org&quot;&gt;Case study on ranges and lazy evaluation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/moqkh9$150i$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup July 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/moqerl$10bu$1@digitalmars.com&quot;&gt;Bin2d (0.2.0) Rewrite&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/isznbdlzfyvprkenakng@forum.dlang.org&quot;&gt;Vibe-d MQTT client library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kndwmnoyecsiythsegbh@forum.dlang.org&quot;&gt;Run D on AWS Lambda&lt;/a&gt;
  10504. &lt;/li&gt;&lt;/ul&gt;
  10505.  
  10506. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10507.  
  10508. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  10509.  
  10510. &lt;p&gt;By far, the most significant discussion on the forums last week was &lt;a href=&quot;http://forum.dlang.org/thread/ckjukjfkgrguhfhkdhhj@forum.dlang.org&quot;&gt;Rant after trying Rust a bit&lt;/a&gt; - a discussion that started with just a list of features the OP liked in Rust, but quickly shifted course into a traits and concepts vs template constraint argument.&lt;/p&gt;
  10511.  
  10512. &lt;p&gt;Both sides seemed frustrated that the other side wasn't listening to them, with the traits/concepts (it was also pointed out that they aren't actually the same thing, but the argument kept mixing the ideas together) side accusing the constraint side as not learning the lesson from dynamic languages and the constraint/duck type side accusing the other side as not seeing the compile-time benefits of unit tests and for shipping untested code.&lt;/p&gt;
  10513.  
  10514. &lt;p&gt;Both sides made a number of fair points - reading coverage output is difficult for a large library and a library's user is another developer, so while it is a compile time check for them, it is still analogous to runtime for the library author. Similarly, the traits or concepts can explode in complexity for many tasks (this was the topic of Andrei's DConf talk too, see a few issues ago for a summary and video link for that).&lt;/p&gt;
  10515.  
  10516. &lt;p&gt;It is unlikely much will change in D as a result of this argument, but skimming it may teach you useful tips to mitigate the problems each side sees.&lt;/p&gt;
  10517.  
  10518. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10519. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10520. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10521. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10522. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10523. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10524. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10525. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10526. &lt;/li&gt;&lt;/ul&gt;
  10527.  
  10528.  
  10529. &lt;/div&gt;
  10530. </description></item><item><title>Issue #27</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jul-19.html</link><guid>http://arsdnet.net/this-week-in-d/jul-19.html</guid><pubDate>Sun, 19 Jul 2015 12:00:00 GMT</pubDate><description>
  10531. &lt;div id=&quot;body-container&quot;&gt;
  10532. &lt;h1&gt;
  10533. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10534. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10535. &lt;span id=&quot;title-date&quot;&gt;July 19, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10536.  
  10537.  
  10538. &lt;div id=&quot;preface&quot;&gt;
  10539.  
  10540. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10541.  
  10542. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10543.  
  10544. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10545.  
  10546. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10547.  
  10548. &lt;/div&gt;
  10549.  
  10550. &lt;h2&gt;Statistics&lt;/h2&gt;
  10551.  
  10552. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-07-13&amp;amp;chfieldto=2015-07-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;12 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10553. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-07-13&amp;amp;chfieldto=2015-07-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;10 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10554. 21 pull requests merged into the language:
  10555.  
  10556. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-13..2015-07-19&quot;&gt;4 into DMD&lt;/a&gt;,
  10557. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-13..2015-07-19&quot;&gt;13 into Phobos&lt;/a&gt;, and
  10558. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-13..2015-07-19&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10559. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-13..2015-07-19&quot;&gt;1 pull request merged into the website.&lt;/a&gt;
  10560. &lt;/li&gt;&lt;/ul&gt;
  10561.  
  10562. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  10563.  
  10564. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  10565.  
  10566. &lt;h2&gt;In the community&lt;/h2&gt;
  10567.  
  10568. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10569.  
  10570. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gdpyfqelrbocrhhxqupn@forum.dlang.org&quot;&gt;Deal of the day: The D Programming Language @ Informit&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mbajgmrvivuxumfbzagq@forum.dlang.org&quot;&gt;Programming in D On Goodreads&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mogfp0$jh8$1@digitalmars.com&quot;&gt;Future Programming Workshop submission deadline is today&lt;/a&gt;
  10571. &lt;/li&gt;&lt;/ul&gt;
  10572.  
  10573. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10574.  
  10575. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  10576.  
  10577. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/wxpwmkxlilsdmckhoemu@forum.dlang.org&quot;&gt;Creator of LLVM, Clang, and Swift Says To Not Write Security Critical Code In C/C++&lt;/a&gt; was a thread mostly about performance optimizations and the importance of profiling.&lt;/p&gt;
  10578.  
  10579. &lt;p&gt;The other main discussion was the AliasSeq bikeshedding, continued from last week. The decision that was merged into Phobos was to just stay with AliasSeq.&lt;/p&gt;
  10580.  
  10581. &lt;h2&gt;Tip of the Week&lt;/h2&gt;
  10582.  
  10583. &lt;p&gt;This week, I was asked a &lt;a href=&quot;http://forum.dlang.org/thread/gtaypgbirsxckdqexfnu@forum.dlang.org#post-gtaypgbirsxckdqexfnu:40forum.dlang.org&quot;&gt;question&lt;/a&gt; about &lt;tt&gt;alias this&lt;/tt&gt; and constructors. I will reproduce my answer here as it may be of general interest: just how does &lt;tt&gt;alias this&lt;/tt&gt; work? What is the rule on constructing structs inside classes?&lt;/p&gt;
  10584.  
  10585. &lt;p&gt; Is there any reason why implicit conversion from Foo to Thing is permitted in a regular method but not in a constructor?&lt;/p&gt;
  10586.  
  10587. &lt;p&gt;In the constructor, you are supposed to be constructing things, so the first &amp;quot;assignment&amp;quot; of structs is actually a constructor call. D does not support implicit construction (kinda sadly, but it doesn't).&lt;/p&gt;
  10588.  
  10589. &lt;p&gt;In the other methods, it calls opAssign instead, since the struct already exists. So this is the difference between:&lt;/p&gt;
  10590.  
  10591. &lt;pre class=&quot;d_code&quot;&gt;Thing thing = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Foo(); &lt;font color=&quot;green&quot;&gt;// in the ctor, this line in main wouldn't work either with the same error
  10592. &lt;/font&gt;
  10593. &lt;font color=&quot;green&quot;&gt;// and
  10594. &lt;/font&gt;
  10595. thing = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Foo(); &lt;font color=&quot;green&quot;&gt;// in the other method, this line in main does work
  10596. &lt;/font&gt;&lt;/pre&gt;
  10597.  
  10598. &lt;p&gt;Try adding &lt;tt&gt;void opAssign(T)(T t) { static assert(0); }&lt;/tt&gt; to your struct and recompile. You'll see it throws on the method. Then change that &lt;tt&gt;opAssign&lt;/tt&gt; to &lt;tt&gt;this&lt;/tt&gt;, so it becomes a constructor. Then you'll see it is called in the class constructor.&lt;/p&gt;
  10599.  
  10600. &lt;p&gt;Moreover, note that this only applies to the *first* assignment of the struct. If you copy/paste that line in the constructor again right under it, you'll see the compiler only throws the error once. The first one is a construction. The second one is a standard assignment again.&lt;/p&gt;
  10601.  
  10602. &lt;p&gt;Put those two lines in a runtime branch: &lt;tt&gt;if(something) thing = new Foo(); else thing = new Foo();&lt;/tt&gt; and notice how the compiler throws two errors again.&lt;/p&gt;
  10603.  
  10604. &lt;p&gt;The first assignment in any branch of a constructor is a construction! The next one is an assignment.&lt;/p&gt;
  10605.  
  10606. &lt;p&gt;So the rule is slightly complex (and the implementation may be buggy, though it seems good to me now), but it is intentional.&lt;/p&gt;
  10607.  
  10608. &lt;p&gt;The reason for this goes beyond just that constructors are supposed to be constructing. It also is relevant for &lt;tt&gt;immutable&lt;/tt&gt; members - these are allowed to be constructed, but not modified, so if the class constructor didn't treat those as constructions, it would be impossible to set them up with runtime data.&lt;/p&gt;
  10609.  
  10610. &lt;p&gt;And it is also important for &lt;tt&gt;@disable this()&lt;/tt&gt; struct members, which must be constructed explicitly. If the first assignment in a ctor didn't count for that, you couldn't have them in a class at all.&lt;/p&gt;
  10611.  
  10612. &lt;h3&gt;How does alias this work anyway?&lt;/h3&gt;
  10613.  
  10614. &lt;p&gt;Given:&lt;/p&gt;
  10615.  
  10616. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; Foo {
  10617.   T x;
  10618.   &lt;font color=&quot;blue&quot;&gt;alias&lt;/font&gt; x &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;;
  10619. }
  10620. &lt;/pre&gt;
  10621.  
  10622.  
  10623. &lt;p&gt;Any time you do&lt;/p&gt;
  10624.  
  10625. &lt;pre class=&quot;d_code&quot;&gt;Foo foo;
  10626.  
  10627. foo.something = whatever;
  10628. &lt;font color=&quot;green&quot;&gt;// or
  10629. &lt;/font&gt;foo = whatever;
  10630. &lt;font color=&quot;green&quot;&gt;// or
  10631. &lt;/font&gt;whatever = foo;
  10632. &lt;/pre&gt;
  10633.  
  10634.  
  10635. &lt;p&gt;It first tries that code directly. If that doesn't work, it then tries rewriting &lt;tt&gt;foo&lt;/tt&gt; into &lt;tt&gt;foo.x&lt;/tt&gt;:&lt;/p&gt;
  10636.  
  10637. &lt;pre class=&quot;d_code&quot;&gt;foo.x.something = whatever;
  10638. foo.x = whatever;
  10639. whatever = foo.x;
  10640. &lt;/pre&gt;
  10641.  
  10642.  
  10643. &lt;p&gt;And if that compiles, you're all set, that code gets generated.&lt;/p&gt;
  10644.  
  10645.  
  10646. &lt;p&gt;The OP's situation is just case #2 here. The compiler is taking the illegal &lt;tt&gt;thing = new Foo;&lt;/tt&gt; and rewriting it into the legal &lt;tt&gt;thing.foo = new Foo;&lt;/tt&gt; automatically via alias this.&lt;/p&gt;
  10647.  
  10648. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  10649. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  10650. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10651. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10652. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  10653. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  10654. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10655. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  10656. &lt;/li&gt;&lt;/ul&gt;
  10657.  
  10658.  
  10659. &lt;/div&gt;
  10660. </description></item><item><title>Issue #26</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jul-12.html</link><guid>http://arsdnet.net/this-week-in-d/jul-12.html</guid><pubDate>Sun, 12 Jul 2015 12:00:00 GMT</pubDate><description>
  10661. &lt;div id=&quot;body-container&quot;&gt;
  10662. &lt;h1&gt;
  10663. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  10664. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  10665. &lt;span id=&quot;title-date&quot;&gt;July 12, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  10666.  
  10667.  
  10668. &lt;div id=&quot;preface&quot;&gt;
  10669.  
  10670. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  10671.  
  10672. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  10673.  
  10674. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  10675.  
  10676. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  10677.  
  10678. &lt;/div&gt;
  10679.  
  10680. &lt;h2&gt;Statistics&lt;/h2&gt;
  10681.  
  10682. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-07-06&amp;amp;chfieldto=2015-07-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;19 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10683. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-07-06&amp;amp;chfieldto=2015-07-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  10684. 36 pull requests merged into the language:
  10685.  
  10686. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-06..2015-07-12&quot;&gt;11 into DMD&lt;/a&gt;,
  10687. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-06..2015-07-12&quot;&gt;14 into Phobos&lt;/a&gt;, and
  10688. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-06..2015-07-12&quot;&gt;11 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  10689. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-07-06..2015-07-12&quot;&gt;9 pull requests merged into the website.&lt;/a&gt;
  10690. &lt;/li&gt;&lt;/ul&gt;
  10691.  
  10692. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  10693.  
  10694. &lt;p&gt;The videos are now all released. They can be found on &lt;a href=&quot;https://www.youtube.com/user/UtahValleyUniversity/videos&quot;&gt;UVU's youtube channel&lt;/a&gt; and on the &lt;a href=&quot;http://dconf.org/2015/schedule/index.html&quot;&gt;DConf website talk pages&lt;/a&gt;.&lt;/p&gt;
  10695.  
  10696.  
  10697. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  10698.  
  10699. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  10700.  
  10701. &lt;h2&gt;In the community&lt;/h2&gt;
  10702.  
  10703. &lt;h3&gt;Community announcements&lt;/h3&gt;
  10704.  
  10705. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ocmfdkvjjlryoowwwiwm@forum.dlang.org&quot;&gt;Berlin D Meetup July 17, 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mnhh2r$2cjf$1@digitalmars.com&quot;&gt;Lessons Learned: Writing a filesystem in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/icjlzrudfwtrppnngghm@forum.dlang.org&quot;&gt;erln8 - erlang manager tool written in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ngtrjzaxsjbebcuonuab@forum.dlang.org&quot;&gt;Four new DConf 2015 videos&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mnp350$7ql$2@digitalmars.com&quot;&gt;Last - but not least! - two DConf talks&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m2mvz57seb.fsf@comcast.net&quot;&gt;LDC for iOS prebuilt binaries&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zbzjtssagejcxpxittij@forum.dlang.org&quot;&gt;Voting for std.experimental.allocator - passing result&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mnru4b$2k12$1@digitalmars.com&quot;&gt;Firs step of D/Objective-C merged&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vhyzjtypciqayybsixja@forum.dlang.org&quot;&gt;New ldc2-0.15.2-beta2 Linux suitable for Travis-CI&lt;/a&gt;
  10706. &lt;/li&gt;&lt;/ul&gt;
  10707.  
  10708. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  10709.  
  10710. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  10711.  
  10712. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mnhfhs$2b9o$1@digitalmars.com&quot;&gt;Wait, what? What is AliasSeq?&lt;/a&gt; was a long bikeshedding discussion - people arguing over the name of a trivial, but useful line of code: &lt;tt&gt;alias whatever_name(T...) = T;&lt;/tt&gt;. People argued it isn't a tuple because it automatically expands, it isn't a list because it is indexable, it isn't arguments because it might be parameters, and similar for post after post after post.&lt;/p&gt;
  10713.  
  10714. &lt;p&gt;No decision seems to have been made. The old name for that in Phobos was &lt;tt&gt;TypeTuple&lt;/tt&gt; which nobody really loved. Essentially, it is just a list of random compile time things.&lt;/p&gt;
  10715.  
  10716. &lt;h2&gt;Community Interview&lt;/h2&gt;
  10717.  
  10718. &lt;p&gt;Our interview this week is &lt;b&gt;Etienne Cimon&lt;/b&gt;, again courtesy of Joakim.&lt;/p&gt;
  10719.  
  10720. &lt;p&gt;Etienne Cimon is an active contributor on &lt;a href=&quot;http://code.dlang.org&quot;&gt;
  10721. dub&lt;/a&gt;, the D repository for third-party libraries.  He has ported C++ libraries
  10722. to D, like the Botan crypto library and libhttp2 from nghttp2, and written new
  10723. D libraries, such as the libasync event loop library and memutils, which
  10724. provides some allocators and containers that employ them.&lt;/p&gt;
  10725. &lt;p&gt;&lt;b&gt;Q: How was the experience writing your own D libraries?  What stood
  10726. out for you when writing in D, as opposed to other languages you used
  10727. before?&lt;/b&gt;&lt;/p&gt;
  10728. &lt;p&gt;A: I wanted speed, and I got speed, and it was easy and short. At a
  10729. certain point, it essentially gives you C speed with javascript syntax. What
  10730. stood out most is the &lt;tt&gt;delegate&lt;/tt&gt; type, it can behave in many different ways,
  10731. it even lets you write a callback somewhat like in javascript, e.g.&lt;/p&gt;          
  10732.  
  10733. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; func2 = (string str) { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; str ~ &lt;font color=&quot;red&quot;&gt;&amp;quot; you!&amp;quot;&lt;/font&gt;; }; &lt;font color=&quot;green&quot;&gt;// the ~ is the only allocation in this code!
  10734. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; func = { &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; func2(&lt;font color=&quot;red&quot;&gt;&amp;quot;hey&amp;quot;&lt;/font&gt;); };
  10735. writeln(func());  &lt;font color=&quot;green&quot;&gt;// prints: &amp;quot;hey you!&amp;quot;;
  10736. &lt;/font&gt;&lt;/pre&gt;
  10737.  
  10738.  &lt;p&gt;I wanted to put that ease into an async library and it took me less than a
  10739.  month. I interfaced it with Windows/Linux/BSD/Mac easily because there were
  10740.  bindings to all the platforms in druntime and there's lots of help around to
  10741.  achieve it. I felt like a kid having Superman by my side in school.&lt;/p&gt;
  10742.  &lt;p&gt;I won't go into the details because you couldn't cover all of the
  10743.  language features in four years of full-time schooling. But it's easy to stop
  10744.  at a subset of them if you don't need it all.&lt;/p&gt;
  10745.                                      
  10746. &lt;p&gt;&lt;b&gt;Q: Can you go into the details a bit more?  Obviously you weren't
  10747. using all of D's features, but what stood out for you as most helpful or
  10748. useful compared to other languages, other than delegates?&lt;/b&gt;&lt;/p&gt;
  10749. &lt;p&gt;A:&lt;br /&gt;
  10750. - &lt;tt&gt;static if&lt;/tt&gt;, &lt;tt&gt;static assert&lt;/tt&gt;, &lt;tt&gt;version&lt;/tt&gt;, traits and mixins. When I
  10751. discovered those, I was going nuts with C++ metaprogramming, which
  10752. relies entirely on type inference, recursion, and &amp;lt;, &amp;gt;, nesting to do
  10753. anything at all. I studied boost::phoenix, boost::spirit,
  10754. boost::serialization, and I believe the implementation details of those
  10755. libraries would be much simpler in D. In fact, it would look like very
  10756. regular OOP. Metaprogramming in D is a little like reflection in other
  10757. languages, minus the additional CPU cycles: the compiler spits out the
  10758. most optimal instructions in every case. That's the most attractive part of
  10759. course: not having to write the optimal boilerplate for every scenario. I used
  10760. this to develop the &lt;tt&gt;alloc!MyType(args)&lt;/tt&gt; and
  10761. &lt;tt&gt;free(my_type)&lt;/tt&gt; functions, which mimic the functionality of &lt;tt&gt;new&lt;/tt&gt; in
  10762. the compiler thanks to the introspective ability of the compiler.&lt;/p&gt;
  10763.  
  10764. &lt;p&gt;- UFCS and the &lt;tt&gt;package&lt;/tt&gt; protection keyword. I can extend classes and
  10765. structs using static function declarations in different modules, e.g.
  10766. definition:
  10767. `void echo(HTTPServerResponse res, Object o) {
  10768. res.bodyWriter.write(o.toString()); }`
  10769. &lt;br /&gt;
  10770. usage: &lt;tt&gt;res.echo(obj);&lt;/tt&gt;.  No need for inheritance, and it also becomes very
  10771. useful for generic methods with the right template overloading. The .to!T
  10772. method is the best example, excellent for chaining calls.&lt;/p&gt;
  10773. &lt;p&gt;&lt;b&gt;Q: How was the experience porting C++ libraries like botan or nghttp2?
  10774. Talk about the process and what kind of changes you had to make, including
  10775. what the tougher or more tedious parts were.&lt;/b&gt;&lt;/p&gt;
  10776. &lt;p&gt;A: On the plus side, these libraries didn't rely on C++ or C external
  10777. libraries which made it a LOT easier than it should have been. However, I did
  10778. come up with a few problems.&lt;/p&gt;
  10779.  
  10780. &lt;p&gt;The hard:&lt;br /&gt;
  10781. - The naming convention takes very long to change. Yes, going snake_case to
  10782. camelCase is important for readability. :)&lt;/p&gt;
  10783. &lt;p&gt;- The C++ STL didn't have a corresponding library in D, so I wrote
  10784. memutils. The Vector/Map/Reference counting/Unique/RBTree with custom
  10785. allocators had to be written with similar behavior, and with a GC
  10786. monitoring everything I needed to perfectly understand the side
  10787. effects.. thankfully it's a simple garbage collector!&lt;/p&gt;
  10788. &lt;p&gt;- The macros are very difficult to reason about, especially &lt;a href=&quot;
  10789. https://github.com/randombit/botan/blob/7b56f1bd570dc684ffd7c945dee0d9b5480354ff/src/lib/block/gost_28147/gost_28147.cpp#L89&quot;&gt;
  10790. things like this&lt;/a&gt;, which will be templated and &lt;a href=&quot;
  10791. https://github.com/etcimon/botan/blob/81841b5af58e503995632e7ee97cc3ff8c86d0e6/source/botan/block/gost_28147.d#L241&quot;&gt;
  10792. call in mixins like this&lt;/a&gt;.&lt;/p&gt;
  10793.  
  10794.  
  10795. &lt;p&gt;The easy:&lt;br /&gt;
  10796. - No difficulty at all with porting a C library.&lt;/p&gt;
  10797. &lt;p&gt;- Sounds crazy, but the whole process of building the library was very
  10798. much simplified and I managed to flush the build scripts from C++ and make a
  10799. simple configuration file for dub instead.&lt;/p&gt;
  10800. &lt;p&gt;- The whole thing is very repetitive.  Writing a lot of regex to search &amp;amp;
  10801. replace the types or function names and moving definitions under the
  10802. corresponding header file declarations was the longest part.&lt;/p&gt;
  10803. &lt;p&gt;- I loved the refactoring of the libraries.  For C, you could take away
  10804. most of the names by enclosing into structs, which makes for cleaner function
  10805. bodies e.g. going from &lt;a href=&quot;
  10806. https://github.com/tatsuhiro-t/nghttp2/blob/2224b98c9c9a33e4d57c11bfd1639efcfb7f72d2/lib/nghttp2_session.c#L235&quot;&gt;
  10807. &lt;tt&gt;session_inbound_frame_reset(nghttp2_session *session)&lt;/tt&gt;&lt;/a&gt; to &lt;a href=&quot;
  10808. https://github.com/etcimon/libhttp2/blob/960ad69aa7be7cb7f2175339ab72375260aca73a/source/libhttp2/session.d#L250&quot;&gt;
  10809. &lt;tt&gt;reset()&lt;/tt&gt;&lt;/a&gt;.&lt;/p&gt;
  10810.  
  10811.  
  10812.  
  10813. &lt;p&gt;&lt;b&gt;Q: Please tell us about your background: who you are and where
  10814. you're from, what programming languages you used before D, and take us from
  10815. your experience first discovering and using D to porting and writing your own
  10816. D libraries.&lt;/b&gt;&lt;/p&gt;
  10817. &lt;p&gt;A: I started programming when I was nine years old in Ontario
  10818. (Burlington), I got a 486 that had 33mhz regular, 66mhz on turbo. Made me
  10819. think it was extremely powerful, like those cars with turbo engines. But my
  10820. neighbor brought in a Pentium 133 mhz and it made me feel totally envious.
  10821. However, the guys there were 4-6 years older than me and some of them were
  10822. experts at it.  I quickly learned to go on IRC, most notably #warez97 or stuff
  10823. like that, where I discovered a lot of software by running an ftp server
  10824. called serv-u with 1:2 upload ratio and advertising it on IRC. I had the first
  10825. cable modem in the block and it was like 18-60KB/s instead of the 3KB/s I'd
  10826. get on a dialup. Awesome times.&lt;/p&gt;
  10827.  
  10828. &lt;p&gt;So I kept on going on the computer 8 hours per day after school and even
  10829. at school (I was in &lt;a href=&quot;
  10830. http://www.csdecou.qc.ca/collegedescompagnons/protic/&quot;&gt;protic&lt;/a&gt;) until I knew
  10831. everything I could. HTML, javascript, perl, visual basic, php, C# later.. I
  10832. worked for the University of Alberta at 17 years old on a web software project
  10833. too (at NANUC, very nice bunch). I could say things went pretty well for me: I
  10834. went through engineering school while running my software company doing
  10835. e-commerce software or custom stuff mostly in the Montreal area (Quebec). Most
  10836. of the stuff I made was by myself and
  10837. usually along the lines of a partnership with a designer at &lt;a href=&quot;
  10838. http://definiteimage.com/&quot;&gt;definiteimage.com&lt;/a&gt;. My most important developments
  10839. have followed the companies through their expansion and still run to this
  10840. day.&lt;/p&gt;
  10841. &lt;p&gt;I started building my own line of private projects 4 years ago and run on
  10842. my own income streams by now.&lt;/p&gt;
  10843.  
  10844.  
  10845. &lt;p&gt;I was mad at PHP/MySQL because it was running so slow, so I decided to go
  10846. lower level into C and C++. I read a lot on the processor intrinsics and most
  10847. importantly the article from Ulrich Drepper, &lt;a href=&quot;
  10848. http://www.akkadia.org/drepper/cpumemory.pdf&quot;&gt;What everyone should know
  10849. about memory&lt;/a&gt;. I decided to port some projects to C++ but became
  10850. overwhelmed at the complete disorganization of the frameworks in that
  10851. community, how heavy (megabytes of DLL just for utf-8?) each library is.&lt;/p&gt;
  10852. &lt;p&gt;I found D when searching for HTTP libraries, I found that curl had a sane
  10853. interface on it. It was lightweight, complete, had a good license, sane
  10854. errors: I was impressed. Then I remember glancing over the &lt;a href=&quot;
  10855. http://vibed.org&quot;&gt;vibed.org webpage&lt;/a&gt; and seeing an entire high-level HTTP
  10856. framework in a low-level language! I had a hard time imagining it was even
  10857. possible, when boost wanted me to remember my context switches through
  10858. strides, or I don't remember what they called them. I decided never to look
  10859. back, and S&amp;#182;nke quickly became a great inspiration to me in learning how to
  10860. program high-level code in a low-level language. However, I think there was
  10861. still too much C and C++ in there, which is why I decided to start writing
  10862. low-level libraries anyways.&lt;/p&gt;
  10863.  
  10864.  
  10865. &lt;p&gt;&lt;b&gt;Q: Do you make money writing all this D code?  What do you do for a
  10866. living?&lt;/b&gt;&lt;/p&gt;
  10867. &lt;p&gt;A: I develop private software, mostly in the social networking area. I
  10868. can't speak of it sadly. The web stack in D that I wrote is going to be at the
  10869. center of my career and developments for decades however. I also write a lot
  10870. of javascript, SQL, java, C and shell scripts.&lt;/p&gt;
  10871. &lt;p&gt;&lt;b&gt;Q: You've said on the forums that, &amp;quot;Nothing beats D in my opinion.
  10872. It's 20 years ahead of everything out there.&amp;quot;  Please expand on that: why do
  10873. you think it's so great?&lt;/b&gt;&lt;/p&gt;
  10874. &lt;p&gt;A: My conclusion by elimination and from a business perspective is that D
  10875. is the most appropriate &amp;quot;glue&amp;quot; language (the primary application
  10876. language) for small to large projects where you care about speed.&lt;/p&gt;
  10877.  
  10878. &lt;p&gt;My criteria for a good &amp;quot;glue&amp;quot; language is that it has to be C-style so
  10879. that your whole team can pick it up quickly; it has to be fast; have a lot of
  10880. features, including static types; compile to machine code; it has to do what
  10881. you want without becoming dirty; it needs to have at least a good compiler
  10882. that you can fix yourself; run on all platforms or potentially so, flexible
  10883. enough to get it in the direction you need.&lt;/p&gt;
  10884. &lt;p&gt;Why &amp;quot;glue&amp;quot; language? Shell scripts are usually the solution for 99% of
  10885. server administration tasks, and SQL is the solution for 99% of data
  10886. analysis, jade templates for HTML, R is the solution for statistics,
  10887. some people like to write a quick script in python or javascript to play
  10888. around with X and Y. Some want their database in sqlite written with C.  Why
  10889. the f*** not? Glue it to your main application and see it shine even more, ie.
  10890. put that shit in a D module, call it a day. And if it doesn't shine for what
  10891. you need, go make a pull request on github and a team of world-class experts
  10892. is going to give you a bunch of constructive comments until it does.&lt;/p&gt;
  10893. &lt;p&gt;If the world isn't ready for D to take over as a main language, it'll
  10894. probably be in 20 years when Apple releases the iLang or whatever and all the
  10895. vegan fanboys go crazy about how everything shines in the iLang.&lt;/p&gt;
  10896.  
  10897. &lt;p&gt;&lt;b&gt;Q: What problems have you had with D?  What features do you dislike?&lt;/b&gt;&lt;/p&gt;
  10898. &lt;p&gt;A: I really want both a shared and thread-local GC. We need to do
  10899. something about that &lt;tt&gt;shared&lt;/tt&gt; attribute, &lt;tt&gt;new shared T&lt;/tt&gt; =&amp;gt; shared GC, &lt;tt&gt;new T&lt;/tt&gt;
  10900. =&amp;gt; thread-local GC.  I hope I get more support for that. Non-locking solutions
  10901. are the answer to perfect concurrency.&lt;/p&gt;
  10902. &lt;p&gt;There were a few things lacking, like the COFF symbol limits in DMD. You
  10903. usually just fix those things, but there's always those other things that were
  10904. hindering development and I didn't fix but worked around them because I lacked
  10905. the time to develop a patch.&lt;/p&gt;
  10906. &lt;p&gt;- I think the lack of backtrace is what got to me the most. I had to
  10907. resort to addr2line most of the time because DMD spits out the
  10908. instruction addresses on the call stack. I tried some tools that did
  10909. this automatically but it didn't always work. GDB also crashed a few
  10910. times becase of the D symbols. I ended up relying on windbg (x64) and it
  10911. became my tool of choice. It feels incredibly empowering to use it in
  10912. development: I'll probably get burned for saying this but a modern GUI with a
  10913. good resolution is much more convenient than a small console window.&lt;/p&gt;
  10914.  
  10915. &lt;p&gt;- It's practically impossible to find leaks in the GC. Valgrind will look
  10916. at malloc/free which will show the first time the pointer was
  10917. allocated. I had to implement my own software-level leak detector via
  10918. mapping allocations in memutils' DebugAllocator. The idea is to print
  10919. all allocation pointers and sizes in a file, and show the remaining
  10920. pointer addresses at the end of the program along with their size, then search
  10921. through the allocations for each of them, and reiterate this
  10922. process but with a stack trace every time the matching pointer sizes are
  10923. allocated (I haven't had time to look into the new GC profiling features in
  10924. git master).&lt;/p&gt;
  10925. &lt;p&gt;&lt;b&gt;Q: When I first emailed you, you mentioned that you just got vibe.d to
  10926. &amp;quot;run stable&amp;quot; with your new D replacement libraries.  Can you go into what that
  10927. means, ie how you're testing that it's stable?&lt;/b&gt;&lt;/p&gt;
  10928. &lt;p&gt;A: I ran 2 vibe.d servers using these settings:&lt;br /&gt;
  10929. Firefox &amp;lt;= http/2 =&amp;gt; Vibe.d static file server&lt;br /&gt;
  10930. Firefox &amp;lt;= HTTP/1.1 =&amp;gt; Vibe.d Reverse Proxy &amp;lt;= http/2 &amp;amp; botan TLS =&amp;gt;
  10931. Vibe.d static file server&lt;/p&gt;
  10932.  
  10933. &lt;p&gt;So basically, the reverse proxy is an HTTP/2 secure client established
  10934. through either upgrade, ALPN or prior knowledge. The certificates and cipher
  10935. suites were alternated to different sets. A regular website with varying
  10936. payload sizes and possible errors was served.  Javascripts could be 150kb,
  10937. image files up to 1MB, and form uploads were also tested.&lt;/p&gt;
  10938. &lt;p&gt;I was using the firefox window debugger to analyse the response times and
  10939. return codes.&lt;/p&gt;
  10940. &lt;p&gt;This allowed me to debug many underlying components in what we can call
  10941. &amp;quot;Integration testing&amp;quot;. For example, the requests would often leak tasks for no
  10942. reason: I found that a signal was being unregistered because a stack algorithm
  10943. was duplicating an event every time the stack grew (double policy).&lt;/p&gt;
  10944. &lt;p&gt;I also tested closing the connection at every possible moment during
  10945. protocol negotiations. The very complex and unprecedented scientific
  10946. methodology used to achieve this was to hold F5 in Firefox. I found that some
  10947. errors were being generated inside constructors and causing leaks, for
  10948. example.&lt;/p&gt;  
  10949.  
  10950.  
  10951.  
  10952.  
  10953. &lt;p&gt;&lt;b&gt;Q: You also said you implemented &amp;quot;release-mode debugging symbols for
  10954. web server call stack and a request capture for debugging:&amp;quot; can you go over
  10955. what you did there?&lt;/b&gt;&lt;/p&gt;
  10956. &lt;p&gt;A: The release mode symbols was achieved by appending the result of the
  10957. compiler call &lt;tt&gt;__PRETTY__FUNCTION__&lt;/tt&gt; to a global fiber-specific call stack in
  10958. a red-black tree, and unwinding the stack when the scope
  10959. succeeded. When it failed, a counter was incremented to register this
  10960. call stack in exceptions, ie. on the error page in the HTTP server.&lt;/p&gt;
  10961. &lt;p&gt;This was simplified by adding &lt;tt&gt;mixin(Trace);&lt;/tt&gt; at the beginning of
  10962. tracked functions.&lt;/p&gt;
  10963. &lt;p&gt;The capture was achieved by allowing each task to hold &amp;quot;Breadcrumbs&amp;quot;, e.g.
  10964. 127.0.0.1:4459 &lt;http: /&gt; &amp;gt; GET &amp;gt; /url/. It also allowed tasks to
  10965. hold a &amp;quot;Name&amp;quot; e.g. HTTP Server Request. You could then use a &amp;quot;Keyword&amp;quot; to
  10966. assign data to be captured.&lt;/p&gt;
  10967. &lt;p&gt;This was simplified by adding a `mixin(OnCapture!(&amp;quot;HTTP Request
  10968. Headers&amp;quot;, &amp;quot;req.headers.toString()&amp;quot;));`.&lt;/p&gt;
  10969.  
  10970. &lt;p&gt;The capture interface &lt;a href=&quot;
  10971. http://htmlpreview.github.io/?https://github.com/etcimon/vibe.d/blob/bc35c8389ff17dcb41df8300bb1c42b9c551fab0/views/capture.html&quot;&gt;
  10972. can be seen here&lt;/a&gt;.&lt;/p&gt;
  10973. &lt;p&gt;This allows me to see not only the request and response headers,
  10974. but also the request and response form data, the pretty request and response
  10975. json data, the certificate information ie. algorithm, public key, issuer,
  10976. etc.&lt;/p&gt;
  10977. &lt;p&gt;This is very useful for debugging purposes when also available in the HTTP
  10978. Client. I can therefore write a library to interface with the
  10979. instagram public API and see what Json was returned. It is also
  10980. available on a live site, so if my vibe.d application stops working
  10981. correctly for a certain query, I can just launch the capture interface
  10982. and finally see what the f*** is going on in this shit. I have a family
  10983. ffs, I don't want to lose my entire existence debugging an invalid json
  10984. payload.&lt;/p&gt;
  10985.  
  10986. &lt;p&gt;&lt;b&gt;Q: Can you talk about the performance of your new vibe.d stack with D
  10987. libraries: how fast is it?  Particularly in relation to the
  10988. original C++ libraries, if you know.&lt;/b&gt;&lt;/p&gt;
  10989. &lt;p&gt;A: No idea, I'm not going to benchmark it on DMD because it's probably
  10990. 2-3x slower. It does compile about 10x faster, &amp;lt;10s vs &amp;gt;1 min. I think LDC
  10991. will be a little slower to compile but a much better match, no idea how it'll
  10992. do but it could definitely be faster than the C/C++
  10993. implementations. I will make the entire stack compile with LDC once
  10994. druntime/phobos 2.067+ is available in LDC, because some things couldn't work
  10995. on previous versions.&lt;/p&gt;
  10996. &lt;p&gt;&lt;b&gt;Q: What are your plans for future D libraries or features, whether C++
  10997. ports or written in D?&lt;/b&gt;&lt;/p&gt;
  10998.  
  10999. &lt;p&gt;A: I intend to write quite a few other ports. One of them is a DNS server
  11000. ported from Go.  It would however contain a load distribution round-robin
  11001. policy and some specific DDoS countermeasures I thought about. DDoS attackers
  11002. usually don't cache the DNS records because on any decent service, new servers
  11003. are dynamically advertised as others are shut down. So the countermeasure
  11004. would be to redirect the detected attacker to another attacker's IP through
  11005. the A records. Heheh&lt;/p&gt;
  11006. &lt;p&gt;Another library would be for a Quic implementation. Once (if) it becomes
  11007. standard, would be nice to have due to the huge number of roundtrips in TCP +
  11008. TLS + HTTP/2 connection negotiation.&lt;/p&gt;
  11009. &lt;p&gt;Of course, I'll keep the rest of the stack updated.&lt;/p&gt;
  11010.  
  11011.  
  11012.  
  11013.  
  11014. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  11015. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  11016. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11017. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11018. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  11019. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  11020. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11021. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  11022. &lt;/li&gt;&lt;/ul&gt;
  11023.  
  11024.  
  11025. &lt;/div&gt;
  11026. </description></item><item><title>Issue #25</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jul-05.html</link><guid>http://arsdnet.net/this-week-in-d/jul-05.html</guid><pubDate>Sun, 05 Jul 2015 12:00:00 GMT</pubDate><description>
  11027. &lt;div id=&quot;body-container&quot;&gt;
  11028. &lt;h1&gt;
  11029. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  11030. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  11031. &lt;span id=&quot;title-date&quot;&gt;July 5, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  11032.  
  11033.  
  11034. &lt;div id=&quot;preface&quot;&gt;
  11035.  
  11036. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  11037.  
  11038. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  11039.  
  11040. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  11041.  
  11042. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  11043.  
  11044. &lt;/div&gt;
  11045.  
  11046. &lt;h2&gt;Statistics&lt;/h2&gt;
  11047.  
  11048. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-06-23&amp;amp;chfieldto=2015-07-05&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;21 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11049. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-06-23&amp;amp;chfieldto=2015-07-05&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;39 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11050. 62 pull requests merged into the language:
  11051.  
  11052. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-23..2015-07-05&quot;&gt;27 into DMD&lt;/a&gt;,
  11053. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-23..2015-07-05&quot;&gt;27 into Phobos&lt;/a&gt;, and
  11054. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-23..2015-07-05&quot;&gt;8 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11055. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-23..2015-07-05&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  11056. &lt;/li&gt;&lt;/ul&gt;
  11057.  
  11058. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  11059.  
  11060. &lt;p&gt;The videos are starting to be released. They can be found on &lt;a href=&quot;https://www.youtube.com/user/UtahValleyUniversity/videos&quot;&gt;UVU's youtube channel&lt;/a&gt; and on the &lt;a href=&quot;http://dconf.org/2015/schedule/index.html&quot;&gt;DConf website talk pages&lt;/a&gt;.&lt;/p&gt;
  11061.  
  11062. &lt;p&gt;Three more were added this week, bringing the total number of videos to 9 so far.&lt;/p&gt;
  11063.  
  11064. &lt;p&gt;When they are all finished, I'll make a list here, too.&lt;/p&gt;
  11065.  
  11066.  
  11067. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  11068.  
  11069. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  11070.  
  11071. &lt;h2&gt;In the community&lt;/h2&gt;
  11072.  
  11073. &lt;h3&gt;Community announcements&lt;/h3&gt;
  11074.  
  11075. &lt;p&gt;The forum was abnormally quiet this week.&lt;/p&gt;
  11076.  
  11077. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jarbwixjtpnjphdftoyl@forum.dlang.org&quot;&gt;Repost of Chuck Allison's dconf 2015 talk&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zwxicfmyqbfrzroynrov@forum.dlang.org&quot;&gt;3 more dconf 2015 talks (Andy, Jonathan, and Mark)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gtkfbovufogyfaubltcq@forum.dlang.org&quot;&gt;LDC 0.15.2 beta2 is out!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/joxqwtulryuxctxlvumk@forum.dlang.org&quot;&gt;Looking for part-time developer for app back-end and webviews in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/quhvdibbcrnedxqekbhl@forum.dlang.org&quot;&gt;FancyPars&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cnwjgehysxfiytpadiic@forum.dlang.org&quot;&gt;D goes business! Bindings for SAP NetWeaver RFC SDK&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hwtehencnzfxxlenjome@forum.dlang.org&quot;&gt;clayers - Update 1.1.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/akdddynfvxgszhtaalql@forum.dlang.org&quot;&gt;Russian-speaking community&lt;/a&gt;
  11078. &lt;/li&gt;&lt;/ul&gt;
  11079.  
  11080. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  11081.  
  11082. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  11083. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  11084. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11085. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11086. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  11087. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  11088. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11089. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  11090. &lt;/li&gt;&lt;/ul&gt;
  11091.  
  11092.  
  11093. &lt;/div&gt;
  11094. </description></item><item><title>Issue #24</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jun-28.html</link><guid>http://arsdnet.net/this-week-in-d/jun-28.html</guid><pubDate>Sun, 28 Jun 2015 12:00:00 GMT</pubDate><description>
  11095. &lt;div id=&quot;body-container&quot;&gt;
  11096. &lt;h1&gt;
  11097. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  11098. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  11099. &lt;span id=&quot;title-date&quot;&gt;June 28, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  11100.  
  11101.  
  11102. &lt;div id=&quot;preface&quot;&gt;
  11103.  
  11104. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  11105.  
  11106. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  11107.  
  11108. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  11109.  
  11110. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  11111.  
  11112. &lt;/div&gt;
  11113.  
  11114. &lt;h2&gt;Statistics&lt;/h2&gt;
  11115.  
  11116. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-06-22&amp;amp;chfieldto=2015-06-28&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;15 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11117. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-06-22&amp;amp;chfieldto=2015-06-28&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;22 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11118. 32 pull requests merged into the language:
  11119.  
  11120. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-22..2015-06-28&quot;&gt;19 into DMD&lt;/a&gt;,
  11121. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-22..2015-06-28&quot;&gt;13 into Phobos&lt;/a&gt;, and
  11122. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-22..2015-06-28&quot;&gt;0 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11123. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-22..2015-06-28&quot;&gt;6 pull requests merged into the website.&lt;/a&gt;
  11124. &lt;/li&gt;&lt;/ul&gt;
  11125.  
  11126. &lt;h2&gt;Next DMD release&lt;/h2&gt;
  11127.  
  11128. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/mmfdjt$pan$1@digitalmars.com&quot;&gt;beta for dmd 2.068&lt;/a&gt; was released this week.&lt;/p&gt;
  11129.  
  11130. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  11131.  
  11132. &lt;p&gt;The videos are starting to be released. They can be found on &lt;a href=&quot;https://www.youtube.com/user/UtahValleyUniversity/videos&quot;&gt;UVU's youtube channel&lt;/a&gt; and on the &lt;a href=&quot;http://dconf.org/2015/schedule/index.html&quot;&gt;DConf website talk pages&lt;/a&gt;.&lt;/p&gt;
  11133.  
  11134. &lt;p&gt;When they are all finished, I'll make a list here, too.&lt;/p&gt;
  11135.  
  11136.  
  11137. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  11138.  
  11139. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  11140.  
  11141. &lt;h2&gt;In the community&lt;/h2&gt;
  11142.  
  11143. &lt;h3&gt;Community announcements&lt;/h3&gt;
  11144.  
  11145. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mmgrlh$20fn$1@digitalmars.com&quot;&gt;Book announcements! Twp-d and Developing with compile time in mind updates!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fmdacptmuolqqqcsmzdy@forum.dlang.org&quot;&gt;Learning D Available for Pre-Order&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ahafzmpoxmwtygdxqbyr@forum.dlang.org&quot;&gt;Coedit 1 - update 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hwmsrcmbiwbjbaumxahk@forum.dlang.org&quot;&gt;initial port of excel sdk headers to D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mmnv4v$b0q$1@digitalmars.com&quot;&gt;gen-package-version v1.0.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mmntkn$9ta$1@digitalmars.com&quot;&gt;Scriptlike v0.9.0 - a library to aid in writing script-like programs in D&lt;/a&gt;
  11146. &lt;/li&gt;&lt;/ul&gt;
  11147.  
  11148. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  11149.  
  11150. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  11151.  
  11152. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mailman.4980.1435071515.7663.digitalmars-d@puremagic.com&quot;&gt;std.experimental.color, request reviews&lt;/a&gt; introduces a new Phobos proposal for a color module. Also has a discussion on package layout - the old assumption that package.d would be the same as import all seems to be falling apart in actual usage, where it is more valuable to make it be a common subset of the package instead for typical users.&lt;/p&gt;
  11153.  
  11154. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  11155.  
  11156. &lt;h2&gt;Community Interview&lt;/h2&gt;
  11157.  
  11158. &lt;p&gt;Joakim conducted another interview this month and contributed it to This Week in D, this time with &lt;b&gt;Dmitry Olshansky&lt;/b&gt;. The following is their exchange, text provided by Joakim.&lt;/p&gt;
  11159.  
  11160.  
  11161. &lt;p&gt;Dmitry Olshansky is the author of two of the showcase modules of the D
  11162. standard library, phobos: std.regex, which provides regular expressions,
  11163. and std.uni, which provides unicode algorithms.&lt;/p&gt;
  11164.  
  11165. &lt;p&gt;&lt;b&gt;Q: How was D particularly suited for std.regex or unsuited?  I mean how
  11166. much did the language help you versus holding you back?&lt;/b&gt;&lt;/p&gt;
  11167.  
  11168. &lt;p&gt;A: One thing about D is how well suited it is for parsers, with its
  11169. slices.  Other advantages are the built-in provisions for Unicode
  11170. character types and powerful yet accessible meta-programming. It's hard
  11171. to overestimate the effect of easy templates in D: we don't even call
  11172. them templates, just compile-time parameters. Taking a peek at some
  11173. other engines, they either stick with UTF-8 or UTF-16. With D and a bit
  11174. of templates, I managed to get all three character widths with unified
  11175. code.  The sheer size-to-power ratio is also quite good, ~7K for 3
  11176. character widths and 3 engines, plus unittests for all of them vs. ~23K+
  11177. of C code for the newest Python regex module.&lt;/p&gt;
  11178.  
  11179. &lt;p&gt;How would I do that in say C?  Note that adding compile-time regex was a
  11180. relatively small amount of code.  With the power of &amp;quot;static if,&amp;quot; code
  11181. reuse in generic primitives becomes trivial. This is something even C++
  11182. is not capable of doing, not without a disproportional amount of effort.
  11183. If I were to name the key enabling feature in D, it must be &amp;quot;static if&amp;quot;.&lt;/p&gt;
  11184.  
  11185. &lt;p&gt;The ugly side of D is quality of implementation.  Things get better at a
  11186. steady pace, but something more radical has to happen with CTFE. CTFE is
  11187. still slow, leaks memory, and is otherwise unfit for serious work.  I
  11188. still run the test suite for static regex by splitting it into four
  11189. separate runs so as not to run out of 4 GB of memory. In the same vein,
  11190. std.regex is developed against the latest DMD. Yet for
  11191. performance-sensitive code, I need to compile with LDC or GDC, which lag
  11192. behind DMD. The mismatch of frontends is a constant nuisance to
  11193. benchmarks of std.*.&lt;/p&gt;
  11194.  
  11195. &lt;p&gt;The other problem in D is leaving too much to optional optimizations.
  11196. For instance, I know some tricks to get a function inlined in C++, the
  11197. dance might be different for different compilers but it does work. D
  11198. simply has no facility that would guarantee that something is inlined,
  11199. even when I *do* know better.  @force_inline seems to be an accepted
  11200. enhancement, I hope to see added it soon. (Update: Dmitry notes that it
  11201. has since landed in the master branch as &amp;quot;pragma(inline, true)&amp;quot;.)&lt;/p&gt;
  11202.  
  11203. &lt;p&gt;More towards where it strikes std.regex - tail calls.  If I could
  11204. enforce tail calls, the interpreter's dispatch could be made roughly
  11205. three times faster, by leveraging the so-called &amp;quot;threaded code&amp;quot; scheme.
  11206. Since a tail call is recognized as an optional optimization, one may not
  11207. rely on it happening in debug builds, nor is there any way to force it.
  11208. However, if a tail call is not happening, the threaded code interpreter
  11209. will just overflow the stack and crash.  Thus it affects semantics, but
  11210. I don't think I've convinced Walter that this is a problem.  There is
  11211. still a way to do a poor man's JIT and get direct threaded code, but
  11212. that is messy and unportable.&lt;/p&gt;
  11213.  
  11214. &lt;p&gt;&lt;b&gt;Q: What was the thought process for the design of std.regex in the
  11215. beginning and how did it evolve over time?  Take us a bit through the
  11216. evolution of how you got to the design of std.regex today, including any
  11217. war stories you have in mind.&lt;/b&gt;&lt;/p&gt;
  11218.  
  11219. &lt;p&gt;A: The central idea was to try multiple strategies and engines, to see
  11220. which one is going to win on the common benchmarks. The 2 candidates were:&lt;/p&gt;
  11221.  
  11222. &lt;p&gt;- backtracking (next to everybody uses that), which has dreaded
  11223. exponential worst-case complexity &lt;br /&gt;
  11224. - Thompson NFA, which has stable performance on any pattern&lt;/p&gt;
  11225.  
  11226. &lt;p&gt;The original idea was to later add other strategies. In particular, I
  11227. wanted to generate Deterministic Finite Automata (DFA) at compile-time,
  11228. it would be exceptionally fast but quite limited with respect to
  11229. features (not even sub-matches, ouch).&lt;/p&gt;
  11230.  
  11231. &lt;p&gt;One thing I knew for sure is I was going for a universal flat internal
  11232. representation that should be enough for both, yet avoid redundancy and
  11233. be suitable for optimizer passes, should they come later. Essentially,
  11234. it could be viewed as a bytecode for a very specific machine(s), and the
  11235. whole idea is a VM approach.&lt;/p&gt;
  11236.  
  11237. &lt;p&gt;One remarkably bad design decision I recall was the idea to do with
  11238. look-behind in regex.  The idea was to execute the bytecode of
  11239. look-behind backwards on a range that is lazily reversed. The bytecode
  11240. supported bidirectional traversal so it looked like a neat idea. Turns
  11241. out it causes a duplicate of main loops for all engines (counting the
  11242. compile-time one), a large maintenance burden.  A trivial solution was
  11243. executed only a year or two later - just swap the bytecode in place
  11244. during the pattern compilation step and execute it normally.&lt;/p&gt;
  11245.  
  11246. &lt;p&gt;Interestingly, getting 2 interpreters of bytecode off the ground
  11247. (including duplication) was quite easy compared to implementing what is
  11248. called &amp;quot;basic unicode support level 1&amp;quot; in the Unicode standard.  I had
  11249. absolutely no idea how much extra work that would turn out to be. Once I
  11250. scrolled down http://unicode.org/reports/tr18/, I knew I'm in for quite
  11251. some work. During the two week rush to get it all done and fast, I
  11252. managed to do a few lucky guesses, it seems. A year later with std.uni,
  11253. it took me a few weeks of tinkering to get performance on par with the
  11254. brutally simple 2-staged tables used in std.regex.&lt;/p&gt;
  11255.  
  11256. &lt;p&gt;Lastly, static regex got some hype, as it managed to beat V8's regex and
  11257. Google's RE2 on regex-dna benchmark, but it was essentially hacked in
  11258. about a week, plus or minus pauses between compiler fixes.  I recall
  11259. Andrei saying closer to the end of GSOC period, &amp;quot;You know, it'd be cool
  11260. if we can get that compile-time regex done&amp;quot;.&lt;/p&gt;
  11261.  
  11262. &lt;p&gt;The parser was (sort of) working with CTFE in a few days, by carefully
  11263. side-stepping D frontend bugs. The compile-time engine itself was a code
  11264. generator that walked the same bytecode and spit out D code for that
  11265. pattern, then that source was mixed in with a bit of &amp;quot;static if&amp;quot; to the
  11266. back-tracking engine. The end result turned out to a great deal faster,
  11267. unless hitting a weakness of backtracking. In the end, it turned out
  11268. that UTF decoding had become the bottleneck and it's soon to be removed.
  11269. The original idea of creating static DFA sadly went nowhere, though I
  11270. think it might be great for a certain class of patterns.&lt;/p&gt;
  11271.  
  11272. &lt;p&gt;&lt;b&gt;Q: Having contributed large modules to phobos, what do you like or
  11273. dislike about the phobos review process?&lt;/b&gt;&lt;/p&gt;
  11274.  
  11275. &lt;p&gt;A: Std.regex is hardly representative of today's process. It's been 3+
  11276. years and std.regex was one among the few to get a relatively swift
  11277. review process. Being exceptionally good on a popular benchmark also
  11278. sped things up. Still, as with any process, the good thing is extra
  11279. scrutiny spent on every minor detail, and a significant push for better
  11280. tests, documentation, annotations, style, proper benchmarks, etc. It may
  11281. seem like the last 10%, but it may take 50% of the whole effort. For
  11282. instance, the std.uni review was a superb experience with respect to
  11283. raising the quality, particularly of documentation.&lt;/p&gt;
  11284.  
  11285. &lt;p&gt;On the minus side, we don't have enough experts to cover every domain,
  11286. big issues are rarely discussed unless it's something of common
  11287. knowledge. To wit, std.logger took so looong to get even to an
  11288. experimental stage, since everybody had their own idea of what logging
  11289. looks like and presented real issues and matters of taste in swaths.&lt;/p&gt;
  11290.  
  11291. &lt;p&gt;Overall, going for the standard library is hard and once something lands
  11292. there it should be considered almost written in stone, API-wise. So for
  11293. anything new, I'm sticking to the dub repository as a good testing ground.&lt;/p&gt;
  11294.  
  11295. &lt;p&gt;As part of std, you'd get to make sure your stuff works on all
  11296. platforms, some that you might never use, and indeed std.regex uncovered
  11297. a compiler bug specific to OSX. Needless to say, I had no burning desire
  11298. to buy a Mac just to debug and fix it, so it was an intriguing session
  11299. of wild guesses with exchanges of printouts over email.&lt;/p&gt;
  11300.  
  11301. &lt;p&gt;&lt;b&gt;Q: What D code have you written outside of std.regex and how was the
  11302. experience?&lt;/b&gt;&lt;/p&gt;
  11303.  
  11304. &lt;p&gt;A: Well, back in 2010 I was so fond of D2 that I neglected its alpha
  11305. quality and did my research project in it.&lt;/p&gt;
  11306.  
  11307. &lt;p&gt;The subject was yet another solution to the so-called SLAM problem,
  11308. which stands for Simultaneous Localization and Mapping, a process
  11309. whereby a mobile robot updates its knowledge of its surroundings and
  11310. then its location in there.  I have to say fighting bugs in the compiler
  11311. and OpenGL bindings wasn't quite pleasant, but the thing (emulator,
  11312. mapper and a controller for the real robot) did work and I've published
  11313. the (mediocre) paper on the method.&lt;/p&gt;
  11314.  
  11315. &lt;p&gt;Since std.regex, I write either libraries or tiny scripts. Part of the
  11316. reason is I need a lot of missing building blocks or I simply have to do
  11317. it in some other language.  Secondly, I've found joy in building
  11318. tools (libraries) to see what others can achieve with it and IMO D has
  11319. what it takes to create awesome libraries.&lt;/p&gt;
  11320.  
  11321. &lt;p&gt;Another sizable library I did was a spin-off of std.regex, which is now
  11322. known as std.uni.  Again designed during GSOC 2012, admittedly it didn't
  11323. enjoy any of std.regex's popularity, I think it might be because Unicode
  11324. is the kind of stuff that nobody wants to know deep enough or be
  11325. bothered to use beyond the basics. Still, I'm quite proud of the packed
  11326. Trie data structures for character classification that I implemented in
  11327. there.&lt;/p&gt;
  11328.  
  11329. &lt;p&gt;I built a bunch of text processing utilities in D, with heavy use of
  11330. std.regex.  Among recent stuff, I published a tiny tool called gchunt,
  11331. which post-processes the compiler's -vgc output and then &amp;quot;parses&amp;quot; D code
  11332. backwards to highlight functions that contain GC usage and produces a
  11333. wiki page with a kind of checklist for the developer.&lt;/p&gt;
  11334.  
  11335. &lt;p&gt;&lt;b&gt;Q: Please tell us about yourself: who you are and where you're from,
  11336. what programming languages you used before D, and take us from your
  11337. experience first discovering and using D to getting involved with
  11338. std.regex, specifically what it was about redoing regex that attracted you.&lt;/b&gt;&lt;/p&gt;
  11339.  
  11340. &lt;p&gt;A: I'm a Russian D enthusiast, a postgraduate student and CS researcher
  11341. (~hacker) with broad areas of interest. The highlights being AI
  11342. techniques, robotics, compiler construction, parallel and concurrent
  11343. programming, networking and distributed systems. My BSc is applied
  11344. physics and math, even though I started programming as a kid and enjoy
  11345. it ever since.  Later on, I finally switched over and completed CS MSc.&lt;/p&gt;
  11346.  
  11347. &lt;p&gt;I think the first remotely interesting programs I wrote was in Turbo
  11348. Pascal for DOS, I also messed with x86 assembly.  Then came C on FreeBSD
  11349. at my school, the first capable program a full-fledged archiver with a
  11350. couple of algorithms: LZW or BWT + arithmetic coding.&lt;/p&gt;
  11351.  
  11352. &lt;p&gt;The first language I decided to truly master was C++. Oh boy, what a
  11353. choice, but being young, stubborn and stupid has its benefits.  Looking
  11354. back, I had to learn low-level stuff: stack, heap, OS interfaces and
  11355. what a dangling pointer feels like.  At the same time, I've come to
  11356. appreciate the power of good abstractions - ADT, RAII, operator
  11357. overloading, templates and generic programming, separation of concerns
  11358. as in e.g. STL's algorithms + iterators combo.&lt;/p&gt;
  11359.  
  11360. &lt;p&gt;Around the same time, I played with Python (2.3 I think) and loved its
  11361. easy exploratory nature, yet despised the lack of low-level access to
  11362. the OS and all the magic built-ins it relied on.&lt;/p&gt;
  11363.  
  11364. &lt;p&gt;My first criterion for my language of choice was to be expressive enough
  11365. to let the programmer extend existing primitives and implement new ones
  11366. with usability on par with the built-ins.  The second one is to be
  11367. low-level enough to efficiently implement itself, or more generally
  11368. leave no room below itself for anything but assembly.  The third one is
  11369. that the language must help the programmer to set constraints (types or
  11370. otherwise) to catch most &amp;quot;unforced&amp;quot; mistakes before runtime.&lt;/p&gt;
  11371.  
  11372. &lt;p&gt;I think the first time I stumbled upon D was around 2007 and the
  11373. impression I got is a native Java/C# wannabe and I summarily dismissed
  11374. it.  It wasn't until 2010, following a year or two of heavy (ab)use of
  11375. modern C++ design, when I finally got fed up with C++.  At that time, D2
  11376. was hot in the forge, hot and bubbling with all manner of cool features.
  11377. Frankly, I think Andrei Alexandrescu's work on ranges featured on the
  11378. front page is what got me sold.&lt;/p&gt;
  11379.  
  11380. &lt;p&gt;The first thing I tried was to port my toy C++ 2D game engine to D, it
  11381. went surprisingly well. I cut the code size by half, the header files
  11382. were gone, and there was a feeling of succinctness about the end result
  11383. that I especially loved. That toy stuff is still somewhere on my drive,
  11384. though it would hardly compile with the latest D compiler.  I think it
  11385. broke on ~DMD 2.049. ;)&lt;/p&gt;
  11386.  
  11387. &lt;p&gt;Closer to the end of 2010, I got involved with the newsgroup
  11388. discussions, prior to that only reading the archives.  Following my
  11389. interest in compilers at the university, I digged up DMDScript-  a
  11390. JavaScript interpreter written in D- and first ported it from D1, then
  11391. hacked on it to improve its correctness to the max. That work was merged
  11392. upstream and it compiles with latest D, though hardly a match for modern
  11393. JS engines:&lt;/p&gt;
  11394.  
  11395. https://github.com/DigitalMars/DMDScript/commits/master
  11396.  
  11397. &lt;p&gt;My passion for writing parsers/lexers hadn't burned out and in 2011, as
  11398. D migrated to Github, I picked up on std.regex. It was in a remarkably
  11399. sorry state - not only did it have problems with Unicode but the logic
  11400. inside surprisingly wasn't quite regular expressions at all.  I started
  11401. fixing it and even pushed in a few patches that made it that much closer
  11402. to being correct.  Then I came to the realization that it'd be simpler
  11403. to just scrap it and write my own grand thing that's better, faster,
  11404. harder, perhaps as a stand-alone library.&lt;/p&gt;
  11405.  
  11406. &lt;p&gt;About the same time, D got accepted into Google's Summer of Code (GSoC).
  11407. I had a wild thought - I'm an MSc student, I love D, and would love to
  11408. experiment with regex engines.  So I wrote a GSoC proposal to replace
  11409. the std one, presenting the benefits as best as I could. It was a bit of
  11410. a gamble, and I certainly had no idea what I was getting myself into.
  11411. Following an interview, I was chosen for one of 3 slots dlang had.  And
  11412. there I was, coding my open source thing in my language of choice and
  11413. earning some bucks in the process.  The whole situation felt too good to
  11414. be true.&lt;/p&gt;
  11415.  
  11416. &lt;p&gt;That GSoC was a particularly fantastic experience for me, largely thanks
  11417. to Fawzi Mohamed, my primary mentor. Our fruitful discussions preceded
  11418. most of the key decisions in the current std.regex design.  Not to
  11419. diminish the work of others - all in all, I believe we had  a brilliant
  11420. team of mentors, working with them added a thrill to the process.&lt;/p&gt;
  11421.  
  11422. &lt;p&gt;&lt;b&gt;Q: Do you make money writing D?  What do you do for a living?&lt;/b&gt;&lt;/p&gt;
  11423.  
  11424. &lt;p&gt;A: I might be one of the first guys to earn some coin with modern D
  11425. (D2), due to the Google sponsorship during GSoC.  Getting back to real
  11426. life, I haven't done anything in D that would cover any of my bills. In
  11427. a way, D affected all of my work, being a constant source of inspiration
  11428. for good design.&lt;/p&gt;
  11429.  
  11430. &lt;p&gt;At the moment, I'm working as CTO in a tiny web-app startup that is yet
  11431. to launch our product in the wild.  A shaky position to say the least
  11432. and full of challenges, especially when combined with PhD studies.  Of
  11433. course, I've sneaked some D into the camp in the form of a few tools
  11434. here and there, but at large the stack is Scala/Spray for REST services
  11435. + Python/Django for the user interface.&lt;/p&gt;
  11436.  
  11437. &lt;p&gt;Why not D?  The reasons are many, and for starters the performance of
  11438. D's HTTP app servers is not that good, nor as stable as that of mature
  11439. JVM ones.  Even leaving aside performance, no memory leaks or heap/stack
  11440. corruption is another good side of JVM that we wholly enjoy.&lt;/p&gt;
  11441.  
  11442. &lt;p&gt;&lt;b&gt;Q: What's left for std.regex?&lt;/b&gt;&lt;/p&gt;
  11443.  
  11444. &lt;p&gt;There are many aspects to highlight. I'll do a broad picture with a few
  11445. examples.&lt;/p&gt;
  11446.  
  11447. &lt;p&gt;Capabilities:&lt;/p&gt;
  11448. &lt;p&gt;- Ability to use different alphabets, including user-defined character types&lt;/p&gt;
  11449. &lt;p&gt;- Adding custom atoms, that is being able to save say
  11450. [a-zA-Z_][a-zA-Z0-9_]* as id, and reuse it in other patterns as e.g. {:id}&lt;/p&gt;
  11451. &lt;p&gt;- Matching multiple patterns at once, to make it suitable as a quick and
  11452. dirty lexer&lt;/p&gt;
  11453. &lt;p&gt;- More convenience, e.g. scanf-style primitive that uses patterns
  11454. instead of %* specifiers&lt;/p&gt;
  11455. &lt;p&gt;- An API to build patterns of regex without messing with strings and
  11456. parsing of such&lt;/p&gt;
  11457.  
  11458. &lt;p&gt;Optimizations: there are plenty, including something I've never heard
  11459. implemented elsewhere.  The key one is to remove decoding of UTF and
  11460. match directly on the encoded chars: this required significant ground
  11461. work in std.uni that is now done.&lt;/p&gt;
  11462.  
  11463. &lt;p&gt;A more accessible example would be what I call a fence-post
  11464. optimization.  In a nutshell, for each contiguous set of braces, it
  11465. suffices to only store one index.  For example, in
  11466. (([a-z]*)([0-9]*))([a-z]*), it's sufficient to save only 4 indices
  11467. internally (fence posts).  This would save a lot of memory, making the
  11468. rest that much hotter in the CPU cache.  The mapping between these 4
  11469. indices and the 5 start-end pairs (counting the whole match) for groups
  11470. is required only at the very end, and thus may be done with a lookup
  11471. table at virtually no cost.&lt;/p&gt;
  11472.  
  11473. &lt;p&gt;Meanwhile, the architecture of std.regex has to be improved, it has
  11474. accumulated some hacks and necessary evils.  Also, I believe it could be
  11475. split into clean composable pieces that an advanced user of the library
  11476. may use to construct and fine-tune his own flavor of the engine.&lt;/p&gt;
  11477.  
  11478. &lt;p&gt;I'm still considering going for a universal PEG parser before putting
  11479. all that effort into std.regex, as I have a good hunch that it's both
  11480. simpler for the end-user and more powerful.  And it can be made
  11481. exceptionally fast with CTFE, which is intriguing...&lt;/p&gt;
  11482.  
  11483. &lt;p&gt;&lt;b&gt;Q: What do you love about D?  Hate?  This is more general than the
  11484. specific std.regex-related question above.&lt;/b&gt;&lt;/p&gt;
  11485.  
  11486. &lt;p&gt;A: It's more of an addiction than love.  And I suffer from withdrawal
  11487. when programming in other languages. ;)&lt;/p&gt;
  11488.  
  11489. &lt;p&gt;While doing some work in C+11 recently, I've found that I'm completely
  11490. hooked on the many minor comforts D brings to the table: clean
  11491. polymorphic lambdas, simple fixed integer types, _ as in 1_000_000
  11492. numeric literals, default initialization, UFCS, a clean syntax for
  11493. templates, nested functions, built-in strings.  To wit, all of these in
  11494. isolation are minor and don't enable anything new, but combined however
  11495. it translates to big-time savings, especially on my nerves.  Another
  11496. part of the addiction is that in D, the boilerplate to just get
  11497. something running is very low, much like any scripting language out
  11498. there - a bunch of &amp;quot;import this and that&amp;quot; and you are ready to roll.
  11499. I'd even say I'm more productive with D even on small programs than with
  11500. dynamic languages _because_ of type safety.&lt;/p&gt;
  11501.  
  11502. &lt;p&gt;The other part is that I love things that go meta, as in generic
  11503. programming, meta-programming and naturally, code generators.  Striving
  11504. to express concepts concisely is in our human nature, much as getting
  11505. bored of pointless repetition.  D does deliver lots of tools to produce
  11506. high-quality, concise code that performs well, be it simple array slices
  11507. or mixin templates or the uber combo of UDA's + CTFE + mixins.  Many
  11508. great library designs are enabled by unique D features like opDispatch,
  11509. multiple subtyping with &lt;tt&gt;alias this&lt;/tt&gt; is bound to enable even more.&lt;/p&gt;
  11510.  
  11511. &lt;p&gt;Hate... There is not much I really &amp;quot;hate,&amp;quot; but there are some decisions
  11512. in D's design that I do not believe carry their weight or are even good
  11513. enough.  But I'll leave out the minor stuff and matters of taste and
  11514. focus on the big-picture matters with concrete examples.&lt;/p&gt;
  11515.  
  11516. &lt;p&gt;The big theme is the schizophrenic nature of certain language features
  11517. (partly due to &amp;quot;forced&amp;quot; evolution since the D1 days).&lt;/p&gt;
  11518.  
  11519. &lt;p&gt;For instance, a class is a reference type that cannot have a mutable
  11520. reference with an immutable payload, unlike a pointer.  Generally,
  11521. immutable and classes don't mix well, immutable and struct postblit
  11522. don't mix well.  Similarly, there is a whole synchronized statement
  11523. dedicated to synchronizing on an object's monitor field, keeping in mind
  11524. that objects are thread-local by default in D2 anyway(!).  Some stuff
  11525. even the compiler seems to be confused about, e.g. &lt;tt&gt;static opCall&lt;/tt&gt; vs
  11526. constructor.  There is opApply (internal iteration) vs range API
  11527. (external iteration), which simply don't mix.  Template constraints
  11528. versus specialization:&lt;/p&gt;
  11529.  
  11530. &lt;pre class=&quot;d_code&quot;&gt;func(T)(T a) &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;is&lt;/font&gt;(T : &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)){ ... } versus func(T:&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;)(T a) { ... }
  11531. &lt;/pre&gt;
  11532.  
  11533. &lt;p&gt;Then there is &lt;tt&gt;inout&lt;/tt&gt; - a wildcard for type qualifiers, aiming to solve
  11534. the mutable/const/immutable code bloat/boilerplate for virtual functions
  11535. (a narrow goal for a new qualifier). The end result (to me) is that it
  11536. wrecks havoc both in templates instantiated with inout(T) types as well
  11537. as making things messy when it occurs more than twice in an expression:&lt;/p&gt;
  11538.  
  11539. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; C {
  11540.     &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; func(A,B)(&lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt;(A)[] a, &lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt;(B) &lt;font color=&quot;blue&quot;&gt;function&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt;(B)[]) fn)
  11541.     &lt;font color=&quot;blue&quot;&gt;inout&lt;/font&gt; { &lt;font color=&quot;green&quot;&gt;// which qualifier - A's or B's is copied here, is it the same? I can add even more inouts
  11542. &lt;/font&gt;         &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; X(T){ T value; }
  11543.         X!(&lt;font color=&quot;blue&quot;&gt;typeof&lt;/font&gt;(a[0])) x;  &lt;font color=&quot;green&quot;&gt;// boom, something is simply not defined to work (yet?)
  11544. &lt;/font&gt;         &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; x.value;
  11545.     }
  11546. }
  11547. &lt;/pre&gt;
  11548.  
  11549. &lt;p&gt;Not to bring delegates into the mix, another pre-D2 feature that has
  11550. unresolved problems with type qualifiers.  TLS by default in D2 is
  11551. muddied by the GC kicking in to call dtors for your objects, adding
  11552. races to your originally race-free code (that is fixable in the D
  11553. runtime though).&lt;/p&gt;
  11554.  
  11555. &lt;p&gt;Another of my issues with D are the rigid functional features: very few
  11556. of the syntactic forms are extensible by the user.  The good guys are
  11557. &amp;quot;if,&amp;quot; works with a type that has opCast(T:bool); &amp;quot;foreach,&amp;quot; works with any
  11558. range or something that can be sliced to get a range.  On the other
  11559. hand, both kinds of &amp;quot;switch&amp;quot; are limited to built-in types, and closures
  11560. are fixed to the GC allocator.  Same with associative arrays, fixed,
  11561. while it would be better if it were pluggable.  &amp;quot;new&amp;quot; is probably the
  11562. most disappointing keyword, as that just means &amp;quot;allocated by the GC,&amp;quot; a
  11563. non-extensible notion; &amp;quot;delete&amp;quot; even more so, but that is to be phased
  11564. out.  The fixed-functional RTTI with TypeInfo and Object.factory one
  11565. cannot opt out from (again D1-originated).&lt;/p&gt;
  11566.  
  11567. &lt;p&gt;Finally, let me close this by saying that some of the above is fixable
  11568. in the runtime or language.  The last time I truly hated something about
  11569. D, it has usually been a compiler bug that prevented my next shiny
  11570. library artifact from working as designed.  It's very frustrating to
  11571. have something perfectly modeled in D, yet not working because of some
  11572. defect in the compiler's implementation. :)&lt;/p&gt;
  11573.  
  11574. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  11575. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  11576. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11577. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11578. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  11579. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  11580. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11581. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  11582. &lt;/li&gt;&lt;/ul&gt;
  11583.  
  11584.  
  11585. &lt;/div&gt;
  11586. </description></item><item><title>Issue #23</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jun-21.html</link><guid>http://arsdnet.net/this-week-in-d/jun-21.html</guid><pubDate>Sun, 21 Jun 2015 12:00:00 GMT</pubDate><description>
  11587. &lt;div id=&quot;body-container&quot;&gt;
  11588. &lt;h1&gt;
  11589. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  11590. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  11591. &lt;span id=&quot;title-date&quot;&gt;June 21, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  11592.  
  11593.  
  11594. &lt;div id=&quot;preface&quot;&gt;
  11595.  
  11596. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  11597.  
  11598. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  11599.  
  11600. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  11601.  
  11602. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  11603.  
  11604. &lt;/div&gt;
  11605.  
  11606. &lt;h2&gt;Statistics&lt;/h2&gt;
  11607.  
  11608. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-06-15&amp;amp;chfieldto=2015-06-21&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;10 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11609. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-06-15&amp;amp;chfieldto=2015-06-21&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;14 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11610. 33 pull requests merged into the language:
  11611.  
  11612. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-15..2015-06-21&quot;&gt;9 into DMD&lt;/a&gt;,
  11613. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-15..2015-06-21&quot;&gt;21 into Phobos&lt;/a&gt;, and
  11614. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-15..2015-06-21&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11615. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-15..2015-06-21&quot;&gt;11 pull requests merged into the website.&lt;/a&gt;
  11616. &lt;/li&gt;&lt;/ul&gt;
  11617.  
  11618. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  11619.  
  11620. &lt;p&gt;DConf 2015 happened recently! Over 30 men gathered in person at Utah Valley University for about nine hours a day over three days to discuss D, with the majority of the conference also being livestreamed over Youtube to many other people.&lt;/p&gt;
  11621.  
  11622. &lt;p&gt;The conference was also professionally recorded and those videos will be made available later, once editing is finished. This is underway now and they expect to start releasing them shortly.&lt;/p&gt;
  11623.  
  11624. &lt;p&gt;Until then, the livestream has been chopped up on youtube by a user: &lt;a href=&quot;http://forum.dlang.org/thread/writdfchrfxvxiyumekp@beta.forum.dlang.org&quot;&gt;DConf 2015: Individual talk videos from the livestream&lt;/a&gt;&lt;/p&gt;
  11625.  
  11626. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; summarized the Wednesday morning session last week. This week, we'll continue our coverage.&lt;/p&gt;
  11627.  
  11628. &lt;h3&gt;Wednesday Morning Session&lt;/h3&gt;
  11629.  
  11630. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/may-31.html&quot;&gt;May 31's issue&lt;/a&gt;.&lt;/p&gt;
  11631.  
  11632. &lt;h3&gt;Wednesday Afternoon Session&lt;/h3&gt;
  11633.  
  11634. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/jun-07.html&quot;&gt;June 7's issue&lt;/a&gt;.&lt;/p&gt;
  11635.  
  11636. &lt;h3&gt;Thursday Sessions&lt;/h3&gt;
  11637.  
  11638. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/jun-14.html&quot;&gt;last week's issue&lt;/a&gt;.&lt;/p&gt;
  11639.  
  11640. &lt;h3&gt;Friday Morning Session&lt;/h3&gt;
  11641.  
  11642. &lt;p&gt;DConf 2015 was a three day event, ending on Friday after six more talks. Friday morning kicked off with &lt;b&gt;Andrei Alexandrescu&lt;/b&gt; delivering his mysterious sounding talk labeled Generic Programming Must Go. See his &lt;a href=&quot;http://dconf.org/2015/talks/alexandrescu.pdf&quot;&gt;slides here&lt;/a&gt;. The talk was mostly prompted by his work on &lt;tt&gt;std.allocator&lt;/tt&gt;.&lt;/p&gt;
  11643.  
  11644. &lt;p&gt;He started by defining generic programming with its pros and cons, saying it is obsessed with naming things. In generic programming, you target generic concepts. &lt;i&gt;Editor's note: this is similar to writing functions taking an interface in Java style object orientation in principle (but different in that the generic programming model statically dispatches, so there's no indirection.)&lt;/i&gt;&lt;/p&gt;
  11645.  
  11646. &lt;p&gt;These concepts have rigid definitions and can explode in names quickly if you try to cover all the variations. Andrei pointed out that ranges tried to be generic - defining &lt;tt&gt;InputRange&lt;/tt&gt;, etc., but quickly needed more fine-grained control, so &lt;tt&gt;hasLength&lt;/tt&gt;, &lt;tt&gt;isInfinite&lt;/tt&gt;, and other variants were added, and it was very good - these can be tested individually rather than trying to define &lt;tt&gt;InputRangeWithLength&lt;/tt&gt; and &lt;tt&gt;InfiniteInputRange&lt;/tt&gt; and all the other variations it implies.&lt;/p&gt;
  11647.  
  11648. &lt;p&gt;He then tied this back into allocators, explaining that they are &amp;quot;high vocabulary&amp;quot;; that is, they have several independent items that can vary, such as alignment, deallocation, reallocation, and more. Working a concept name onto all of these was not practical.&lt;/p&gt;
  11649.  
  11650. &lt;p&gt;&amp;quot;Let's go Descartes&amp;quot;, he said, meaning to throw everything out and try to reason from nothing but first principles, alluding to Descartes' starting point of assuming nothing exists but himself, who must, because if he didn't exist, he could not have this thought in the first place. Andrei then asked what the simplest allocator that could possibly work was, and started rebuilding the idea from there.&lt;/p&gt;
  11651.  
  11652. &lt;p&gt;The simplest allocator just allocates (and has an alignment guarantee, even if it is just &lt;tt&gt;1&lt;/tt&gt;, working on the byte level). It can to a lot more, but that's all it strictly needs. Every other member is optional, and instead of trying to work them all into some kind of generic programming concept or OO tree, Andrei proposes design-by-introspection. That is, code that builds upon the allocators or uses them just checks for the presence of the member and adapts to whether it is there or not.&lt;/p&gt;
  11653.  
  11654. &lt;p&gt;Thus, a level of maximum genericness is achieved and allocators with different capabilities can be combined by looking at their individual components with very little code. Andrei demonstrated this by showing a simple region allocator (returning slices into a stack buffer) and &lt;tt&gt;malloc&lt;/tt&gt; based allocator, then combining them with a fallback allocator.&lt;/p&gt;
  11655.  
  11656. &lt;p&gt;The fallback allocator, by looking for only the minimum methods it needs, can adapt to the best combination of input allocators (or issue a compile error if you ask it to do the impossible).&lt;/p&gt;
  11657.  
  11658. &lt;p&gt;In usage code, if an allocator doesn't have a deallocate method, you don't have to think about it. If it does, you need to call it. This is checked with introspection - can I do this?&lt;/p&gt;
  11659.  
  11660. &lt;p&gt;Andrei showed more code in his slides to demo the idea, how small pieces combine and &lt;tt&gt;static if&lt;/tt&gt; makes the code simple. One thing he said verbally was that the code checks &lt;tt&gt;allocate.length&lt;/tt&gt; rather than &lt;tt&gt;null&lt;/tt&gt; because &lt;tt&gt;allocate(0)&lt;/tt&gt; may legitimately return an empty array rather than null. Checking for the matching length is the simplest thing that works in all cases. An audience member asked about what happens if the allocator over-allocates, and Andrei said if it does, it should return a slice sized to what the caller asked for, so the length will match anyway upon success.&lt;/p&gt;
  11661.  
  11662. &lt;p&gt;Andrei also said the &lt;tt&gt;hasMember&lt;/tt&gt; in his example should check the signature too, to ensure they take the right arguments. &lt;i&gt;Editor's note: I disagree, unless this is done carefully, because checking arguments too can mean a capability gets silently ignored on minor things like a &lt;tt&gt;const&lt;/tt&gt; mismatch. But, we can do this correctly with a bit of library code: if a member exists but has a wrong signature, check that and static assert to reject it. If a member does not exist at all, ignore it, assuming it is intentionally left out because it is optional. That way, we get the introspection win while keeping the best available static checks. Andrei said he agrees that is a good approach when I talked to him about it after the talk.&lt;/i&gt;&lt;/p&gt;
  11663.  
  11664. &lt;p&gt;Bottom line of the talk: concepts and traditional generic programming fail because they explode with combinations on lots of inputs. Static introspection with boolean constraints in &lt;tt&gt;static if&lt;/tt&gt; win in this case - thus, design by introspection is Andrei's killer new approach to generic programming.&lt;/p&gt;
  11665.  
  11666.  
  11667. &lt;hr /&gt;
  11668.  
  11669. &lt;p&gt;After Andrei (who thankfully went over his time, taking the pressure off short-on-material me :-D ) finished, &lt;b&gt;Adam Ruppe&lt;/b&gt; (yea, even this editor!) went to the lectern talk a little on implementing a dynamic type in D. You can see my slides &lt;a href=&quot;http://dconf.org/2015/talks/ruppe.pdf&quot;&gt;here as a PDF&lt;/a&gt; or &lt;a href=&quot;http://arsdnet.net/dcode/slides.html&quot;&gt;here as HTML&lt;/a&gt;.&lt;/p&gt;
  11670.  
  11671. &lt;p&gt;My key point was to say that the same D language I talked about last year for doing low-level kernel code can also write dynamic style code, and I showed some of the language features that can be combined to make a &lt;tt&gt;var&lt;/tt&gt; type.&lt;/p&gt;
  11672.  
  11673. &lt;p&gt;I started with a very basic background on what typing is: the idea that memory just holds numbers, and those numbers have some kind of meaning, some interpretation done by the program.&lt;/p&gt;
  11674.  
  11675. &lt;p&gt;I then tried to roughly break up the myriad of typing systems into two axes: compile time checks vs runtime tags and implicitly coerced vs mismatches-as-error types, putting a few languages into the grid, verbally saying how this is a really fuzzy thing because different techniques may be available in the same language and not all techniques fit on these axes.&lt;/p&gt;
  11676.  
  11677. &lt;p&gt;Throughout the talk, I had a blasphemously religious theme. In that vein at this point, I quoted from the Bible, James 1:5. The picture in the slide is of James Gosling, just a silly joke because his name is James. I said Walter prayed to the great computer for an answer to which language he should work on, and he received an answer where he saw the great computer appear before him and tell him to work on none of them, and instead write D.&lt;/p&gt;
  11678.  
  11679. &lt;p&gt;Walter took the mic to claim my picture of his vision is a photoshop and he could tell because of the pixels. I told him he was wrong, it was a Microsoft Paint!&lt;/p&gt;
  11680.  
  11681. &lt;p&gt;I then explained that D has a superior typing model, with static types, strong checks, convenience and power through inference and templates, and static assert for additional custom checks, all at compile time, and that the system improves each year.&lt;/p&gt;
  11682.  
  11683. &lt;p&gt;Next, I started about doing the opposite of that: implicitly coerced, run time tagged typing in D:&lt;/p&gt;
  11684.  
  11685. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;// this is valid D code!
  11686. &lt;/font&gt;var a = 10;
  11687. var b = &lt;font color=&quot;red&quot;&gt;&amp;quot;20&amp;quot;&lt;/font&gt;;
  11688. var c = a + b;
  11689. var d = json!&lt;font color=&quot;red&quot;&gt;q{ &amp;quot;foo&amp;quot;: { &amp;quot;bar&amp;quot;: 10.2 } }&lt;/font&gt;;
  11690. writeln(d.foo); &lt;font color=&quot;green&quot;&gt;// {&amp;quot;bar&amp;quot;:10.2}
  11691. &lt;/font&gt;d.foo.bar = (var a) =&amp;gt; a ~ b;
  11692. writeln(d.foo.bar()(&lt;font color=&quot;red&quot;&gt;&amp;quot;hello! &amp;quot;&lt;/font&gt;));
  11693. &lt;/pre&gt;
  11694.  
  11695. &lt;p&gt;Of course, this forces us to ask the question: what does D need with a dynamic type? I gave a few ideas: interacting with external APIs, working with binary-stable runtime interfaces, prototyping code, script interaction, and of course, showing off just because we can. The techniques used here can be used in whole or in part for a lot of other programming challenges we can solve with D.&lt;/p&gt;
  11696.  
  11697. &lt;p&gt;I explained the basic technique: a tagged union, and explained how &lt;tt&gt;std.variant&lt;/tt&gt; and my &lt;tt&gt;arsd.jsvar&lt;/tt&gt; use variations on it, then went into the syntax sugar D has to make this easily usable: operator overloading and reflection, primarily.&lt;/p&gt;
  11698.  
  11699. &lt;p&gt;I showed two main troubles I had: one was returning a delegate in a struct that uses local variables and struct variables. To which does the context pointer point, the struct or the stack? To solve this, you can be explicit: make a static nested function that accesses everything it needs through local variables. The other problem was returning a ref to a null: for this, I made a &lt;tt&gt;new var(null)&lt;/tt&gt; and returned it. That generates a lot of garbage, but also works in all cases without needing to write a lot of special cased code.&lt;/p&gt;
  11700.  
  11701. &lt;p&gt;Another technique I showed was looping over a &lt;tt&gt;TypeTuple&lt;/tt&gt; to generate code for a lot of types, by mixing in each bit of code inside a runtime if. In the slide, I called it &lt;tt&gt;CtList&lt;/tt&gt; instead of &lt;tt&gt;TypeTuple&lt;/tt&gt;, but that's the same thing.&lt;/p&gt;
  11702.  
  11703. &lt;p&gt;I also talked about my wish list of language features: I want implicit construction added (though explicit, unlike C++ - an implicit constructor should be marked with the keyword). I believe such a feature ought to be used sparingly, but is useful in some cases, especially when you want to write a struct to completely replace a built in type - without this, &lt;tt&gt;null&lt;/tt&gt; cannot be implicitly cast to a user type.&lt;/p&gt;
  11704.  
  11705. &lt;p&gt;I also mentioned implicit casts back to a static type, but shot it down because I think an explicit cast is better - with type inference, the code is concise anyway.&lt;/p&gt;
  11706.  
  11707. &lt;p&gt;Finally, I said I really want &lt;tt&gt;@property&lt;/tt&gt; to be fixed just to handle the getter returning callable edge case. I don't care about the other issues people have with it on the forums, this one case just needs to be fixed because code is wrong without it.&lt;/p&gt;
  11708.  
  11709. &lt;p&gt;To wrap up, I showed how the dynamic type can easily wrap static types thanks to reflection then expose it to a script engine in just a few lines of code, showing off my half-finished, but basically working in 350 lines of code &lt;a href=&quot;https://github.com/adamdruppe/inspector&quot;&gt;api inspector&lt;/a&gt;.&lt;/p&gt;
  11710.  
  11711. &lt;p&gt;After the talk, I was asked if I made all the Mormon references just because we were in Utah. The answer is no, it was not just because of location: I'm actually a real-life Latter-day Saint, though I can be a bit irreverent at times :).&lt;/p&gt;
  11712.  
  11713. &lt;hr /&gt;
  11714.  
  11715. &lt;p&gt;The third talk of the day was &lt;b&gt;Joseph Wakeling&lt;/b&gt; talking about random number generation. His slides are online &lt;a href=&quot;http://dconf.org/2015/talks/wakeling.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  11716.  
  11717. &lt;p&gt;Joseph discussed some random number theory and compared-and-contrasted D's approach with C++'s, then went right into the difficulty with thinking of pseudo random numbers as ranges: the algorithm is a good match for a forward range, but the semantics are a bit strange: the pass-by-value problem Jonathan discussed in his talk strikes again. It means the seed will be saved and not updated at the top level, which means the same number sequence will occur again in subsequent calls.&lt;/p&gt;
  11718.  
  11719. &lt;p&gt;He pointed out that something similar can happen in C++.&lt;/p&gt;
  11720.  
  11721. &lt;p&gt;He then started discussing solutions: we could reseed the generator each time, but that's verbose. We could also make random a new type of range: one that can save, but generally shouldn't; an input range with forward range capabilities but with a different name, perhaps &lt;tt&gt;dup&lt;/tt&gt; rather than &lt;tt&gt;save&lt;/tt&gt; so it is never done by algorithms which think saving is generally good.&lt;/p&gt;
  11722.  
  11723. &lt;p&gt;Joseph explained that his future direction is to make random a reference range, try to separate the engine from the distribution better, and to implement more distributions like the options C++ offers.&lt;/p&gt;
  11724.  
  11725. &lt;p&gt;In the question section, Dicebot asked: why would you want to save a random number state? Joseph answered you might save the seed when reloading games to help prevent cheating (reloading over and over until you get a better random result), or perhaps to rerun numerical simulations with the same input so you can debug it better. &lt;i&gt;Editor's note: I used to save seeds with games along with timed user input to easily save replay files too. Same input, same algorithm, same output - a small file could store a whole game session that can be watched again for identical results each time.&lt;/i&gt;&lt;/p&gt;
  11726.  
  11727. &lt;p&gt;Dicebot asked: have you considered generator vs range like container vs range? Joseph answered he had considered it a little, but not yet in depth; it is an interesting idea.&lt;/p&gt;
  11728.  
  11729. &lt;p&gt;Steven asked: along those same lines, the nice range interface means people want to use them, so maybe we should change it so it doesn't fit the range and do the wrong thing. He said you can also do &lt;tt&gt;&amp;amp;generator&lt;/tt&gt; and get a range too. Joseph said: that will sometimes work but not always, you probably want reference. Steven: the hard part is make it save because taking the address of a local can easily lead to escaping an invalidated reference.&lt;/p&gt;
  11730.  
  11731. &lt;p&gt;We then broke for lunch.&lt;/p&gt;
  11732.  
  11733. &lt;h3&gt;Friday Afternoon Session&lt;/h3&gt;
  11734.  
  11735. &lt;p&gt;We returned from lunch to hear &lt;b&gt;John Colvin&lt;/b&gt;, a physics grad student, speak about scientific programming in D. &lt;a href=&quot;http://dconf.org/2015/talks/colvin.pdf&quot;&gt;Here are his slides.&lt;/a&gt;&lt;/p&gt;
  11736.  
  11737. &lt;p&gt;He started by explaining that scientific programming is a big area with different fields like simulations, data analysis, and more, and that it is done on a variety of hardware, from low-power microcontrollers up to gigantic supercomputers. It may also have some unique requirements like dealing with custom data formats. John described some of the requirements and status quo for simulations and data analysis in scientific programming, see his slides for a list.&lt;/p&gt;
  11738.  
  11739. &lt;p&gt;John pointed out that many scientific programming is done by scientists who do not consider themselves to be programmers. Even if they spend most their day writing code, programming is not their speciality and they just want to get it done so they can focus more on the science they are really trying to do. As such, they are most interested in easily getting stuff done in a familiar manner to them and would benefit greatly from more task-focused, newbie-friendly tutorials.&lt;/p&gt;
  11740.  
  11741. &lt;p&gt;A problem he pointed out is that as D enthusiasts, our web search results are likely personalized based on our history and give better results to us than it would someone else. He fired up the TOR browser to demonstrated the poorer results and emphasized that having tutorials would be important also to tell people *where* to look to a particular functionality.&lt;/p&gt;
  11742.  
  11743. &lt;p&gt;He also called out the unimplemented array operations (some are implemented, many aren't) as a stumbling block. Array operations look great and familiar, and of course, useful to scientists, but when they aren't implemented it gives them trouble. He also called out the buffer reuse of &lt;tt&gt;byLine&lt;/tt&gt; as being weird for newbies.&lt;/p&gt;
  11744.  
  11745. &lt;p&gt;John then weighed in on D's pros and cons for two general areas of scientific programming: simulations and data analysis.&lt;/p&gt;
  11746.  
  11747. &lt;p&gt;For simulations, he said: D wins because its multidimensional arrays are good enough, performance is excellent, it has good Linux support, foot-shooting protection, and a lot of flexibility. He said it needs better MPI support - a message passing interface used heavily in academia and could use easy libraries. He also said D lacks familiarity and a proven track record to scientists.&lt;/p&gt;
  11748.  
  11749. &lt;p&gt;For data analysis, he said D's performance is a big win, as is its Linux support and flexibility, and its ability to interoperate with other languages and Matlab is good. For Matlab, he pointed out that the C api is pretty easy to use. He said D needs better OS X support, more shared library love, more focus on the GDC compiler for its excellent optimizing capabilities, and some tutorials for working with Matlab, so new people can easily get started with it. He said D lacks a standard multidimensional array with all kinds of slicing, a REPL and something like Python's Notebook integration, and familiarity. The standard multidimensional array is important so other people can write libraries that work together, like the Python community has, and he thinks the repl part might be usable with Python bindings.&lt;/p&gt;
  11750.  
  11751. &lt;p&gt;He attacked D's &lt;tt&gt;real&lt;/tt&gt; type, the 80-bit float, saying it is slow and generally unnecessary. He also said the GC can easily break the benefits of parallel code because of the global lock: slapping &lt;tt&gt;parallel&lt;/tt&gt; on a loop can give big speedups fairly easily if you do everything right, but if you use the GC, it might lock all the threads regularly, negating the multi-core boost. Currently, it is just something you need to be careful about to use correctly for best performance.&lt;/p&gt;
  11752.  
  11753. &lt;p&gt;John said a lot of scientific work works well on GPUs, but the barrier to entry is a bit high. He's working on a library to give D great GPGPU support, using OpenCL.&lt;/p&gt;
  11754.  
  11755. &lt;p&gt;Finally, he pointed out the &lt;a href=&quot;https://github.com/DlangScience DlangScience project&quot;&gt;&lt;/a&gt; which he is running to try to get a variety of tested, vetted, and useful libraries together in an easy to find place. He asked for people's help in getting it better.&lt;/p&gt;
  11756.  
  11757. &lt;hr /&gt;
  11758.  
  11759. &lt;p&gt;Our penultimate speaker was &lt;b&gt;Atila Neves&lt;/b&gt;, talking about testing D with Cucumber. His slides are &lt;a href=&quot;http://dconf.org/2015/talks/neves.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  11760.  
  11761. &lt;p&gt;He started by talking about what tests are: unit tests ought to only touch the CPU and memory, with no outside contact, and D can do this with the built in tests. He introduced us to test-driven development, emphasizing how it is important how tests fail early, but said it doesn't cover everything and more is needed beyond unit tests - higher level tests are needed, and TDD starts to become BDD - behavior driven development, discussing pros and cons of it, including that it is complicated, but tends to lead to less crufty and better tested code.&lt;/p&gt;
  11762.  
  11763. &lt;p&gt;He showed how these tests are written with cucumber, a Ruby framework for behavior driven development, and showed how with the Aruba plugin, we can test D without writing ruby code. His slides have example code.&lt;/p&gt;
  11764.  
  11765. &lt;p&gt;Atila showed his project, &lt;a href=&quot;https://github.com/atilaneves/unencumbered&quot;&gt;Unencumbered&lt;/a&gt;, to allow us to write cucumber test steps in D, using user-defined attributes (UDAs) and compile-time reflection to link them together with code. His slides and the talk showed how it is implemented. His future steps include possibly using lambdas rather than named functions, and maybe getting a D only impl. The code is on dub and github.&lt;/p&gt;
  11766.  
  11767. &lt;p&gt;Dicebok asked: why use cucumber instead of doing it yourself? Atila answered tat he likes the Cucumber model and the reporting tools of offers.&lt;/p&gt;
  11768.  
  11769. $(P Andrei asked about documentation, to which Atila answered there isn't much for the D parts, but since most of it is the same Cucumber used for Ruby and other languages, you can learn that and be in a good position.
  11770.  
  11771. $(P John asked about connecting with built-in unitests, to which Atila said since they don't take parameters, they won't work directly, but you can use regular &lt;tt&gt;assert&lt;/tt&gt; in cucumber tests too, so there's no need for an extra test framework on top.
  11772.  
  11773. &lt;hr /&gt;
  11774.  
  11775. &lt;p&gt;Finally, &lt;b&gt;Erich Gubler&lt;/b&gt;, a UVU student, went to talk about his experience using D for his school projects. His slides are &lt;a href=&quot;http://dconf.org/2015/talks/gubler.pdf&quot;&gt;here&lt;/a&gt;. &lt;i&gt;Editor's note: the live presentation of his things kinda made me dizzy, all kinds of zooming in and out! But his delivery was energetic and positive, very comfortable. He's a better missionary than I am! :P &lt;/i&gt;&lt;/p&gt;
  11776.  
  11777. &lt;p&gt;To finish his undergrad degree, Erich had to write a compiler and virtual machine. He had choice of language and used D to do it after being introduced to it by Chuck Allison, and was left with two overarching feelings: a lot of work goes into the low-level infrastructure we can take for granted, and that D rox! His talk was generally showing just where D rox, with some comparisons to C++.&lt;/p&gt;
  11778.  
  11779. &lt;p&gt;One of the first things he praised was &lt;tt&gt;to!string(some_enum)&lt;/tt&gt;, which converts back and forth from the identifier names in an enum definition:&lt;/p&gt;
  11780.  
  11781. &lt;pre class=&quot;d_code&quot;&gt;  &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; Foo { bar, baz }
  11782.  &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(to!string(Foo.bar) == &lt;font color=&quot;red&quot;&gt;&amp;quot;bar&amp;quot;&lt;/font&gt;);
  11783.  &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(to!Foo(&lt;font color=&quot;red&quot;&gt;&amp;quot;baz&amp;quot;&lt;/font&gt;) == Foo.baz);
  11784. &lt;/pre&gt;
  11785.  
  11786. &lt;p&gt;He showed how short code can get using this. &lt;i&gt;Editor's note: I also used this capability in web code to make convenient whitelists. &lt;tt&gt;enum Options { all, valid, options }&lt;/tt&gt; then use &lt;tt&gt;to!Options(user_string)&lt;/tt&gt; to filter it down to just them - it'd throw an exception if an invalid value was sent automatically. I thought this was so convenient and pretty cool.&lt;/i&gt;&lt;/p&gt;
  11787.  
  11788. &lt;p&gt;He also liked how easy to is to concatenate strings to do more conversions, praising how D removed the obstacles.&lt;/p&gt;
  11789.  
  11790. &lt;p&gt;He gave a tip: when doing a web search, use the string &amp;quot;dlang&amp;quot; instead of just &amp;quot;d&amp;quot; to get better results.&lt;/p&gt;
  11791.  
  11792. &lt;p&gt;Continuing his praise for D and its library, he said Phobos raises the bar compared to C++, and just browsing the documentation was a treat. He said he loves &lt;tt&gt;std.csv&lt;/tt&gt; and that &lt;tt&gt;std.getopt&lt;/tt&gt; was so much nicer to use than GNU getopt that he even ported it back to C++ because he missed it so much outside of D.&lt;/p&gt;
  11793.  
  11794. &lt;p&gt;He said these things are nice because you can get stuff done fast and still optimize later, all in D, and quoted Walter about a fully-functional machine shop on a ship. Erich and Walter said that the time to master comprehensive tools is worth the investment, and D is a fully-loaded shop of comprehensive tools.&lt;/p&gt;
  11795.  
  11796. &lt;p&gt;Erich then praised rdmd for its ease of use, specifically calling out &lt;tt&gt;rdmd -I.. -unittest -main vm.d&lt;/tt&gt; as an easy way to unit test just one file, without worrying so much about building the whole project. Walter chimed in adding that you should use &lt;tt&gt;-cov&lt;/tt&gt; too.&lt;/p&gt;
  11797.  
  11798. &lt;p&gt;Erich pointed out a cool tip: you can trace method calls in a single place: the &lt;tt&gt;invariant() {}&lt;/tt&gt; block, which is automatically called before and after each method call of an object (in non-release builds, it is part of the contract programming support in D). &lt;i&gt;Editor's note: using a stack trace print function, calling &lt;tt&gt;defaultTraceHandler&lt;/tt&gt; like I described near the end of my book, you could print not just calls, but whole stack traces with a single point of modification with the &lt;tt&gt;invariant&lt;/tt&gt; block!&lt;/i&gt;&lt;/p&gt;
  11799.  
  11800. &lt;p&gt;Erich said we shouldn't be afraid to break things in the name of progress, provided an easy transition path, and that D needs to be easy to start with, which is mostly a matter of marketing and tutorials at this point. &lt;i&gt;Editor's note: this is a recurring theme, if you do something new in D, please document it, just write what you did, and send it to me. I'll put any tutorials in This Week in D and will organize them too for easy finding, we just need to write them. They don't even need to be great, just the steps you did can help someone follow in those footsteps later.&lt;/i&gt;&lt;/p&gt;
  11801.  
  11802. &lt;p&gt;His conclusion was that D gets obstacles out of the way and is fully-equipped machine shop... in short, it rox for everything.&lt;/p&gt;
  11803.  
  11804. &lt;hr /&gt;
  11805.  
  11806. &lt;p&gt;That concluded the 2015 D Conference. We loitered for a few more hours talking about our individual work, but there was nothing terribly relevant to write up beyond the big announcement: DConf 2016 will be hosted by Sociomantic in Berlin, Germany next year, and they intend to live stream it properly from the beginning rather than the improvised solution we had this year.&lt;/p&gt;
  11807.  
  11808. &lt;p&gt;I hope you enjoyed these write-ups and encourage you to look through the slides for each talk if you haven't yet, and to watch the videos as they come out. &lt;a href=&quot;https://www.youtube.com/watch?v=znjesAXEEqw&quot;&gt;Walter's is already up&lt;/a&gt; and the UVU channel is getting more as they are finished. I'll mention them here too when they are up. I will also eventually write a full transcript of my talk, like I did &lt;a href=&quot;http://arsdnet.net/annotated-transcript.html&quot;&gt;last year&lt;/a&gt; and plan to have more from other speakers too, so stay tuned!&lt;/p&gt;
  11809.  
  11810. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  11811.  
  11812. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  11813.  
  11814. &lt;h2&gt;In the community&lt;/h2&gt;
  11815.  
  11816. &lt;h3&gt;Community announcements&lt;/h3&gt;
  11817.  
  11818. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zfkbzcnodbimwlpbwgph@forum.dlang.org&quot;&gt;Berlin D Meetup June 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/irpozgcnfqppjkeggzug@forum.dlang.org&quot;&gt;Tested atom plugin&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wywilitxawppuqfuqoky@forum.dlang.org&quot;&gt;Walter, Brian, and Daniel's DConf 2015 talks are up&lt;/a&gt;
  11819. &lt;/li&gt;&lt;/ul&gt;
  11820.  
  11821. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  11822.  
  11823. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  11824.  
  11825. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tnzujgocuuvmkdqdsjmm@forum.dlang.org&quot;&gt;D could catch this wave: web assembly&lt;/a&gt; talked about the new web assembly proposal out of the browser vendors and how D might use it. With ldc, D already has some emscripten support, and there's inerest in expanding this and getting in early on the web assembly when it is implemented. The thread also had a lot of side discussion about web apps and computer form factors.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mlqla5$bq3$1@digitalmars.com&quot;&gt;Martin Nowak is officially MIA&lt;/a&gt; was a misunderstanding of a thread brought on because Martin was on vacation and Andrei didn't know. The thread became a bit of a flamewar, but the result was that Martin was perfectly OK and Andrei apologized for overreacting. He did ask that major contributors let other contributors know when they won't be available for a long time, and they may start having regular virtual meetings going forward to stay on the same page, keeping releases happen smoothly.
  11826. &lt;/li&gt;&lt;/ul&gt;
  11827.  
  11828. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  11829.  
  11830.  
  11831. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  11832. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  11833. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11834. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11835. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  11836. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  11837. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11838. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  11839. &lt;/li&gt;&lt;/ul&gt;
  11840.  
  11841.  
  11842. &lt;/div&gt;
  11843. </description></item><item><title>Issue #22</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jun-14.html</link><guid>http://arsdnet.net/this-week-in-d/jun-14.html</guid><pubDate>Sun, 14 Jun 2015 12:00:00 GMT</pubDate><description>
  11844. &lt;div id=&quot;body-container&quot;&gt;
  11845. &lt;h1&gt;
  11846. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  11847. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  11848. &lt;span id=&quot;title-date&quot;&gt;June 14, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  11849.  
  11850.  
  11851. &lt;div id=&quot;preface&quot;&gt;
  11852.  
  11853. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  11854.  
  11855. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  11856.  
  11857. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  11858.  
  11859. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  11860.  
  11861. &lt;/div&gt;
  11862.  
  11863. &lt;h2&gt;Statistics&lt;/h2&gt;
  11864.  
  11865. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-06-08&amp;amp;chfieldto=2015-06-14&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11866. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-06-08&amp;amp;chfieldto=2015-06-14&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;32 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  11867. 37 pull requests merged into the language:
  11868.  
  11869. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-08..2015-06-14&quot;&gt;12 into DMD&lt;/a&gt;,
  11870. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-08..2015-06-14&quot;&gt;21 into Phobos&lt;/a&gt;, and
  11871. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-08..2015-06-14&quot;&gt;4 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  11872. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-08..2015-06-14&quot;&gt;10 pull requests merged into the website.&lt;/a&gt;
  11873. &lt;/li&gt;&lt;/ul&gt;
  11874.  
  11875. &lt;h2&gt;Major Changes&lt;/h2&gt;
  11876.  
  11877. &lt;p&gt;There was a big effort last week to clean up bugzilla, closing old D1 bugs as it is no longer supported. &lt;a href=&quot;http://forum.dlang.org/thread/ml5tr4$1na4$1@digitalmars.com&quot;&gt;Summer cleanup on https://issues.dlang.org&lt;/a&gt;&lt;/p&gt;
  11878.  
  11879. &lt;p&gt;A new version of the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum&lt;/a&gt; went live.&lt;/p&gt;
  11880.  
  11881. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  11882.  
  11883. &lt;p&gt;DConf 2015 happened recently! Over 30 men gathered in person at Utah Valley University for about nine hours a day over three days to discuss D, with the majority of the conference also being livestreamed over Youtube to many other people.&lt;/p&gt;
  11884.  
  11885. &lt;p&gt;The conference was also professionally recorded and those videos will be made available later, once editing is finished. This is underway now and they expect to start releasing them shortly.&lt;/p&gt;
  11886.  
  11887. &lt;p&gt;Until then, the livestream has been chopped up on youtube by a user: &lt;a href=&quot;http://forum.dlang.org/thread/writdfchrfxvxiyumekp@beta.forum.dlang.org&quot;&gt;DConf 2015: Individual talk videos from the livestream&lt;/a&gt;&lt;/p&gt;
  11888.  
  11889. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; summarized the Wednesday morning session last week. This week, we'll continue our coverage.&lt;/p&gt;
  11890.  
  11891. &lt;h3&gt;Wednesday Morning Session&lt;/h3&gt;
  11892.  
  11893. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/may-31.html&quot;&gt;May 31's issue&lt;/a&gt;.&lt;/p&gt;
  11894.  
  11895. &lt;h3&gt;Wednesday Afternoon Session&lt;/h3&gt;
  11896.  
  11897. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/jun-07.html&quot;&gt;last week's issue&lt;/a&gt;.&lt;/p&gt;
  11898.  
  11899. &lt;h3&gt;Thursday Morning Session&lt;/h3&gt;
  11900.  
  11901. &lt;p&gt;Day 2 of Dconf 2015 started off with &lt;b&gt;Chuck Allison&lt;/b&gt; talking about his long work with C++ and how it brought him to D. &lt;a href=&quot;http://dconf.org/2015/talks/allison.pdf&quot;&gt;Here are his slides.&lt;/a&gt;&lt;/p&gt;
  11902.  
  11903. &lt;p&gt;Chuck started by showing some of his long history with C++, including books he has published, and mentioned that he was an early adopter of Zortech C++, written by Walter Bright, and on the C++ standards committee. Chuck also mentioned how Walter and Andrei Alexandrescu kept popping up in the C++ world over the years too.&lt;/p&gt;
  11904.  
  11905. &lt;p&gt;One amusing anecdote he relayed was how Walter, at an early tech conference, gave a slideless talk using hand-written transparencies on an overhead projector.&lt;/p&gt;
  11906.  
  11907. &lt;p&gt;Chuck also mentioned some of Java's successes &lt;i&gt;Editor's note: Walter Bright was also in Java commercially for a while, writing a compiler for it too.&lt;/i&gt; and segued into D, mentioning how Walter gave a talk about it back in 2004 which intrigued Chuck.&lt;/p&gt;
  11908.  
  11909. &lt;p&gt;Throughout his talk, Chuck used a website to ask for audience participation. The padlet urls in his slides are where people went to write very quick notes - more like pasting tags onto a canvas - to contribute some thoughts. One of these were asking what people like about D.&lt;/p&gt;
  11910.  
  11911. &lt;p&gt;The summary of what Chuck likes about D is that it covers all the bread and butter needs conveniently with a number of language and library features. He also specifically called out fibers as coroutines as cool too, and commented that ranges are very cool. He called D a &amp;quot;nuclear reactor included&amp;quot; language, comparing to Python's &amp;quot;batteries included&amp;quot; slogan.&lt;/p&gt;
  11912.  
  11913. &lt;p&gt;He ended with a list of D tools, again returning to padlet to get audience input, and praised &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;D books&lt;/a&gt;.&lt;/p&gt;
  11914.  
  11915. &lt;hr /&gt;
  11916.  
  11917. &lt;p&gt;The second talk was scheduled to be Martin Nowak about garbage collection, but due to a last-minute complication, he was unable to attend.&lt;/p&gt;
  11918.  
  11919. &lt;p&gt;Instead, five other speakers volunteered to give lightning talks in his place.&lt;/p&gt;
  11920.  
  11921. &lt;p&gt;&lt;b&gt;Lightning talk #1&lt;/b&gt; &lt;i&gt;Editor's note: sorry, I forgot to write down who was speaking and I don't remember!&lt;/i&gt; talked about code coverage with &lt;tt&gt;dmd -cov&lt;/tt&gt;. One trick he noted was &lt;tt&gt;dmd_coverDestPath(&amp;quot;dir&amp;quot;);&lt;/tt&gt;, a magic function available if you declare the interface, could be called to change the path where the coverage report is written.&lt;/p&gt;
  11922.  
  11923. &lt;p&gt;&lt;b&gt;Lightning talk #2&lt;/b&gt; was given by me, Adam D. Ruppe, and very briefly discussed &lt;i&gt;This Week in D&lt;/i&gt;! My slides are &lt;a href=&quot;http://arsdnet.net/dcode/lightning-slides.html&quot;&gt;available as HTML&lt;/a&gt;.&lt;/p&gt;
  11924.  
  11925. &lt;p&gt;I talked about the process behind This Week in D - that is is mostly ad hoc, I use a ddoc template each week but collect the links by hand and write the commentary based on my experience being a frequent reader and contributer to the forums over about eight years now.&lt;/p&gt;
  11926.  
  11927. &lt;p&gt;I boasted of myself and had slight criticism for the ddoc syntax, namely that $ is an unfortunate macro symbol because of how common it is in other usage, but hey, it is good enough.&lt;/p&gt;
  11928.  
  11929. &lt;p&gt;Andrei mentioned that there's a &lt;tt&gt;DDOC_UNDEFINED_MACRO&lt;/tt&gt; you can define to expand in cases where a macro is unknown, to avoid it being silently disappeared. I said the problem with that is that it is opt in and me, being a programmer, am lazy and tend to use defaults. It is worth using that in your macro file though to catch typos!&lt;/p&gt;
  11930.  
  11931. &lt;p&gt;Finally, I asked people to contribute their content to me! My email address is in each issue of This Week in D, and you can catch me on IRC as either adam_d_ruppe or destructionator (depending on which client I'm using at the time) and I'm usually willing to chat about just about anything.&lt;/p&gt;
  11932.  
  11933. &lt;p&gt;&lt;b&gt;Lightning Talk #3&lt;/b&gt; was given by Lionello Lunesu and mentioned value range propagation across statements and inside if statements, for example &lt;tt&gt;if(a &amp;lt; 256) { ubyte b = a; /* could work with cross-statement VRP */ }&lt;/tt&gt;, and also signed/unsigned comparisons and the pitfalls they bring.&lt;/p&gt;
  11934.  
  11935. &lt;p&gt;&lt;b&gt;Lightning Talk #4&lt;/b&gt; was Erik Smith discussing the outline of his &lt;a href=&quot;http://forum.dlang.org/thread/tntdmenolholueyxwgil@forum.dlang.org#post-tntdmenolholueyxwgil:40forum.dlang.org&quot;&gt;std.database proposal&lt;/a&gt;, which you can also read about on the forum. He told me this weekend that he is making progress and expects to have more to show in another week or so - it has already integrated ODBC support and direct support for native drivers is coming soon.&lt;/p&gt;
  11936.  
  11937. &lt;p&gt;Finally, &lt;b&gt;Lightning Talk #5&lt;/b&gt; was Walter Bright talking about doing stuff with the language as it is, focusing on the &lt;tt&gt;std.typecons.octal&lt;/tt&gt; pattern, calling out the trick of converting an int to a string then back to an int to create a &lt;a href=&quot;http://www.drdobbs.com/tools/user-defined-literals-in-the-d-programmi/229401068&quot;&gt;user-defined literal&lt;/a&gt; &lt;i&gt;editor's note: Walter often credits me with conceiving this pattern, and while I wrote the main implementation and innovated the &lt;tt&gt;octal!int&lt;/tt&gt; overload, the original idea was Andrei Alexandrescu's. He did credit Andrei in the spoken talk too, but not in the written article&lt;/i&gt;.&lt;/p&gt;
  11938.  
  11939. &lt;p&gt;With the user-defined literal pattern, it is also possible to make new types like &lt;a href=&quot;http://digitalmars.com/sargon/halffloat.html&quot;&gt;halffloat&lt;/a&gt; in the library with a fairly natural syntax - showing D's extensibility and flexibility.&lt;/p&gt;
  11940.  
  11941. &lt;p&gt;I took the mic temporarily to mention that while std.conv.octal is a cool pattern, I rarely actually use it because it has too big of an import graph - std.conv brings in a lot of code for just an octal literal, which affects build times and binary sizes. This is something we can fix by writing more independent modules in Phobos, a known problem that is slowly being worked toward being solved (note for example std.algorithm and std.range being broken up into importable small chunks and larger implementation modules, using the &lt;tt&gt;package.d&lt;/tt&gt; feature to maintain compatibility with code that expects to import it all).&lt;/p&gt;
  11942.  
  11943. &lt;p&gt;Walter also mentioned dmd's code coverage again, saying it should be used with unittests to ensure they actually exercise the code.&lt;/p&gt;
  11944.  
  11945. &lt;hr /&gt;
  11946.  
  11947. &lt;p&gt;Finally, before lunch, &lt;b&gt;Mihails Strasuns&lt;/b&gt; (aka dicebot) gave a talk on porting Sociomantic's sizable D1 codebase to D2. &lt;a href=&quot;http://dconf.org/2015/talks/strasuns.pdf&quot;&gt;Here are his slides.&lt;/a&gt;&lt;/p&gt;
  11948.  
  11949. &lt;p&gt;He started by explaining that Sociomantic is an established and growing company that has depended on D since 2009 and described their requirements: that they wanted to move to D2, but not disrupt their daily development needs. This meant they wanted to switch to D2 while maintaining D1 compatibility, so they could fallback to the old compiler at any time.&lt;/p&gt;
  11950.  
  11951. &lt;p&gt;They did this by making helper files that bridged the two languages together, with a lot of use of string mixins. The usage code would call these the same way in D1 and D2, then the implementation code encapsulates the differences. The biggest difficulty was with const &lt;i&gt;Editor's note: transitive const/immutable was probably THE breaking change that really differentiated D2 when it was new. It came slightly after the version change, but it was the time when code seriously started to change.&lt;/i&gt; because before, it was shallow qualifier, and now, it is a deep change - const can only call other const, so changing it in one place at a time is not enough.&lt;/p&gt;
  11952.  
  11953. &lt;p&gt;Dicebot explains how they made a d1tod2fix program, based on Brian Schott's libdparse, to help automate parts of the conversion. It did the mechanical conversions, like manifest constants from const to enum, in a 'good enough' manner; imperfect, but a huge help to them.&lt;/p&gt;
  11954.  
  11955. &lt;p&gt;After language changes, they had to work on library changes, the most significant being the &lt;a href=&quot;http://dlang.org/d-array-article.html&quot;&gt;array stomping change in D2&lt;/a&gt; - where resizing an array causes reallocation so a modified slice doesn't affect the original (maintaining the illusion that they are passed by value to functions). D1 made no attempt to prevent this array overwriting, and Sociomantic's code depended on that for their high performance code. They needed to keep the old behavior.&lt;/p&gt;
  11956.  
  11957. &lt;p&gt;On the bright side, druntime does include a function: &lt;tt&gt;assumeSafeAppend&lt;/tt&gt;, which activates the old behavior. Sociomantic thus had to call that when they needed to and were able to use a helper function to make it work in migration. Tedious and bug prone if they missed a spot, but they made it work.&lt;/p&gt;
  11958.  
  11959. &lt;p&gt;The last major change they had to work with in the runtime library is to the garbage collector. Sociomantic uses a custom GC written by Leandro Lucarella which runs concurrently, avoiding pauses in their very time-sensitive code. They ported this to D2 but are planning to do a rewrite and more benchmarks to ensure it still fits their needs.&lt;/p&gt;
  11960.  
  11961. &lt;p&gt;Dicebot now moved on to talking about language changes in general. He broke them up into three types:&lt;/p&gt;
  11962.  
  11963. &lt;p&gt;Good language changes give a clear fix in the error message and don't change semantics. These give them a chance to fix it at their pace without much worry about silent breakage, while reducing their overall technical debt; making the code better in the long run.&lt;/p&gt;
  11964.  
  11965. &lt;p&gt;Bad language changes have big semantic changes with no clear migration path; a big bunch of code has to be rewritten at once to make it work and the compiler error messages don't even help much. These are big cost and leave the user feeling abandoned by the language.&lt;/p&gt;
  11966.  
  11967. &lt;p&gt;Finally, ugly changes are the silent ones that just pop up at runtime without any indication before then. It can bring performance problems or correctness problems and cannot be statically tested.&lt;/p&gt;
  11968.  
  11969. &lt;p&gt;He summed it up by saying &amp;quot;please break my code&amp;quot; - a compile error is the nicest form of change, and if it yields a good return on investment for the user - it reduces technical debt or makes happier developers (because unhappy devs write unhappy apps!) while having an acceptable migration cost thanks to error messages and documentation guides - they want those changes. The short term cost is affordable and the long term returns are significant. Dicebot said that we shouldn't freeze the language and treat all potential changes as all bad without considering the other factors involved.&lt;/p&gt;
  11970.  
  11971. &lt;p&gt;He also mentioned that deprecation periods are nice and dmd's version number is arbitrary and basically useless. We need better migration instructions with each new release. Jonathan Davis also took the mic to comment that people should please test their code with the dmd betas to catch regressions.&lt;/p&gt;
  11972.  
  11973. &lt;p&gt;He finished the talk by saying &lt;a href=&quot;https://www.sociomantic.com/careers&quot;&gt;Sociomantic is hiring D developers and PHP/Javascript developers&lt;/a&gt; in Berlin, Germany.&lt;/p&gt;
  11974.  
  11975. &lt;hr /&gt;
  11976.  
  11977. &lt;p&gt;That led to lunch.&lt;/p&gt;
  11978.  
  11979. &lt;h3&gt;Thursday Afternoon Session&lt;/h3&gt;
  11980.  
  11981. &lt;p&gt;Coming back from lunch, the first speaker was &lt;b&gt;Andy Smith&lt;/b&gt;, talking about using D in the world of financial software. &lt;a href=&quot;http://dconf.org/2015/talks/smith.pdf&quot;&gt;Download his slides here.&lt;/a&gt;&lt;/p&gt;
  11982.  
  11983. &lt;p&gt;He got interested in D because of Walter and Andrei's names and took a look. He said he wrote a bit of code that didn't work and asked for help on the #d IRC channel on freenode and was surprised to find that somebody on IRC actually meant it when he said he'd help rewrite the example so it works and explain it - Andy said this left him with a good impression of the community.&lt;/p&gt;
  11984.  
  11985. &lt;p&gt;After this experience, he started using D at work. His company wanted to rewrite their infrastructure to take advantage of new computer hardware and he was going to use D for the prototype, but it ended up working well right into production.&lt;/p&gt;
  11986.  
  11987. &lt;p&gt;D scores highly on all requirements they had: it was correct, testable, reliable, modifable, productive, and performant.&lt;/p&gt;
  11988.  
  11989. &lt;p&gt;Among other wins in the language were: fast builds, easy testing, C syntax is easy learning, low level functions, the standard library, the module system helps with changes &lt;i&gt;Editor's note: I'd also point out how much static typing helps in modifying code&lt;/i&gt;, and he found no nasty language surprises.&lt;/p&gt;
  11990.  
  11991. &lt;p&gt;In Phobos, he loved having the modules for: getopt, json, DateTime, atomics, bitops, csv (he specifically called out how nice the Struct[] population functions are) and loved how well they worked and that they were easy to use.&lt;/p&gt;
  11992.  
  11993. &lt;p&gt;Andy then moved on to talk about their system. Conceptually, it is a state machine with pure functions, which makes it auditable (very important in finance so regulators can check it), repeatable (helps debugging), and parallelizable (big win for performance).&lt;/p&gt;
  11994.  
  11995. &lt;p&gt;Of course, this abstract model doesn't perform maximally well, so they use an implementation based on mutation for performance, but that is the general idea. Their code works in a couple layers: an inner layer that does business logic and an outer layer that handles concurrency and other matters. The outer layer is written in D.&lt;/p&gt;
  11996.  
  11997. &lt;p&gt;See Andy's slides for more information he discussed about their architecture - explaining ring buffers, event sourcing, and more.&lt;/p&gt;
  11998.  
  11999. &lt;p&gt;At this point, he explained how the original goal was to prototype it in D and rewrite in C++ for production, but D worked so well that they stuck with it. Among the wins he listed was:&lt;/p&gt;
  12000.  
  12001. &lt;p&gt;Inline asm is available when it is needed, like for their lock-free ring buffer. Thanks to mixin templates, it was easy enough for mortals to use.&lt;/p&gt;
  12002.  
  12003. &lt;p&gt;A padded template was written to avoid false sharing. This code was nicer in D than in Java. He noted that they used 128 bytes because of the prefetcher chunk size, larger than a cache line! There was a measured speed improvement. &lt;i&gt;Editor's note: one nice thing about D's easy to use templates is that it is easy to tweak values like this and try measuring again to see what works best.&lt;/i&gt;&lt;/p&gt;
  12004.  
  12005. &lt;p&gt;Reading data from java is a pain, needs unsafe module and offsets and such. D used compile time reflection and .offsetof, etc., properties to get rigth into the struct. With the D, we can generate the Java code.&lt;/p&gt;
  12006.  
  12007. &lt;p&gt;C style string processing was easy in D too. They recycled a buffer and passed the buffer to an external API. Between extern(C) interaction and the familiar code, this was good for comfort as a newbie!&lt;/p&gt;
  12008.  
  12009. &lt;p&gt;He summed it up by saying D was well worth it and faster than C.&lt;/p&gt;
  12010.  
  12011. &lt;hr /&gt;
  12012.  
  12013. &lt;p&gt;The next speaker was &lt;b&gt;Jonathan M. Davis&lt;/b&gt; giving an introduction to ranges. You can see his slides &lt;a href=&quot;http://dconf.org/2015/talks/davis.pdf&quot;&gt;here&lt;/a&gt;. &lt;i&gt;Editor's note: I know ranges well, so I didn't take extensive notes through everything he said - I encourage you to look through the slides too, he covered a lot of good material.&lt;/i&gt;&lt;/p&gt;
  12014.  
  12015. &lt;p&gt;Jonathan started with an introduction to D's arrays and slices, explaining that their semantics are the same as a struct with a length and pointer member - slices are passed by value, but have a reference to the data.&lt;/p&gt;
  12016.  
  12017. &lt;p&gt;His experience showed quickly as he warned us to beware of the implicit slicing of static arrays:&lt;/p&gt;
  12018.  
  12019. &lt;pre class=&quot;d_code&quot;&gt;    &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[4] staticArray; &lt;font color=&quot;green&quot;&gt;// not the same as a slice!
  12020. &lt;/font&gt;    &lt;font color=&quot;blue&quot;&gt;char&lt;/font&gt;[] slice = staticArray; &lt;font color=&quot;green&quot;&gt;// but it will be implicitly sliced to one
  12021. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// slice now points to temporary data which can lead to crashes
  12022. &lt;/font&gt;    &lt;font color=&quot;green&quot;&gt;// or memory corruption without the type system warning you!
  12023. &lt;/font&gt;&lt;/pre&gt;
  12024.  
  12025. &lt;p&gt;Jonathan then gave a good explanation of ranges, see his slides for more information. He notes that you need to &lt;tt&gt;import std.array;&lt;/tt&gt; to treat built in arrays/slices as ranges, but warns us to remember that a slice is not a container - iterating over it with a range will consume the slice.&lt;/p&gt;
  12026.  
  12027. &lt;p&gt;Since ranges aren't containers are are consumable views, they never grow and can only shrink. You can't append to a range. If you want to append, you need a container. You also cannot unpop a range, once you go forward with &lt;tt&gt;popFront&lt;/tt&gt; (or &lt;tt&gt;popBack&lt;/tt&gt;), the element is consumed.&lt;/p&gt;
  12028.  
  12029. &lt;p&gt;Ranges have a lot of attributes like infiniteness which can be tested at compile time. However, the compiler will allow you to &lt;tt&gt;foreach&lt;/tt&gt; over an infinite range (makes sense since you can &lt;tt&gt;break&lt;/tt&gt; from it!), Jonathan warned to be careful with this since unless you do break, it will go forever!&lt;/p&gt;
  12030.  
  12031. &lt;p&gt;In his slides, Jonathan presented an example random number range, showing how ranges move beyond iterating over a container and can also be used as generators. Andrei commented that his example wouldn't quite be uniform, but Jonathan said pretend it is for the sake of discussion.&lt;/p&gt;
  12032.  
  12033. &lt;p&gt;Jonathan said that if you have a range problem, &lt;tt&gt;std.algorithm&lt;/tt&gt; can probably solve it, but you might need to think of new names. For example, if you are looking for &lt;tt&gt;dropUntil&lt;/tt&gt;, you won't find it... but &lt;tt&gt;std.algorithm.find&lt;/tt&gt; actually does the same thing.&lt;/p&gt;
  12034.  
  12035. &lt;p&gt;He then went on to talk about a big potential pitfall: passing a range to a function may copy it... which actually has undefined behavior! Since an input range may consume a nonrenewable resource, such as an underlying network stream, copying it might consume all views into it... or might not.&lt;/p&gt;
  12036.  
  12037. &lt;p&gt;The range paradigm has a solution for this: a &lt;tt&gt;save&lt;/tt&gt; function, provided by forward ranges. If this method is available, you can copy the range with expected results. If not, copying it is undefined. &lt;i&gt;Editor's note: all range primitives are supposed to be low cost, if you are writing a range and need to allocate memory to make a copy, do not provide &lt;tt&gt;save&lt;/tt&gt; - it is expected by algorithms to be a nearly free call and making it slow can break algorithm's performance guarantees!&lt;/i&gt;&lt;/p&gt;
  12038.  
  12039. &lt;p&gt;Jonathan notes that Phobos often gets this wrong - you should call &lt;tt&gt;save&lt;/tt&gt; when passing a range to &lt;tt&gt;equal&lt;/tt&gt; for example, since otherwise you consume it while checking it.&lt;/p&gt;
  12040.  
  12041. &lt;p&gt;He also talked about the string debate: Phobos treats strings as ranges of &lt;tt&gt;dchar&lt;/tt&gt; rather than &lt;tt&gt;char&lt;/tt&gt; in an attempt to be more Unicode correct. However, since this doesn't cover all graphemes - what the user perceives as a character - such as two Unicode characters that combine into one, for example, &lt;tt&gt;e&lt;/tt&gt; followed by the add-accent character - Phobos' behavior still isn't really right. Bottom line: if you want your program to be unicode aware, you need to be aware of the underlying issues too, there is no magic bullet, despite Phobos' efforts.&lt;/p&gt;
  12042.  
  12043. &lt;p&gt;Atila asked a question about &lt;tt&gt;walkLength&lt;/tt&gt;: why use it instead of &lt;tt&gt;array&lt;/tt&gt;? Jonathan answered that there's two advantages: first, &lt;tt&gt;walkLength&lt;/tt&gt; won't actually walk if it doesn't have to - if the range provides a &lt;tt&gt;length&lt;/tt&gt; member, it will forward to it. Secondly, &lt;tt&gt;walkLength&lt;/tt&gt; is more efficient because it avoids allocating an array to hold the result when all you need is the length count.&lt;/p&gt;
  12044.  
  12045. &lt;p&gt;Finally, Jonathan introduced output ranges, but noted that they aren't well defined and lazy input ranges - transformative things like &lt;tt&gt;std.algorithm.map&lt;/tt&gt; - are often a better choice.&lt;/p&gt;
  12046.  
  12047. &lt;hr /&gt;
  12048.  
  12049. &lt;p&gt;The next speaker was &lt;b&gt;Mark Isaacson&lt;/b&gt;, a relative newbie to D, talking about his experience using it to reduce code smell in some C interaction. His slides are &lt;a href=&quot;http://dconf.org/2015/talks/isaacson.pdf&quot;&gt;here&lt;/a&gt;. The recurring theme was the ability to define abstractions in D to make the code prettier and more correct, without sacrificing performance.&lt;/p&gt;
  12050.  
  12051. &lt;p&gt;Mark explained that he had to write a ODBC driver which included some messy bits like writing a Windows DLL and being tied to some fairly ugly C function signatures. Early on, he raved about how nice it is to slice C strings to form D strings, demonstrating a short function that also leverages &lt;tt&gt;inout&lt;/tt&gt; and &lt;tt&gt;isSomeChar&lt;/tt&gt; to work across all kinds of strings in just a few simple lines. Similarly, he wrote a struct to handle output strings, which functions would write to.&lt;/p&gt;
  12052.  
  12053. &lt;p&gt;Next, he talked about memory management in DLLs, which must pass data to and from C and cannot rely on the GC nor the operating system to clean it up properly. He wrote helper functions around malloc and free to manage all the memory manually with convenient syntax. He also called out the usefulness of &lt;tt&gt;core.sys.windows.windows&lt;/tt&gt; in easily accessing the OS function &lt;tt&gt;MessageBoxW&lt;/tt&gt; to pop up messages.&lt;/p&gt;
  12054.  
  12055. &lt;p&gt;He also mentioned how dispatching variant types through &lt;tt&gt;foreach(type; TypeTuple!(list,here))&lt;/tt&gt; is easy to write and optimizes fairly well.&lt;/p&gt;
  12056.  
  12057. &lt;p&gt;He then mentioned a few things that didn't work so well: he said dmd is too fast, rendering his makefile-fu obsolete. He also said the &lt;tt&gt;real&lt;/tt&gt; type is broken on Windows &lt;i&gt;This is due to an old ABI bug..&lt;/i&gt;, and also that dub didn't have a gui, so he had to call out to Notepad instead.&lt;/p&gt;
  12058.  
  12059. &lt;p&gt;He then went back to the love, saying D rocks for scripting thanks to the fast dev cycle, the rdmd shebang support, the ease of use of &lt;tt&gt;std.process&lt;/tt&gt;, and the fact that it has tested functions that can be reused, unlike bash which typically has poorly tested functions - if they have tests at all.&lt;/p&gt;
  12060.  
  12061. &lt;p&gt;He also liked a memoize pattern: write a static nested function inside the visible function, and return a std.functional.memoize version of it. He also liked the UFCS pipeline chain style of functions:&lt;/p&gt;
  12062.  
  12063. &lt;pre class=&quot;d_code&quot;&gt;stdin
  12064.  .byline
  12065.  .filter!(a=&amp;gt;keepLine(a))
  12066.  .map!
  12067.  ..... etc
  12068. &lt;/pre&gt;
  12069.  
  12070. &lt;p&gt;One problem he had with this style was debugging, so he wrote a &lt;tt&gt;debugRange&lt;/tt&gt; which prints what passes through it and keeps going. &lt;i&gt;Note that std.range.tee can do this too&lt;/i&gt;. Someone commented that range.front ought to be idempotent; it should do nothing beyond returning the value, as it is often called multiple times and extra behavior is not expected.&lt;/p&gt;
  12071.  
  12072. &lt;p&gt;One thing Mark mentioned about debugging is he likes to stomp values with all zeroes so their reuse is more obvious in a debugger. Walter commented that using some value other than zero might make it even easier to notice.&lt;/p&gt;
  12073.  
  12074. &lt;p&gt;Mark summarized by saying that D does well in building safe abstractions on top of smelly code, works well for scripting, and has a few rough edges (mainly due to DLL work), but generally works well.&lt;/p&gt;
  12075.  
  12076. &lt;hr /&gt;
  12077.  
  12078. &lt;p&gt;We finished out Thursday with a &lt;b&gt;hot mic session&lt;/b&gt;, which lasted over an hour. It was originally meant to be focused on the release process, but it ended up being far more random, with a lot of people discussing a lot of different things.&lt;/p&gt;
  12079.  
  12080. &lt;p&gt;What follows is my notes on what was discussed, roughly formatted. It is &lt;b&gt;NOT&lt;/b&gt; a transcript and may have errors or biases introduced by me.&lt;/p&gt;
  12081.  
  12082. &lt;p&gt;Andrei says 500k visits in March, up from 1,500 in 2010. 1,000 dmd downloads per month.  Andrei says github activity lags the rest of the growth.&lt;/p&gt;
  12083.  
  12084. &lt;p&gt;Liran: when we use D, people ask, why not Rust or Go? D needs PR. Andrei: we need to be the best we can without fighting anyone. Rust has good things going for it but challenges too. D needs a big backer. Walter: often someone blames the compiler or says what it doesn't do right and doesn't talk enough about what it does right. Worth remembering what we are doing right and little things aren't dealbreakers. Joseph: interesting psychological thing where the more you get right the more they see the wrong stuff.&lt;/p&gt;
  12085.  
  12086. &lt;p&gt;Joseph:  with the foundation is there a plan to find wider consensus? Andrei: no. what we hope with the foundation is financing things like conference or pro support. I like the idea of attaching a community process though.&lt;/p&gt;
  12087.  
  12088. &lt;p&gt;Online: when do we plan to have an ANSI standard? Walter: not now, it might come later but no real plans. Chuck: we need vested users to justify the slow moving standardization process.  We should not go that way until we are compelled by it. Andrei: we want to stabilize before standardize, not standardize to become stable. It will take years.&lt;/p&gt;
  12089.  
  12090. &lt;p&gt;Atila: shared finalization coming? Andrei: everything needs to come. Walter: an advantage of standardization is forcing us to formalize it. Andrei: Brian's work is good for frontend, we need something similar for semantic. Chuck: we should be careful where we air the dirty laundry, C++ committee divided into working groups and that's where biggest problems are discussed and they work on it and present solution to publicize.  Andrei: I plan to start a blog and talk about good stuff and bad stuff...&lt;/p&gt;
  12091.  
  12092. &lt;p&gt;Q: lot of code takes predicates. Params can create closures and GC it. Hurts codegen. What will we do? Walter: we would like to resolve it with ownership semantics, e.g. map promises not to escape so no closure is needed. More annotations will come... Brad: it does escape in the return value! Andrei: we need an optimizer which inlines and optimizes aggressively.&lt;/p&gt;
  12093.  
  12094. &lt;p&gt;Online: planning on updating TDPL or writing a new one? Andrei: a second edition may be coming, the publisher is interested in more D stuff. Far off, I might write another book.  So it is on the list. Chuck: there is a video course on D on pluralsight. It's not bad.  Walter: a roku or youtube channel would be interesting with D videos.&lt;/p&gt;
  12095.  
  12096. &lt;p&gt;Andrei: we need more talent. OK work is the enemy of great work, we need to raise the bar. Great work is instantly attractive. John (I think): wider library is important, a lot of OK is worth it. Andrei: if there is no work, OK work is great work! Amaury: we need to focus on deeper stuff not just names and junk. Walter: we should ask why pull it, not why not. David: we need ok to be a stepping stone to great... don't turn people away because it isn't great. Andrei: i try to make weak proposals better. Amaury: fixing little things is great for newcomers, big bang for buck. We need a guide for newcomers. Andrei: yes we need stuff for beginning contribs. Documentation needs work.  I'll take ANY work on it. Walter: I agree, just adding examples to Phobos would be great.&lt;/p&gt;
  12097.  
  12098. &lt;p&gt;Leonello: how do we decide what to do? Walter: we could just pick something at random and fix problems we find! Not just examples but maybe fun examples. Moving stuff from SO might be a good idea. Waler: just one step closer on bug reports helps too. Brian: documenting return values is valuable.  dicebot: mediocre PRs often are blockers on my walk to great work. Walter: these aren't absolute rules. B-29 Bomber!!!! They duplicated damage too while following orders too literally. Andrei: these are judgement calls. Amaury: just good enough can sometimes discourage meta.  comment: yay for std.meta, it was too complex to explain typetuples and such.  dicebot: comment Andrei: typetuple was a liability we owe you an apology for not being decisive enough.&lt;/p&gt;
  12099.  
  12100. &lt;p&gt;Brian: the longer we wait to fix parser bugs the more stuff that needs fixed. What's the plan?  Walter: we need to look at one at a time. Brian: the throwable one is both-ways compatible, is that ok? Walter: is there any correct existing code that would break for this?  Brian: are we committing to error stability and warning stability, that even new bad broken code won't be warned? Walter: case by case. If the code is reasonably ok it shouldn't pull the rug out.&lt;/p&gt;
  12101.  
  12102. &lt;p&gt;Brad: when is allocator coming? Andrei: std.experimental.allocator is ready for review next week.&lt;/p&gt;
  12103.  
  12104.  
  12105.  
  12106. &lt;h3&gt;Friday Sessions&lt;/h3&gt;
  12107.  
  12108. &lt;p&gt;The report on the final day of DConf must be delayed one last week as it is not ready to go at this publication time, sorry for the wait!&lt;/p&gt;
  12109.  
  12110. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  12111.  
  12112. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;new page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  12113.  
  12114. &lt;h2&gt;In the community&lt;/h2&gt;
  12115.  
  12116. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12117.  
  12118. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ml6nlf$2pas$2@digitalmars.com&quot;&gt;DDT 0.12.0 release - many internal changes.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/znaffgxodfpnjwggpwok@forum.dlang.org&quot;&gt;reggae v0.2.3: minimal build, reggae as a library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/toeufcqlqshrtiinkulq@forum.dlang.org&quot;&gt;Coedit 1 gold released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/opdhugrvrhydarhpwuem@forum.dlang.org&quot;&gt;Call for reviewers : std.experimental.allocator&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kccjgdgxufwzmyhwshtw@forum.dlang.org&quot;&gt;asynchronous 0.4.1 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kdklupeumaoiwzuaqywh@forum.dlang.org&quot;&gt;New D tool releases&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mlilbi$264h$1@digitalmars.com&quot;&gt;Scriptlike v0.8.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mlj35l$2lal$1@digitalmars.com&quot;&gt;gen-package-version v0.9.0: New: Auto-generate version/timestamp info&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ml60bb$1ptp$1@digitalmars.com&quot;&gt;safeArg: Little CLI util to pass null-delimited list of cmdline args to a program&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/dehleaecsihenaapyqhl@beta.forum.dlang.org&quot;&gt;D extensions to python, inline in an ipython/jupyter notebook&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zzyrmwvpqvhwlgqnlofa@beta.forum.dlang.org&quot;&gt;Dgame 0.6 - Beta&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cqxzdurzrratnqumhbuz@forum.dlang.org&quot;&gt;Announcing dplug, a toolkit for making audio plugins with D&lt;/a&gt;
  12119. &lt;/li&gt;&lt;/ul&gt;
  12120.  
  12121. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12122.  
  12123. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12124.  
  12125. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cgygrirvgkgxpupzzftn@beta.forum.dlang.org&quot;&gt;static foreach considered&lt;/a&gt; discusses &lt;tt&gt;static foreach&lt;/tt&gt;, a language feature that is oft-requested and now seriously considered.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ml76cf$c32$1@digitalmars.com&quot;&gt;Right after allocators: containers or database connectivity?&lt;/a&gt; was Andrei asking what to do next. The decision was both: he started an ODBC binding which Erik Smith is using to go forward on database work and Andrei will work on more containers.
  12126. &lt;/li&gt;&lt;/ul&gt;
  12127.  
  12128. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12129.  
  12130.  
  12131. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12132. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12133. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12134. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12135. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12136. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12137. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12138. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12139. &lt;/li&gt;&lt;/ul&gt;
  12140.  
  12141.  
  12142. &lt;/div&gt;
  12143. </description></item><item><title>Issue #21</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jun-07.html</link><guid>http://arsdnet.net/this-week-in-d/jun-07.html</guid><pubDate>Sun, 07 Jun 2015 12:00:00 GMT</pubDate><description>
  12144. &lt;div id=&quot;body-container&quot;&gt;
  12145. &lt;h1&gt;
  12146. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12147. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12148. &lt;span id=&quot;title-date&quot;&gt;June 07, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12149.  
  12150.  
  12151. &lt;div id=&quot;preface&quot;&gt;
  12152.  
  12153. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12154.  
  12155. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12156.  
  12157. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12158.  
  12159. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12160.  
  12161. &lt;/div&gt;
  12162.  
  12163. &lt;h2&gt;Statistics&lt;/h2&gt;
  12164.  
  12165. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-06-01&amp;amp;chfieldto=2015-06-07&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;17 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12166. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-06-01&amp;amp;chfieldto=2015-06-07&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;21 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12167. 50 pull requests merged into the language:
  12168.  
  12169. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-01..2015-06-07&quot;&gt;19 into DMD&lt;/a&gt;,
  12170. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-01..2015-06-07&quot;&gt;28 into Phobos&lt;/a&gt;, and
  12171. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-01..2015-06-07&quot;&gt;3 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12172. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-06-01..2015-06-07&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  12173. &lt;/li&gt;&lt;/ul&gt;
  12174.  
  12175. &lt;h2&gt;Major Changes&lt;/h2&gt;
  12176.  
  12177. &lt;p&gt;Several Phobos functions have been &amp;quot;range-ified&amp;quot;, which changes the signature but should mostly work the same way. The change means fewer memory allocations will happen in the Phobos library.&lt;/p&gt;
  12178.  
  12179. &lt;p&gt;&lt;tt&gt;std.traits&lt;/tt&gt; now has a &lt;tt&gt;hasUDA&lt;/tt&gt; function, to make checking user-defined attributes easier.&lt;/p&gt;
  12180.  
  12181. &lt;p&gt;Vladimir has released &lt;a href=&quot;http://forum.dlang.org/thread/sqqngcfwtkhxeoiqnbpt@beta.forum.dlang.org&quot;&gt;forum.dlang.org, version 2 (BETA)&lt;/a&gt; which will probably become the new web interface. Chime in now if you have comments!&lt;/p&gt;
  12182.  
  12183. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  12184.  
  12185. &lt;p&gt;DConf 2015 happened recently! Over 30 men gathered in person at Utah Valley University for about nine hours a day over three days to discuss D, with the majority of the conference also being livestreamed over Youtube to many other people.&lt;/p&gt;
  12186.  
  12187. &lt;p&gt;The conference was also professionally recorded and those videos will be made available later, once editing is finished.&lt;/p&gt;
  12188.  
  12189. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; summarized the Wednesday morning session last week. This week, we'll continue our coverage.&lt;/p&gt;
  12190.  
  12191. &lt;h3&gt;Wednesday Morning Session&lt;/h3&gt;
  12192.  
  12193. &lt;p&gt;See &lt;a href=&quot;http://arsdnet.net/this-week-in-d/may-31.html&quot;&gt;last week's issue&lt;/a&gt;.&lt;/p&gt;
  12194.  
  12195. &lt;h3&gt;Wednesday Afternoon Session&lt;/h3&gt;
  12196.  
  12197. &lt;p&gt;After lunch, we reconvened for three additional talks and one long Q&amp;amp;A session.&lt;/p&gt;
  12198.  
  12199. &lt;hr /&gt;
  12200.  
  12201. &lt;p&gt;The first talk after lunch was by &lt;b&gt;Liran Zvibel&lt;/b&gt; discussing his company's, Weka.io, use of D. Weka is based in Israel and has been using D since early 2014 writing max performance, high availability primary storage software. His slides are &lt;a href=&quot;http://dconf.org/2015/talks/zvibel.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  12202.  
  12203. &lt;p&gt;After introducing his company and work, Liran briefly described their old infrastructure: a mix of C and Python with a lot of auto-generated code. They wanted better and moved to D.&lt;/p&gt;
  12204.  
  12205. &lt;p&gt;For maximum performance, they wrote memory efficient code with zero copying, no allocation, and no locks. For more understandable code, they used fibers, a reactor, and a RPC framework based on D's compile-time reflection.&lt;/p&gt;
  12206.  
  12207. &lt;p&gt;They had a number of debugging challenges: bugs must be fixed but the system can't go down and reproducing errors is too expensive. They couldn't use extensive text tracing because writing to a log is too slow and too bloated. To solve this problem, they wrote a custom tracing framework that uses Brian Schott's libdparse and static code generation to instrument their code and make a binary storage system. For example, it would store ID integers instead of strings for maximum efficiency. A lockless move system to shared memory allows it to qyuckly log the useful information without pausing the system.&lt;/p&gt;
  12208.  
  12209. &lt;p&gt;Weka uses a custom log viewer to give their developers access to the stored trace data. He noted that access to linker sections would be nice to remove a step in the custom trace process, but it is not necessary to get the system working.&lt;/p&gt;
  12210.  
  12211. &lt;p&gt;Next, Liran described the IPC system, which uses compile time reflection to generate the code to communicate with remote nodes by looking at regular D interface declarations. &lt;i&gt;Editor's note: chapters eight and nine of my D Cookbook describe techniques that can form the foundation of such a system, though Weka's implementation goes further than the book elaborated upon. I'd also add that while this creates some beautiful code that is easy to alter, it does come at a cost: in today's compiler, at least (the implementation is currently inefficient), such reflection and codegen can have a major effect on compile times - Liran mentions slow builds later in the talk - so it isn't necessarily the right solution all the time. You might want to use the code gen to make the interface, but instead of mixing it in immediately, use &lt;tt&gt;pragma(msg)&lt;/tt&gt; to write the code out to stdout, and have your makefile save that to a file which you can cache between builds, or something along those lines.&lt;/i&gt;&lt;/p&gt;
  12212.  
  12213. &lt;p&gt;Liran mentioned that this approach is much easier to use than implementing it in C with external tools, while remaining extremely efficient at runtime.&lt;/p&gt;
  12214.  
  12215. &lt;p&gt;Next, we heard about some custom code they wrote: they wrote some of their own assertion and reflection helpers, building on what D has built in. They crated fiber-local storage and fiber debugging helpers. They also wrote a number of no-GC efficient data structures, gc_hacks for getting private GC statistics to help with their optimization, and reflection-based accessors which notify of changes to member variables.&lt;/p&gt;
  12216.  
  12217. &lt;p&gt;Liran took a moment now to exclaim that &amp;quot;what you should take of [this talk] is: D is great&amp;quot; and that you should adopt D. He mentioned that one of the interview questions they ask is to give them 30 lines of C++ and see if they can tell what it does. Given the complexity of C++, this is harder than it seems, even for experienced C++ developers. When people see D, however, they tend to find it much easier to read, even as a newbie, but especially after they get used to it.&lt;/p&gt;
  12218.  
  12219. &lt;p&gt;He then started to talk about some challenges they faced: many things stemming from their strict latency requirements being incompatible with garbage collection, so they had to avoid it, a problem with the compiler taking too much memory and not scaling to use all the cores on their dev machine (compiling all at once simply didn't work for them - this relates to a number of known bugs in the compiler, which generally have workarounds, but they don't work as well as the existing workarounds for C++'s slow builds, for example), a huge executable being built, and a few bugs in the compilers - especially gdc and ldc, meaning they stuck with dmd in production, despite the poorer code optimization.&lt;/p&gt;
  12220.  
  12221. &lt;p&gt;Walter mentioned they could try .di files for the build, but this doesn't solve the fundamental problem they faced. &lt;i&gt;Editor's note: when he said that on the mic, the thought that crossed my mind is &amp;quot;that is like microoptimizing a bubble sort&amp;quot;...&lt;/i&gt;. Andrei mentioned trying package-at-a-time compilation, which can be better parallelized and avoid many of the rougher edges like template instantation bugs that plague module-at-a-time compilation. Liran said they haven't been able to try that in practice yet. I would also note that fixing the parallelizing and memory usage is slated to come somewhat soon after the move to ddmd, which should happen in a few months (see Daniel Murphy's talk from the Wednesday morning session, summarized last week.)&lt;/p&gt;
  12222.  
  12223. &lt;p&gt;Liran also mentioned private imports in functions which are theoretically more efficient... but in practice, a pain to use, needing to reimport everything per function instead of per module, and thus not often used by developers.&lt;/p&gt;
  12224.  
  12225. &lt;p&gt;Another challenge was that many C functions that need to be inlined for good performance are not inlined when called from D. Since the D compiler doesn't see the C source, the function is always called, never inlined. To solve this, Weka ported some important C functions to D. &lt;i&gt;Editor's note: link time optimization in GDC and LDC may solve this, but dmd doesn't implement it. Weka didn't use gdc and ldc due to some unique bugs with those compilers, but for many projects, they work excellently and you might try them before rewriting functions.&lt;/i&gt;&lt;/p&gt;
  12226.  
  12227. &lt;p&gt;He also fund that module constructors and destructors found limited use thanks to import cycles and ordering issues in practice, and that using integer types smaller than &lt;tt&gt;int&lt;/tt&gt; (&lt;tt&gt;short&lt;/tt&gt;, &lt;tt&gt;byte&lt;/tt&gt;) were painful due to an explosion of casts - value range propagation doesn't go far enough to make these both correct and convenient to use yet.&lt;/p&gt;
  12228.  
  12229. &lt;p&gt;Liran summarized by generally praising D: it gives them a single language for both paths, able to replace both C and Python, it has given them a huge productivity boost and they are heavily using D's unique features, and it is paying off. Their only main downside was that large real time projects could have better support... but, remember, this talk is about their &lt;i&gt;success&lt;/i&gt; in building a large, real time project with D!&lt;/p&gt;
  12230.  
  12231. &lt;p&gt;Finally, Liran said he is looking for D freelancers to help build better infrastructure and give back to the community at the same time. If you're interested, email him at liran@weka.io.&lt;/p&gt;
  12232.  
  12233. &lt;hr /&gt;
  12234.  
  12235. &lt;p&gt;The second after-lunch speaker was &lt;b&gt;David Nadlinger&lt;/b&gt; (aka klickverbot), talking about druntime's implementation. You can see his slides &lt;a href=&quot;http://dconf.org/2015/talks/nadlinger.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  12236.  
  12237. &lt;p&gt;David opened with an overview of the various packages that make up druntime and some of the fundamental classes such as &lt;tt&gt;TypeInfo&lt;/tt&gt; and &lt;tt&gt;ModuleInfo&lt;/tt&gt;. He then described exception handling, noting that it is both compiler- and platform-specific, and gave an overview of how D's mark-and-sweep garbage collector works.&lt;/p&gt;
  12238.  
  12239. &lt;p&gt;At this point, the talk got more specific, discussing just how thread-local storage is implemented and a challenge in getting it to work with shared libraries - the fact that it won't necessarily have a static per-thread table indicating where the storage is found. (Shared libraries may be loaded dynamically into several different programs.)&lt;/p&gt;
  12240.  
  12241. &lt;p&gt;Walter took to the mic briefly to mention that TLS globals are not actually very efficient due to these indirect lookups - local variables are far more efficient to access.&lt;/p&gt;
  12242.  
  12243. &lt;p&gt;David went back to discussing how it works, including a custom TLS implementation on dmd on Mac OS X since that operating system didn't support it natively since version 10.7. This custom implementation used functions from the &lt;tt&gt;rt.sections_osx&lt;/tt&gt; module along with special linker sections generated by the compiler to store the data. The LDC implementation of TLS on OS X uses the default LLVM implementation, but with some Apple-specific extensions for GC ranges.&lt;/p&gt;
  12244.  
  12245. &lt;p&gt;David also described how fibers work (including noting that TLS and exception handling implementation with fibers is harder than it sounds), then briefly described the C startup model. He made the important note that a C program doesn't quite start at &lt;tt&gt;main&lt;/tt&gt; - it actually starts at &lt;tt&gt;_start&lt;/tt&gt;, which is found inside the C library. &lt;i&gt;Editor's note: it can actually start at any symbol, you can override this with a linker script, but &lt;tt&gt;_start&lt;/tt&gt; is the default one and this trivia doesn't actually change David's point.&lt;/i&gt; He clears up a common misconception that C programs don't have a runtime: they do, that's how global constructors and destructors are called, and how the environment is set up!&lt;/p&gt;
  12246.  
  12247. &lt;p&gt;Next, he got into more details on shared libraries and module registration. He described out the &lt;tt&gt;_Dmodule_ref&lt;/tt&gt; system worked - a linked list of modules created by the compiler using C global constructors &lt;i&gt;editor's note: if you have ever played with kernel code in D, you've probably seen this before. The reason it doesn't work there though, the reason the reference is null, is that you are probably skipping the C runtime initialization by writing your own _start... meaning those constructors are never run!&lt;/i&gt;. This is a simple system that works portably... but does not work right with shared libraries.&lt;/p&gt;
  12248.  
  12249. &lt;p&gt;The shared library support on Posix needs special effort. It uses a shared druntime and needs to detect module conflicts (two different versions of the same module from different libraries)... while remaining easy to use (so custom linker scripts are out) and working around myriad linker bugs and incompatibilities &lt;i&gt;Editor's note: he is talking about the GNU and LLVM linkers here! i.e., not D specific&lt;/i&gt;.&lt;/p&gt;
  12250.  
  12251. &lt;p&gt;The solution in druntime now is a function called &lt;tt&gt;_d_dso_registry&lt;/tt&gt;, a compiler generated call mostly written by Martin Nowak, which handles these issues.&lt;/p&gt;
  12252.  
  12253. &lt;p&gt;David also talked about &lt;tt&gt;--gc-sections&lt;/tt&gt;, an option to the linker which, in theory, should lead to smaller executables. This, again, hit pain in ease of use, linker incompatibilities, and linker bugs, however when it does work, it can result in executables from ldc about 1/4 the size as the ones from dmd. David noted that gdc's executables tend to be huge just because it adds debugging info, which can be easily stripped out.&lt;/p&gt;
  12254.  
  12255. &lt;p&gt;David's slides, page 30, has a number of good references to better understand the topics he talked about, and he mentioned that link time optimization may continue to improve going forward.&lt;/p&gt;
  12256.  
  12257. &lt;hr /&gt;
  12258.  
  12259. &lt;p&gt;&lt;b&gt;Amaury Sechet&lt;/b&gt; (aka deadalnix) was the next speaker and talked about memory, CPU caches, concurrency fencing, and more. His slides are &lt;a href=&quot;http://dconf.org/2015/talks/sechet.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  12260.  
  12261. &lt;p&gt;The first point he made is that memory is slow. It takes about 300 cpu cycles to read from main memory and this situation has hit a wall: latency happens because an electronic signal simply has to take time to travel across the circuit.&lt;/p&gt;
  12262.  
  12263. &lt;p&gt;&lt;i&gt;Editor's note: if you've been programming a while, you'll remember when memory was so much faster than CPUs that it'd make sense to store as much as you can there (though you didn't have infinite memory back then either!). The situation is different now: storing things in main memory is not necessarily a speedup compared to calculating it again on demand. It comes down to carefully managing the cpu cache, which is what deadalnix's talk is about.&lt;/i&gt;&lt;/p&gt;
  12264.  
  12265. &lt;p&gt;Amaury then talked about the solution to slow memory: fast caches stored on the CPU itself, physically closer so the signal has less distance to travel. The CPU also prefetches data it expects to be used, so it is available without a wait. His slides list types of cpu cache.&lt;/p&gt;
  12266.  
  12267. &lt;p&gt;Amaury listed a few big tips to help mitigate the slow memory problem, including: pack your data so it takes less memory, put what you can on the stack (which is likely to be in the hot cache), access data in a linear fashion avoiding indirections and code branching (to help the prefetcher predict the right stuff to grab), and size your data so it fits on a cache line.&lt;/p&gt;
  12268.  
  12269. &lt;p&gt;He briefly explained the memory management unit in a CPU before moving on to discussing multicore processors' interaction with memory, which took up the bulk of the talk.&lt;/p&gt;
  12270.  
  12271. &lt;p&gt;He opens this part by noting that multicore processors are everywhere, including in mobile devices, and their presence is very visible to programmers, unlike older faster serial processors, which programmers could basically reap benefit for free - their same programs would just run faster. With multicore, changing the program may be necessary to get benefits. &lt;i&gt;Editor's note: though one free benefit you might see is from the operating system: your process could get a free core while other processes the user runs is on other ones. But, indeed, to really utilize it all, you do need to do some work!&lt;/i&gt;&lt;/p&gt;
  12272.  
  12273. &lt;p&gt;Since multicore is visible to the programmer, old languages have trouble adapting to it and newer languages need to do something to help. This tends to be enforcing semantics to keep up a single-threaded illusion for most code, limiting where memory sharing happens.&lt;/p&gt;
  12274.  
  12275. &lt;p&gt;In a multicore environment, each core has their own cache which works asynchronously. As a result, reads and writes back to main memory may happen out of order and one core may overwrite another core's write. The x86 architecture is kind to programmers in this respect, but other architectures expose you to all the gory details.&lt;/p&gt;
  12276.  
  12277. &lt;p&gt;The basics behind cache coherency in the CPU is that a core takes ownership of a cache line and shares when it is not dirty. The tip from this fact is to avoid sharing and writing to memory. In D, this means share immutable data and write to thread local data whenever possible. Since thread local data is the default in D, this is encouraged by the language too.&lt;/p&gt;
  12278.  
  12279. &lt;p&gt;Since it works on 64 byte cache lines, if you need to share mutable memory across many threads, you may want to pad the data - make sure the shared block takes up the full 64 bytes so two shared variables in the same block don't get thrashed across different threads.&lt;/p&gt;
  12280.  
  12281. &lt;p&gt;While x86 tries to keep the memory consistency automatically, it also cannot compromise performance too much. One type of operation: the StoreLoad memory barrier, does need to be explicit on x86. This is triggered with the &lt;tt&gt;mfence&lt;/tt&gt; instruction &lt;i&gt;editor's note: which D exposes through inline assembly and I believe intrinsics&lt;/i&gt;. ARM requires you to explicitly specify all memory barriers.&lt;/p&gt;
  12282.  
  12283. &lt;p&gt;Amaury then says we're all doomed as testing for these problems is difficult... but then goes into more detail about how D helps, with its thread local default and explicit sharing, and also the transitive immutable can also be relied upon in a multicore environment.&lt;/p&gt;
  12284.  
  12285. &lt;p&gt;&lt;tt&gt;shared&lt;/tt&gt; is kinda hard to use in D... but that's a good thing because sharing is hard to use in any case, so making it look easy would be a leaky and probably wrong abstraction. It ought to be used with care.&lt;/p&gt;
  12286.  
  12287. &lt;p&gt;The next topic was the garbage collector and how it needs more work to be really multicore friendly, as well as the API between the druntime and the compiler.&lt;/p&gt;
  12288.  
  12289. &lt;p&gt;Amaury's project, sdc, a rewrite of the D compiler, has a proof of concept inspired by jemalloc to make a thread-local heap. It uses write barriers to help with gc pauses, but it also uses more memory than the stock D gc. The key to making it good is to generally only share immutable values...&lt;/p&gt;
  12290.  
  12291. &lt;p&gt;...but, there's still a few other problems with it: an immutable delegate might have a mutable context pointer in D, exceptions may cross thread lines when a thread is terminated (the Thread.join called from the parent may return a thrown exception that killed a thread), and pure functions can be promoted to immutable after allocation, so how would the GC know to allocate it in the immutable heap?&lt;/p&gt;
  12292.  
  12293. &lt;p&gt;He proposes some possible solutions: make a generational gc for immutable info, add better ref escape checks and automatically free them, moving to the stack if possible, and improve the inliner for maximum effect of these other ideas.&lt;/p&gt;
  12294.  
  12295. &lt;hr /&gt;
  12296.  
  12297. &lt;p&gt;Finally, we closed out Wednesday with a long &lt;b&gt;ask us anything&lt;/b&gt; segment, where people grilled Walter and Andrei.&lt;/p&gt;
  12298.  
  12299. &lt;p&gt;The following is my notes from the session, roughly formated. It is &lt;b&gt;NOT&lt;/b&gt; a transcript and likely includes some mistakes by me, but should give you a jist of the discussion.&lt;/p&gt;
  12300.  
  12301.  
  12302. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;David:&lt;/strong&gt; will we keep the whole race condition undefined behavior
  12303.  memory model? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; yes, but low pressure on it because of
  12304.  explicit sharing. Defining shared and shared/unshared
  12305.  interaction is the important bit to do. Shared is too
  12306.  restricted and poorly defined but an important start.
  12307.  David: Lock-free data structure is desired, the problem
  12308.  is still existing. Andrei: it is still a smaller problem.&lt;/div&gt;&lt;/div&gt;
  12309. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; Allocators, when? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; probably two releases away.
  12310.  his talk will be about it more in &amp;quot;Generics must go&amp;quot;.&lt;/div&gt;&lt;/div&gt;
  12311. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; back to memory model, shared isn't enough, we need
  12312.  volatile too. &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; volatile and sequential consistency
  12313.  is separate. volatile load and store in druntime is for
  12314.  stuff like mem mapped i/o and interrupts. Andrei: we can
  12315.  do in lib. Liran: it should be in the language for efficiency
  12316.  and simplicity. Walter: it might be magic intrinsic functions.
  12317.  Liran: that can be ok but there's finer things in the mix
  12318.  too to get every bit of cpu.&lt;/div&gt;&lt;/div&gt;
  12319. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; any plans of concurrent GC? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; Martin was going
  12320.  to talk about it but he wasn't able to be here. Amaury:
  12321.  problem is we can't regen code like a VM, so write barrier
  12322.  is the tricky bit and he's not sure there is a good solution
  12323.  if most the data is not immutable.&lt;/div&gt;&lt;/div&gt;
  12324. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Amuary:&lt;/strong&gt; the Java volatile thing can help with all this stuff.&lt;/div&gt;
  12325. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Robert:&lt;/strong&gt; std.stream has been out of date for three years
  12326.  tomorrow.... &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; meh nobody really cares. We might
  12327.  just remove it&lt;/div&gt;&lt;/div&gt;
  12328. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; What's the state of C++ interface. &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; might talk
  12329.  about it later. No change since NWCPP three months ago. Needs
  12330.  to work with STL still. Andrei: other things have taken
  12331.  priority.&lt;/div&gt;&lt;/div&gt;
  12332. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; Phobos forces GC. Do you plan to change this?
  12333.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; yes, the range stuff should really change this,
  12334.  not 100% but should get to 90%. Andrei: maybe refcounting
  12335.  and ownership management too but it is mostly just work
  12336.  to get done. Liran: ARC? Andrei: language solution of
  12337.  some sort with control.&lt;/div&gt;&lt;/div&gt;
  12338. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;idk:&lt;/strong&gt; D foundation? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; by the end of the year. Want a
  12339.  subscription model for donations to forward work on D.&lt;/div&gt;&lt;/div&gt;
  12340. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;idk2:&lt;/strong&gt; consume a range in a single pass while doing multiple
  12341.  operations, does the article fall apart? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; Spolsky
  12342.  wrote an article about leaky abstractions. Sometimes you
  12343.  still need to write a loop, ranges can't do everything.&lt;/div&gt;&lt;/div&gt;
  12344. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; will tuple unpacking ever get pulled? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; idk,
  12345.  I haven't looked that closely. Andrei: probably but is
  12346.  that it? Need to analyze whole design. Commenter: it has
  12347.  been sitting for a long time, what moves it forward?
  12348.  Andrei: this question will do it, but generally, we need
  12349.  to up the decisiveness and stop leaving things hanging or
  12350.  bogged down in giant discussions over small details.
  12351.  Walter: want to get ddmd done. Daniel: very very close.
  12352.  Walter: not good enough!&lt;/div&gt;&lt;/div&gt;
  12353. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; Python's keyword argument thing is nice. Can we have it?
  12354.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; named arguments is negatory cuz of overloading, it
  12355.  gets too confusing. Comment: can we do named instead of
  12356.  overloading? So they don't mix? Walter: should D do it all
  12357.  or just offer one way? How common is this? Probably not that
  12358.  common and the config struct is good enough. It isn't a
  12359.  blocker. Liran: it is really nice though. We could figure it
  12360.  out. If we wrote it, would you consider it? Andrei: is it
  12361.  that important? Is this more important than gc-less phobos?
  12362.  Liran: Well, we don't use phobos so..... Walter: is this
  12363.  the best thing we can spend time on? Liran: when I explain
  12364.  D to people, we call it &amp;quot;Python that compiles&amp;quot;. This is
  12365.  an important selling point for high level stuff, sugar is
  12366.  good. Walter: every day people propose new features, I have
  12367.  to say no. Commenter: variadic templates and reflect, been
  12368.  written!
  12369.  EDITOR NOTE: I still want with(SomeStruct()) for easier config&lt;/div&gt;&lt;/div&gt;
  12370. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Brian:&lt;/strong&gt; I want to clean stuff up. Question tho: return ref
  12371.  examples return ref to inside struct. If you have a container
  12372.  that gives a struct with pointers back to the ocntainer, will
  12373.  this keep you safe? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; the impl of the struct is
  12374.  responsible for encapsulating more things with private and
  12375.  such. Andrei: the language helps but it doesn't do it all,
  12376.  like the range should increase count of container if needed.
  12377.  Walter: it is not transitive, you still need to DIY&lt;/div&gt;&lt;/div&gt;
  12378. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;John:&lt;/strong&gt; properties! &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; this needs to be simplified, it
  12379.  should just do edge cases with @property. Walter: we never
  12380.  wrote it down, need to revisit. John: we just want a solution
  12381.  to expect.&lt;/div&gt;&lt;/div&gt;
  12382. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; alias expressions to member to member implemented?
  12383.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; idk. Andrei: needs enhancement request. Going into
  12384.  it beats principle. Walter: it sounds possible but do we
  12385.  want to do that? It can get super complex. Probably answer
  12386.  is &amp;quot;no&amp;quot;.&lt;/div&gt;&lt;/div&gt;
  12387. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Robert:&lt;/strong&gt; what kind of libraries do you hope in Phobos? Units?
  12388.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; can't we do what APL does? Andrei: he is hoping
  12389.  for like most useful Go libs impled in D. Batteries included
  12390.  phobos would be good. LIBRARY GAP!!!!!!!!! Liran: goroutines
  12391.  are just marketed fibers. Andrei: we want fibers to be
  12392.  streamlined to compete with goroutines... Walter: fibers
  12393.  need to be movable between threads.&lt;/div&gt;&lt;/div&gt;
  12394. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Atila:&lt;/strong&gt; when are we going to get vibe.d tasks in Phobos?
  12395.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; when someone writes it. Andrei: i also want to
  12396.  see lexing and parsing of D in Phobos and vibed too.
  12397.  Walter: ddmd can do multicore, we need to move over.&lt;/div&gt;&lt;/div&gt;
  12398. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Daniel:&lt;/strong&gt; dub was moved to DPL, what is the further plan?
  12399.  &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; maybe package with the compiler. Want to package
  12400.  dfmt too. Brian: dfix too!&lt;/div&gt;&lt;/div&gt;
  12401. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;idk3:&lt;/strong&gt; complicated generic code in signatures is scary. Can
  12402.  we get sugar for taking input range and such? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt;  problem is constraints are often more complicated than
  12403.  that... and like 12 overloads with different constraints
  12404.  is super complex looking but it is actually kinda simple.
  12405.  Maybe refactoring it to be static if internally will help
  12406.  the external look too. Andrei: opposed to this! Agree it
  12407.  is a doc issue and specializations shouldn't spill into
  12408.  the interface but i think real fix is not static if which
  12409.  can break impl, but the doc needs overhaul for it.&lt;/div&gt;&lt;/div&gt;
  12410. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Mark:&lt;/strong&gt; can we tell if an exception is currently in flight, so
  12411.  like debug if exception is flying through debugger. &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt;  that is just a runtime function but yes we should do it.
  12412.  Make an ER.&lt;/div&gt;&lt;/div&gt;
  12413. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; will macro system be implemented? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Andrei:&lt;/strong&gt; no.
  12414.  Walter: indeed, no.&lt;/div&gt;&lt;/div&gt;
  12415. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; is C++17 a threat? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; no. D will replace all
  12416.  languages. Andrei: C++ is playing catchup with D and
  12417.  growing by accretion. I want to destroy C++. It is too
  12418.  big for its own good and we are ahead. Walter: yes, C++
  12419.  gets better all the time, but so does D.&lt;/div&gt;&lt;/div&gt;
  12420. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;idk4:&lt;/strong&gt; used variadic template inputs and a struct, I can show
  12421.  the code. &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; cool post to ng. Andrei: lots of people
  12422.  wanted to quit C++ when Java was big in the 90's, but then
  12423.  C++ came back because there was good enough stuff people
  12424.  could use and libraries started to explode. Libraries need
  12425.  to be done and stopping the language can help with it.
  12426.  We gotta stop adding features and start exploring features.&lt;/div&gt;&lt;/div&gt;
  12427. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; libdparse needs to be in phobos but keep up with the
  12428.  right dmd. &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Brian:&lt;/strong&gt; lexer generator at least. Andrei: i like
  12429.  the lexer generator. I want libdparse to be a competitor,
  12430.  outside expert, that checks on ddmd. I want ddmd to be
  12431.  the library parser and libdparse checks on it independently.
  12432.  Brian: makes sense, without a separate project those bugs
  12433.  wouldn't have been found.&lt;/div&gt;&lt;/div&gt;
  12434. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Liran:&lt;/strong&gt; static if rox. where's static foreach? where's version
  12435.  with logical stuff? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; no, i refuse because version
  12436.  gets so ugly like preprocessor #if. You can do better with
  12437.  simple stuff, I'll show how. Andrei: I agree but hate him
  12438.  for it. But static if rox. static foreach is needed.&lt;/div&gt;&lt;/div&gt;
  12439. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; final should be default.&lt;/div&gt;
  12440. &lt;div class=&quot;question&quot;&gt;&lt;strong&gt;Online:&lt;/strong&gt; Will bug 314 be fixed (module system)? &lt;div class=&quot;answer&quot; style=&quot;padding-left: 1em;&quot;&gt;&lt;strong&gt;Walter:&lt;/strong&gt; maybe
  12441.  eventually. Commentator: there is a PR for it that is
  12442.  considered good and Martin wants to merge. Breaks lots
  12443.  of code tho and wants deprecation strat. Andrei: these bugs
  12444.  need to be fixed. The holes in module system need to be fixed.&lt;/div&gt;&lt;/div&gt;
  12445.  
  12446.  
  12447. &lt;h3&gt;Thursday and Friday sessions&lt;/h3&gt;
  12448.  
  12449. &lt;p&gt;The remaining days of DConf will be summarized in later issues, and we'll revisit links to videos once the professionally recorded files are made available. Keep reading next week!&lt;/p&gt;
  12450.  
  12451. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  12452.  
  12453. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;new page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  12454.  
  12455. &lt;h2&gt;In the community&lt;/h2&gt;
  12456.  
  12457. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12458.  
  12459. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/syueiglkdunuwygekvnc@forum.dlang.org&quot;&gt;DevDocs.io: voting for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ranqlmrjornlvopsuris@forum.dlang.org&quot;&gt;Reggae: a metabuild system in D (Daniel, you should read this). Now with more dub. And package builds.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ikvvzpkpjsetkveptqkd@beta.forum.dlang.org&quot;&gt;Coedit version 1 rc1 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zqpduulezhtlsmyoytur@forum.dlang.org&quot;&gt;Arch Linux D package update&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vwkzgbnxvnteefldlvfi@forum.dlang.org&quot;&gt;Reggae binary backend: build your project with a D compiled executable&lt;/a&gt;
  12460. &lt;/li&gt;&lt;/ul&gt;
  12461.  
  12462. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12463.  
  12464. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12465.  
  12466. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pflkijjjuyyhextxvdnn@forum.dlang.org&quot;&gt;Lets talk about fibers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mjrpgappbhslmkmcrluk@forum.dlang.org&quot;&gt;Negation of attributes (DIP 79)&lt;/a&gt;
  12467. &lt;/li&gt;&lt;/ul&gt;
  12468.  
  12469. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12470.  
  12471.  
  12472. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12473. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12474. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12475. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12476. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12477. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12478. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12479. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12480. &lt;/li&gt;&lt;/ul&gt;
  12481.  
  12482.  
  12483. &lt;/div&gt;
  12484. </description></item><item><title>Issue #20</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/may-31.html</link><guid>http://arsdnet.net/this-week-in-d/may-31.html</guid><pubDate>Sun, 31 May 2015 12:00:00 GMT</pubDate><description>
  12485. &lt;div id=&quot;body-container&quot;&gt;
  12486. &lt;h1&gt;
  12487. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12488. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12489. &lt;span id=&quot;title-date&quot;&gt;May 31, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12490.  
  12491.  
  12492. &lt;div id=&quot;preface&quot;&gt;
  12493.  
  12494. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12495.  
  12496. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12497.  
  12498. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12499.  
  12500. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12501.  
  12502. &lt;/div&gt;
  12503.  
  12504. &lt;h2&gt;Statistics&lt;/h2&gt;
  12505.  
  12506. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-05-24&amp;amp;chfieldto=2015-05-31&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;13 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12507. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-05-24&amp;amp;chfieldto=2015-05-31&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;16 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12508. 52 pull requests merged into the language:
  12509.  
  12510. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-24..2015-05-31&quot;&gt;18 into DMD&lt;/a&gt;,
  12511. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-24..2015-05-31&quot;&gt;29 into Phobos&lt;/a&gt;, and
  12512. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-24..2015-05-31&quot;&gt;5 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12513. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-24..2015-05-31&quot;&gt;1 pull request merged into the website.&lt;/a&gt;
  12514. &lt;/li&gt;&lt;/ul&gt;
  12515.  
  12516. &lt;h2&gt;DConf 2015&lt;/h2&gt;
  12517.  
  12518. &lt;p&gt;DConf 2015 was this past week! About 30 men gathered in person at Utah Valley University for about nine hours a day over three days to discuss D, with the majority of the conference also being livestreamed over Youtube to many other people.&lt;/p&gt;
  12519.  
  12520. &lt;p&gt;The conference was also professionally recorded and those videos will be made available later, once editing is finished.&lt;/p&gt;
  12521.  
  12522. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; had an intrepid report on-site for the conference all three days.&lt;/p&gt;
  12523.  
  12524. &lt;h3&gt;Major announcements&lt;/h3&gt;
  12525.  
  12526. &lt;p&gt;Walter and Andrei were asked if a macro system was coming to D. They both answered flatly: no.&lt;/p&gt;
  12527.  
  12528. &lt;p&gt;DConf 2016 has already been announced: it will be held in Berlin, Germany, graciously hosted by &lt;a href=&quot;https://www.sociomantic.com/&quot;&gt;Sociomantic &lt;/a&gt;, a company whose major infrastructure is written in D and is &lt;a href=&quot;https://www.sociomantic.com/careers/&quot;&gt;always looking for talented D programmers for their back end as well as developers for their web front end and various other positions&lt;/a&gt;.&lt;/p&gt;
  12529.  
  12530. &lt;h3&gt;Wednesday Morning Session&lt;/h3&gt;
  12531.  
  12532. &lt;p&gt;&lt;b&gt;Walter Bright&lt;/b&gt; kicked off the conference with a talk on memory allocation and performance. &lt;a href=&quot;http://dconf.org/2015/talks/bright.pdf&quot;&gt;Walter's slides are online.&lt;/a&gt;&lt;/p&gt;
  12533.  
  12534. &lt;p&gt;He started by outlining allocation strategies with pros and cons - garbage collection, reference counting, and manual management - arguing none of them are quite ideal.&lt;/p&gt;
  12535.  
  12536. &lt;p&gt;The thrust of his talk was to use lazy, non-allocating ranges as much as possible to write code that does not need to allocate memory at all until the last possible moment. Then, it should leave the allocation strategy up to the high-level user who will have more understanding about the data's lifetime and usage pattern. Then, and only then, can the programmer pick an optimal strategy.&lt;/p&gt;
  12537.  
  12538. &lt;p&gt;He issued a call to action to scrutinize all functions that return arrays and examine if they can be made to return a range instead, to make Phobos more efficient and friendly to GC-less (and other allocation free) programming.&lt;/p&gt;
  12539.  
  12540. &lt;p&gt;Walter also teased us with extended language support for ranges, but these probably aren't actually going to happen - the library can already do it, and he made a point about how people get too excited over a cosmetic language change relative to a more functional library paradigm.&lt;/p&gt;
  12541.  
  12542. &lt;hr /&gt;
  12543.  
  12544. &lt;p&gt;Next, &lt;b&gt;Daniel Murphy&lt;/b&gt; (aka yebblies) talked about the ddmd project - translating the DMD source code from C++ to D. His slides are available &lt;a href=&quot;http://dconf.org/2015/talks/murphy.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  12545.  
  12546. &lt;p&gt;He started by explaining the why: why move from C++ to D? &lt;i&gt;Editor's note: I'd like to point out that these reasons can apply to other C++ code bases too. Sometimes, porting existing code to a new language isn't worth it, but sometimes it is and the option ought to be explored in your individual case.&lt;/i&gt; Among the reasons he listed was that D is generally more pleasant to write improving morale, easier to refactor, takes less time working around C++ quirks, and offers new features that can improve performance.&lt;/p&gt;
  12547.  
  12548. &lt;p&gt;The problem is porting code to a new language is non-trivial. dmd has about 120,000 lines of code and about twenty pull requests per week, so it is big and moving. These problems make porting by hand and rewriting from scratch pretty unrealistic options. (Though, SDC, a rewrite from scratch, is progressing as a third-party compiler.)&lt;/p&gt;
  12549.  
  12550. &lt;p&gt;To solve these problems, Daniel shows how an automatic conversion program was written.&lt;/p&gt;
  12551.  
  12552. &lt;p&gt;His first try was to translate the code on a lexical level, replacing tokens in the string after running the C++ preprocessor. This got agonizing close... but couldn't go the whole way because the preprocessor code is important and the remaining changes become skyrocketingly difficult.&lt;/p&gt;
  12553.  
  12554. &lt;p&gt;An AST converter was also thwarted by the incredibly difficult final 5% of work as well as the complication of porting preprocessor code. &lt;i&gt;The preprocessor brings the wrath of many programmers trying to translate C or C++ - it is a different language that needs to be handled too, combining the semantics of both the preprocessor and actual language into one language - the target D code - is practically impossible in the general case, even for humans. This is one reason why D ditched the idea of a preprocessor.&lt;/i&gt; Another difficulty with this approach was keeping comments in the new code - since the converted D is meant to be used by humans, keeping comments in the right place was also important.&lt;/p&gt;
  12555.  
  12556. &lt;p&gt;Instead, Daniel describes how he was able to simplify the task at hand to make it doable. Instead of trying to cover all C++, he would just cover the easy parts of C++, no error handling, using just what dmd does, and he'd modify the dmd source itself at times to make it easier to handle. So, basically, the magicport conversion is a hand-port assisted automatic process.&lt;/p&gt;
  12557.  
  12558. &lt;p&gt;Preprocessor rules were chief among the code that had to be hand-simplified to expedite the automatic conversion process. Also, dmd's code style was to declare all functions for a class in the header, then implement them in files based on related functionality, not by class. So, for example, each class would have a toJSON method, and then toJSON functions for all classes were defined in the json.c[pp] file instead of spread across various class implementation files. This style was not conducive to conversion to D, so the C++ source was refactored to instead use a visitor class, which was easy to convert automatically.&lt;/p&gt;
  12559.  
  12560. &lt;p&gt;Even after this, a handful of source files had to be manually ported. However, with the bulk of the work done automatically, it was possible to keep up with changes to the C++ source as they happened, meaning development did not need to stop as the conversion happened, and there was room to experiment with improvements.&lt;/p&gt;
  12561.  
  12562. &lt;p&gt;As a result, a lot of work was done on the C++ source and the magicport file is a load of hacks... but it worked and created compilable D code. Daniel describes, however, that this was not the end of the work. The code still had to link - including the new D frontend and the C++ backend - and, of course, to run correctly. This prompted him to do a lot of work on improved C++ interoperation and a few codegen bugs, as the converted C++ source exercised a different part of D than typical D code.&lt;/p&gt;
  12563.  
  12564. &lt;p&gt;The remaining issues were hacked around and ddmd now works! The main blocker to getting it mainlined is performance and is expected to be fixed within a couple months when gdc and ldc get updated to the newest D code. Daniel notes that gdc and ldc will also benefit from the change, in that the frontend forks should all be unified, allowing them to work with much less maintenance work for new releases.&lt;/p&gt;
  12565.  
  12566. &lt;p&gt;Existing pull requests should still work as they too can be automatically converted and rebased against the D code, without requiring a lot of manual effort.&lt;/p&gt;
  12567.  
  12568. &lt;p&gt;This effort has taken over two years to complete and accounts for about 8% of all dmd pull requests at this time (though Daniel noted that most of them were small changes).&lt;/p&gt;
  12569.  
  12570. &lt;p&gt;Daniel concluded by noting how this approach might work with other projects. It is a lot of work and needs to modify the original source, but it does not need to pause development of the original code and yields benefits long term. He notes, however, that his magicport should NOT be expected to work as-is on other projects; the concept is more reusable than the code.&lt;/p&gt;
  12571.  
  12572. &lt;hr /&gt;
  12573.  
  12574. &lt;p&gt;At 11:00 am on Wednesday, &lt;b&gt;Brian Schott&lt;/b&gt; (aka hackerpilot - he explains he is also an aviator) took to the mic to talk about the D tools he has written and the grammar issues he found in the process. His slides can be downloaded &lt;a href=&quot;http://dconf.org/2015/talks/schott.zip&quot;&gt;from the dconf.org website&lt;/a&gt;.&lt;/p&gt;
  12575.  
  12576. &lt;p&gt;Brian, in a similar fashion to his lightning talk last year, used humor quickly, making a list of bad ideas early in his talk to segue into the work he has been doing.&lt;/p&gt;
  12577.  
  12578. &lt;p&gt;He discussed &lt;a href=&quot;https://github.com/Hackerpilot/dfmt/&quot;&gt;dfmt&lt;/a&gt;, a D style lint and formatter including a fuzzy length algorithm, which judges breaking line length limits against how ugly the code would become split into multiple lines. &lt;i&gt;Editor's note: as a user of the rubocop lint for Ruby which includes a line limit checker which often, in my opinion, leads to uglier code to pass its checks, I found this a very fascinating feature.&lt;/i&gt;&lt;/p&gt;
  12579.  
  12580. &lt;p&gt;He went on to discuss &lt;a href=&quot;https://github.com/Hackerpilot/dcd/&quot;&gt;dcd&lt;/a&gt;, a D completion daemon which uses a client and server model to provide an editor-agnostic (or IDE-agnostic) code completion, function call help, goto defintiion, and related functionality. He did a live demo and described its architecture.&lt;/p&gt;
  12581.  
  12582. &lt;p&gt;When optimizing its performance, Brian moved to fewer allocations and garbage collector use. He noted the trade-off of this approach - while he was able to improve performance, it came at the cost of more debugging work, as manual memory management was tricky to get right in all cases. His biggest problem was making sure manually allocated memory was appropriately scanned for GC objects, to avoid false-free bugs.&lt;/p&gt;
  12583.  
  12584. &lt;p&gt;Brian next discussed &lt;a href=&quot;https://github.com/Hackerpilot/harbored/&quot;&gt;harbored&lt;/a&gt;, a doc generation tool. (The source of the name is that boats are docked at a harbor... so documentation, docs, implies harbor...)&lt;/p&gt;
  12585.  
  12586. &lt;p&gt;Unlike the built-in doc generation, harbored uses the same syntax but a different approach - just looking at the source code rather than a fully analyzed AST. The advantages of this include original type names rather than resolved aliases for easier readability, platform-agnostic docs (it works across version statements), and the ability to generate docs for one file without needing the entire import tree to run the compiler.&lt;/p&gt;
  12587.  
  12588. &lt;p&gt;The next tool Brian demonstrated is his &lt;a href=&quot;http://github.com/Hackerpilot/dscanner/&quot;&gt;dscanner&lt;/a&gt;, a multi-use scanner and lint program for D code. Dscanner is able to find problematic source forms (such as &lt;tt&gt;if(a==a)&lt;/tt&gt;, an obviously-always-true and thus useless, or at the very least, confusingly operator overloaded, statement and warning about it) as well as D-aware grep-like functionality.&lt;/p&gt;
  12589.  
  12590. &lt;p&gt;One of the things he demonstrated was a find declaration function. By running &lt;tt&gt;dscanner -d some_symbol_name source/*.d&lt;/tt&gt;, the program immediately spit out the file, line, and column numbers of the function declaration. This is advantaged over plain grep because grepping for a definition isn't always easy - knowing the pattern for the return value, for example, is not always obvious (indeed, you might want the definition to read the return values!) and searching for &lt;tt&gt;name&lt;/tt&gt;, for example, turns up a lot of calls as well as the definition - giving a lot of false-positivies to wade through. Dscanner skips all this and goes straight to the meat.&lt;/p&gt;
  12591.  
  12592. &lt;p&gt;Brian showed how this is just the beginning of what Dscanner can do. He also demoed outline printing, showing a class with its members printed to the console, ctags generation for use in editors, and an upload to SonarQube, a bug report dashboard his company uses for quality assurance.&lt;/p&gt;
  12593.  
  12594. &lt;p&gt;Next, Brian talked about the library he wrote to support these tools, &lt;a href=&quot;https://github.com/Hackerpilot/libdparse&quot;&gt;libdparse&lt;/a&gt;, and the challenges in implementing it efficiently. He started by pointing out that writing a D lexer and parser was easier said than done.&lt;/p&gt;
  12595.  
  12596. &lt;p&gt;Among the tips he offered were: use &lt;tt&gt;perf&lt;/tt&gt; (a performance profiler), compile with ldc or gdc, &lt;tt&gt;perf&lt;/tt&gt; some more, and optimize algorithms, for example, using a binary search instead of a large switch statement. &lt;i&gt;Editor's note: the string switch implementation is a binary search over a sorted list of cases, but Brian's implementation must be better optimized for his specific data set than the generic implementation in druntime.&lt;/i&gt;&lt;/p&gt;
  12597.  
  12598. &lt;p&gt;He also noted that SIMD is not necessarily a magic bullet for these tasks, but can be used to optimize cases by scanning for cases where further analysis is certainly useless. His tip was to write basic code that always works, then SIMD filters to avoid looking deeper when possible.&lt;/p&gt;
  12599.  
  12600. &lt;p&gt;Brian then returned to some good-point-backed humor by pointing out silly aspects of the D grammar. As the language has grown, some bizarre cases have developed. As Brian wrote his independent implementation of the lexer and parser, he found several bugs in the spec (where the documentation did not match the behavior of dmd) and bugs in the compiler (where dmd's implementation does silly things). He showed a few notable examples, such as &lt;tt&gt;int[] i(T) = 10;&lt;/tt&gt;, which was introduced by a change that meant to just enable short-form template alias statements and ambiguous empty catch blocks.&lt;/p&gt;
  12601.  
  12602. &lt;p&gt;Brian explained how he'd like to fix these issues, but recognizes that it may break some code. As a response, he wrote &lt;a href=&quot;https://github.com/Hackerpilot/dfix/&quot;&gt;dfix&lt;/a&gt;, a program to automatically fix code and aid in migration to new compiler versions and showed it in his talk.&lt;/p&gt;
  12603.  
  12604. &lt;p&gt;Finally, he discussed some future directions for dfix, such as making it into a more generic code refactoring tool, starting with the ability to rename a module or function and have the instances of it automatically updated (which is harder than it might sound due to scoping and importing rules, but dfix can parse D code and understand what name actually refers to the changed symbol and which one is a separate variable with the same name).&lt;/p&gt;
  12605.  
  12606. &lt;p&gt;&lt;i&gt;Editor's note: I have been aware of Brian's tools for some time, often noting a new release in This Week in D, but I never wanted to actually try them until this talk. If you are skeptical like me, give this talk a closer look and consider trying it. I was pretty impressed, enough to download the programs and start playing with them. While I haven't yet used them for anything serious, I can see that Brian did nice work and am looking forward to exploring these in more depth.&lt;/i&gt;&lt;/p&gt;
  12607.  
  12608. &lt;hr /&gt;
  12609.  
  12610. &lt;p&gt;After Brian's talk, we breaked for lunch, ending the Wednesday morning session.&lt;/p&gt;
  12611.  
  12612. &lt;p&gt;The remaining five sessions of DConf 2015 will be reported on in future editions of This Week in D, so be sure to watch for next week's issue! Also watch out for our announcement for when the videos are available. In the mean time, &lt;a href=&quot;http://forum.dlang.org/thread/mki78kk5@digitalmars.com?page=4#post-sntoieoitgwrcywcmvwy:40forum.dlang.org&quot;&gt;this post&lt;/a&gt; lists the starting times of each talk in the recorded ad-hoc livestream. (Note that the coming recordings will be of much higher quality; the livestream was done at the last minute by an attendee using his webcam.)&lt;/p&gt;
  12613.  
  12614. &lt;p&gt;From the ditor: Please note that it is my plan to finish these write-ups
  12615. within the next two weeks, not six, but I have not yet returned home; I still
  12616. had other business in Utah and my time is limited with that and the trip
  12617. back.&lt;/p&gt;
  12618.  
  12619. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  12620.  
  12621. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;new page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  12622.  
  12623. &lt;h2&gt;In the community&lt;/h2&gt;
  12624.  
  12625. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12626.  
  12627. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/thread/rsjjypmygrmxiofwxtnu@forum.dlang.org&quot;&gt;DerelictMantle - unofficial, experimental, reverse-engineered&lt;/a&gt;&lt;/li&gt;
  12628. &lt;/ul&gt;
  12629.  
  12630. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12631.  
  12632. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12633.  
  12634. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mkg3sm$1bk4$1@digitalmars.com&quot;&gt;Make dub part of the standard dmd distribution&lt;/a&gt; talks about including dub with dmd and people's criticism of it as a build tool or package manager, with proposed solutions.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mkg4es$1c18$1@digitalmars.com&quot;&gt;Entry point a la &amp;quot;git&amp;quot; or &amp;quot;go&amp;quot;&lt;/a&gt; discusses pros and cons of putting the D tools under a common command namespace with greater integration amongst them.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mailman.284.1432823930.7663.digitalmars-d@puremagic.com&quot;&gt;Why aren't you using D at work?&lt;/a&gt; discusses people's successes and failures in using D professionally. Many of the failures come because the company's existing code and processes are good enough for them and switching doesn't look appealing in the short term or that D's tools aren't a good fit for their company (sometimes not good enough, sometimes just too different). And more discussion.
  12635. &lt;/li&gt;&lt;/ul&gt;
  12636.  
  12637. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12638.  
  12639.  
  12640. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12641. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12642. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12643. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12644. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12645. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12646. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12647. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12648. &lt;/li&gt;&lt;/ul&gt;
  12649.  
  12650.  
  12651. &lt;/div&gt;
  12652. </description></item><item><title>Issue #19</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/may-24.html</link><guid>http://arsdnet.net/this-week-in-d/may-24.html</guid><pubDate>Sun, 24 May 2015 12:00:00 GMT</pubDate><description>
  12653. &lt;div id=&quot;body-container&quot;&gt;
  12654. &lt;h1&gt;
  12655. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12656. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12657. &lt;span id=&quot;title-date&quot;&gt;May 24, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12658.  
  12659.  
  12660. &lt;div id=&quot;preface&quot;&gt;
  12661.  
  12662. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12663.  
  12664. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12665.  
  12666. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12667.  
  12668. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12669.  
  12670. A somewhat stubby week as we prepare for the DConf blowout in the coming days.
  12671. &lt;/div&gt;
  12672.  
  12673. &lt;h2&gt;Statistics&lt;/h2&gt;
  12674.  
  12675. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-05-17&amp;amp;chfieldto=2015-05-24&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;21 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12676. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-05-17&amp;amp;chfieldto=2015-05-24&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;19 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12677. 52 pull requests merged into the language:
  12678.  
  12679. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-17..2015-05-24&quot;&gt;17 into DMD&lt;/a&gt;,
  12680. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-17..2015-05-24&quot;&gt;29 into Phobos&lt;/a&gt;, and
  12681. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-17..2015-05-24&quot;&gt;6 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12682. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-17..2015-05-24&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  12683. &lt;/li&gt;&lt;/ul&gt;
  12684.  
  12685. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  12686.  
  12687. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;new page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  12688.  
  12689. &lt;h2&gt;In the community&lt;/h2&gt;
  12690.  
  12691. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  12692. &lt;p&gt;DConf 2015 is in this upcoming week!&lt;/p&gt;
  12693.  
  12694. &lt;p&gt;Due to the absence of Don Clugson, &lt;a href=&quot;http://forum.dlang.org/thread/mjt9c4$1qti$1@digitalmars.com&quot;&gt;Joseph Wakeling has been chosen as a substitute&lt;/a&gt; and will speak on random number generation.&lt;/p&gt;
  12695.  
  12696. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12697.  
  12698. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mjinam$31cp$2@digitalmars.com&quot;&gt;QDBM &amp;quot;depot.c&amp;quot; translated to D, a key-value storage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mjgf11$31co$8@digitalmars.com&quot;&gt;LMDB (Symas Lightning MDB) bindings&lt;/a&gt;
  12699. &lt;/li&gt;&lt;/ul&gt;
  12700.  
  12701. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12702.  
  12703. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12704.  
  12705. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mjeh00$25j7$1@digitalmars.com&quot;&gt;0 is not a power of 2&lt;/a&gt; discussed power-of-two algorithms with efficient code generation.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vixoqmidlbizawbxmsao@forum.dlang.org&quot;&gt;shared libs for OSX&lt;/a&gt; inquired as to what doesn't work in OS X shared libs. The answer is TLS and other bits. A solution raised was to try to make a Phobos/duntime dylib and use it, similar to how Linux .so's work with druntime now.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mvtttejetldncwidgvaa@forum.dlang.org&quot;&gt;Request for Features/Ideas: A std.archive package&lt;/a&gt; talked about adding archive formats like tar and rar to Phobos. There are already modules for zip and gzip, though the std.zip module is somewhat buggy. Pros and cons of using libarchive are discussed.
  12706. &lt;/li&gt;&lt;/ul&gt;
  12707.  
  12708. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12709.  
  12710.  
  12711. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12712. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12713. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12714. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12715. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12716. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12717. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12718. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12719. &lt;/li&gt;&lt;/ul&gt;
  12720.  
  12721.  
  12722. &lt;/div&gt;
  12723. </description></item><item><title>Issue #18</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/may-17.html</link><guid>http://arsdnet.net/this-week-in-d/may-17.html</guid><pubDate>Sun, 17 May 2015 12:00:00 GMT</pubDate><description>
  12724. &lt;div id=&quot;body-container&quot;&gt;
  12725. &lt;h1&gt;
  12726. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12727. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12728. &lt;span id=&quot;title-date&quot;&gt;May 17, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12729.  
  12730.  
  12731. &lt;div id=&quot;preface&quot;&gt;
  12732.  
  12733. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12734.  
  12735. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12736.  
  12737. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12738.  
  12739. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12740.  
  12741. &lt;/div&gt;
  12742.  
  12743. &lt;h2&gt;Statistics&lt;/h2&gt;
  12744.  
  12745. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-05-10&amp;amp;chfieldto=2015-05-17&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;20 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12746. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-05-10&amp;amp;chfieldto=2015-05-17&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;22 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12747. 59 pull requests merged into the language:
  12748.  
  12749. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-10..2015-05-17&quot;&gt;21 into DMD&lt;/a&gt;,
  12750. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-10..2015-05-17&quot;&gt;18 into Phobos&lt;/a&gt;, and
  12751. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-10..2015-05-17&quot;&gt;20 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12752. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-10..2015-05-17&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  12753. &lt;/li&gt;&lt;/ul&gt;
  12754.  
  12755. &lt;h2&gt;Open D Jobs&lt;/h2&gt;
  12756.  
  12757. &lt;p&gt;A &lt;a href=&quot;http://wiki.dlang.org/Jobs&quot;&gt;new page has been added to the D Wiki listing open D jobs&lt;/a&gt;. Take a look if you're interested, and add yours if you know of one that is available!&lt;/p&gt;
  12758.  
  12759. &lt;h2&gt;Major changes&lt;/h2&gt;
  12760.  
  12761. &lt;p&gt;&lt;tt&gt;std.typetuple&lt;/tt&gt; was &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pull/3265&quot;&gt;renamed&lt;/a&gt; to &lt;tt&gt;std.meta&lt;/tt&gt;.&lt;/p&gt;
  12762.  
  12763. &lt;p&gt;Destructors and postblits that handle child objects as well are &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pull/4650&quot;&gt;now available&lt;/a&gt; to user code without complex workarounds which will aid manual memory management correctness.&lt;/p&gt;
  12764.  
  12765. &lt;h2&gt;In the community&lt;/h2&gt;
  12766.  
  12767. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  12768. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mjbgsv$1l36$1@digitalmars.com&quot;&gt;Monday is last day for DConf 2015 registrations&lt;/a&gt; - the conference is a little over one week away!&lt;/p&gt;
  12769.  
  12770. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12771.  
  12772. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mip4va$2v66$1@digitalmars.com&quot;&gt;Walter Bright: Just Submitted my proposal for Strange Loop 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kohkwmdvphepgqyzxfco@forum.dlang.org&quot;&gt;Wiki table for available compiler packages by platform/OS&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/miri9k$2p5$1@digitalmars.com&quot;&gt;D talk at Silicon Valley ACCU&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wqpnpipxxmtxzhgoynph@forum.dlang.org&quot;&gt;dfmt 0.3.5&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rmdnjwbcnajbywbonsoa@forum.dlang.org&quot;&gt;dexpect 0.0.2 - very alpha&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/scaufixfdyyrbmijgitf@forum.dlang.org&quot;&gt;D needs...&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mj71gi$33l$1@digitalmars.com&quot;&gt;Visual D 0.3.41 released&lt;/a&gt;
  12773. &lt;/li&gt;&lt;/ul&gt;
  12774.  
  12775. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12776.  
  12777. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12778.  
  12779. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mj57ad$1bbm$1@digitalmars.com&quot;&gt;std.allocator.allocate(0) -&amp;gt; return null or std.allocator.allocate(1)?&lt;/a&gt; asks what allocating zero bytes should do. The decision is that it will return &lt;tt&gt;null&lt;/tt&gt;, which is consistent with &lt;tt&gt;realloc(ptr, 0)&lt;/tt&gt;, which frees the memory pointed to.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nbbvprebljqlnldrvqay@forum.dlang.org&quot;&gt;DLL symbol identity&lt;/a&gt; continues to be discussed and can have major implications on D shared libraries in Windows. A decision has been reached: D DLLs will be changed on Windows to work more like they do on Linux, with consistent symbol identity, which will make casting and other operations across DLL boundaries work better.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bruaaidmqkodscbivmiq@forum.dlang.org&quot;&gt;D casually mentioned and dismissed + a suggestion&lt;/a&gt; led to a posting of D jobs on the wiki - making them easier to find than the ones posted to the announce forum or on This Week in D!&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rlbmokztgbbhvxnyvzua@forum.dlang.org&quot;&gt;Let's improve D's exceptions&lt;/a&gt; discusses ways to fix &lt;tt&gt;enforce&lt;/tt&gt; and make more specific details easily usable with exceptions. The code draft is &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/exception.d&quot;&gt;here&lt;/a&gt;, written by me. Using reflection we can make more efficient, easier to use, exceptions with better error messages. I intend to try to get it in druntime, but failing that, my module will still be usable.
  12780. &lt;/li&gt;&lt;/ul&gt;
  12781.  
  12782. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12783.  
  12784.  
  12785. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  12786. &lt;p&gt;Quick tip this week, but one I didn't know myself! Courtesy of &lt;a href=&quot;http://stackoverflow.com/q/30274528/1457000&quot;&gt;Stack Overflow&lt;/a&gt;.&lt;/p&gt;
  12787.  
  12788. &lt;p&gt;If you want a raw byte-by-byte range of a file, the easiest way is to do &lt;tt&gt;file.byChunk(arbitrary_chunk_size).joiner&lt;/tt&gt;. To use this, &lt;tt&gt;import std.stdio, std.algorithm;&lt;/tt&gt;.&lt;/p&gt;
  12789.  
  12790. &lt;p&gt;My answer to that question also shows other ways to get ranges, but the &lt;tt&gt;joiner&lt;/tt&gt; is the main one - it puts the various chunks together into one range of bytes, where you can fetch them individually.&lt;/p&gt;
  12791.  
  12792. &lt;p&gt;&lt;tt&gt;joiner&lt;/tt&gt; is documented &lt;a href=&quot;http://dlang.org/phobos/std_algorithm_iteration.html#.joiner&quot;&gt;here&lt;/a&gt; and can be used in a variety of cases.&lt;/p&gt;
  12793.  
  12794. &lt;hr /&gt;
  12795.  
  12796. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  12797.  
  12798. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  12799.  
  12800. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  12801.  
  12802. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;. Just two weeks away!&lt;/li&gt;
  12803.  
  12804. &lt;/ul&gt;
  12805.  
  12806. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12807. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12808. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12809. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12810. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12811. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12812. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12813. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12814. &lt;/li&gt;&lt;/ul&gt;
  12815.  
  12816.  
  12817. &lt;/div&gt;
  12818. </description></item><item><title>Issue #17</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/may-10.html</link><guid>http://arsdnet.net/this-week-in-d/may-10.html</guid><pubDate>Sun, 10 May 2015 12:00:00 GMT</pubDate><description>
  12819. &lt;div id=&quot;body-container&quot;&gt;
  12820. &lt;h1&gt;
  12821. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12822. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12823. &lt;span id=&quot;title-date&quot;&gt;May 10, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12824.  
  12825.  
  12826. &lt;div id=&quot;preface&quot;&gt;
  12827.  
  12828. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12829.  
  12830. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12831.  
  12832. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12833.  
  12834. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12835.  
  12836. &lt;/div&gt;
  12837.  
  12838. &lt;h2&gt;Statistics&lt;/h2&gt;
  12839.  
  12840. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-05-04&amp;amp;chfieldto=2015-05-10&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;3 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12841. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-05-04&amp;amp;chfieldto=2015-05-10&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;23 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12842. 20 pull requests merged into the language:
  12843.  
  12844. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-04..2015-05-10&quot;&gt;9 into DMD&lt;/a&gt;,
  12845. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-04..2015-05-10&quot;&gt;11 into Phobos&lt;/a&gt;, and
  12846. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-04..2015-05-10&quot;&gt;10 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12847. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-05-04..2015-05-10&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  12848. &lt;/li&gt;&lt;/ul&gt;
  12849.  
  12850. &lt;h2&gt;In the community&lt;/h2&gt;
  12851.  
  12852. &lt;h3&gt;Community announcements&lt;/h3&gt;
  12853.  
  12854. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uvbwkifvvckpbwaqelqa@forum.dlang.org&quot;&gt;Berlin D Meetup: Friday, May 15&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pnutxezzybrdwwznccrz@forum.dlang.org&quot;&gt;asm.dlang.org updated&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xzjsdsuskarkllhmwhfw@forum.dlang.org&quot;&gt;Calypso milestone hit: D adaptation of Qt5 tutorial working&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/minvvt$1d8k$1@digitalmars.com&quot;&gt;DWT (GUI library based on Java SWT) 64bit support&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
  12855.  
  12856. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  12857.  
  12858. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  12859.  
  12860. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/umgksggndinyaczjmnxy@forum.dlang.org?page=1&quot;&gt;Breaking changes in Visual C++ 2015&lt;/a&gt; turned into another long flamewar about D's tooling, such as the built-in unittest pros and cons.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xhlbenngkdpueqnhdqkg@forum.dlang.org&quot;&gt;Dare I ... another volatile discussion ?&lt;/a&gt; talks about  a volatile keyword which would guarantee no reordering and elision of reads or writes. The &lt;tt&gt;shared&lt;/tt&gt; keyword is discussed and how it isn't quite right for it. The current situation is druntime gives &lt;tt&gt;volatileRead&lt;/tt&gt; and &lt;tt&gt;volatileStore&lt;/tt&gt; functions rather than typing the volatility to the variable.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mieikt$6ba$1@digitalmars.com&quot;&gt;Sneak preview into std.allocator's porcelain&lt;/a&gt; shows a high-level interface into the upcoming std.allocator framework.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/migkfl$gia$1@digitalmars.com&quot;&gt;New adapter: std.allocator.quantizer&lt;/a&gt; is another std.allocator component to help with reallocations.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/oujavkisqkrsvvktojcb@forum.dlang.org&quot;&gt;RFC: Pay-as-you-go, Portable D Runtime for Microcontrollers (and maybe more)&lt;/a&gt; discusses a way to organize druntime to easily port to microcontrollers and the potential of writing a RTOS right into the d runtime.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ltooqxkdesirocpqrsel@forum.dlang.org&quot;&gt;D for Android&lt;/a&gt; shows what works and what still needs to be done to run D on Android/x86. A significant chunk of D now works on it.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/iiqwacebdbxzwxhcfhgu@forum.dlang.org&quot;&gt;a &amp;quot;success story for D&amp;quot; &lt;/a&gt; discusses a paper and product in D which does hardware verification. Initially, skepticism was shown toward it, but the project's merits and activity were seen later in the thread.
  12861. &lt;/li&gt;&lt;/ul&gt;
  12862.  
  12863. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  12864.  
  12865.  
  12866. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  12867. &lt;p&gt;This week, we'll see how you can combine local imports with function templates to implement &lt;b&gt;optional compile-time dependencies&lt;/b&gt;.&lt;/p&gt;
  12868.  
  12869. &lt;p&gt;Normally, when you import a module, it is required that dmd is able to find it when you build the program:&lt;/p&gt;
  12870.  
  12871. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; foo; &lt;font color=&quot;green&quot;&gt;// if foo.d can't be found, the build will fail
  12872. &lt;/font&gt;&lt;/pre&gt;
  12873.  
  12874. &lt;p&gt;There are times, however, when you want to make an import optional or done only on-demand. This allows you to compile a module on its own if you don't need a feature while keeping the feature available if you are willing to use the dependency. The traditional way to accomplish this was to write a helper module:&lt;/p&gt;
  12875.  
  12876. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; outside_dependency;
  12877. &lt;font color=&quot;green&quot;&gt;// library code
  12878. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; LibraryObject {}
  12879. &lt;/pre&gt;
  12880.  
  12881. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; your_code;
  12882. &lt;font color=&quot;green&quot;&gt;// your code here, all self-contained
  12883. &lt;/font&gt;
  12884. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; YourObject {}
  12885.  
  12886. &lt;font color=&quot;green&quot;&gt;// and/or you can define interfaces that are implemented by driver modules
  12887. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;interface&lt;/font&gt; UseLibrary {}
  12888. &lt;/pre&gt;
  12889.  
  12890. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; your_code_integrated_with_outside_dependency;
  12891.  
  12892. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; your_code;
  12893. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; outside_dependency;
  12894.  
  12895. &lt;font color=&quot;green&quot;&gt;// code that integrates your code with the dependency
  12896. &lt;/font&gt;
  12897. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; useLibrary(YourObject obj, LibraryObject lo) {}
  12898.  
  12899. &lt;font color=&quot;green&quot;&gt;// Then, you can call these functions with pseudomember
  12900. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// syntax on your object.
  12901. &lt;/font&gt;
  12902. &lt;font color=&quot;green&quot;&gt;// OR you can implement driver classes
  12903. &lt;/font&gt;
  12904. &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; YourLibraryUser : UseLibrary {
  12905.                  &lt;font color=&quot;green&quot;&gt;// implement the interface using outside_dependency
  12906. &lt;/font&gt; }
  12907. &lt;/pre&gt;
  12908.  
  12909.  
  12910. &lt;p&gt;These traditional techniques work well and are useful in a variety of situations. The interface and class driver pattern also provides runtime polymorphism, letting you swap out implementations at runtime.&lt;/p&gt;
  12911.  
  12912. &lt;p&gt;My database.d uses this pattern to provide an optional set of drivers. database.d declares an interface, then optional dependencies, mysql.d, postgres.d, sqlite.d, and mssql.d implement that interface to use C libraries to talk to the actual databases.&lt;/p&gt;
  12913.  
  12914. &lt;p&gt;However, needing a third connector module or the runtime overhead of interfaces isn't always desirable. You might want a compile-time optional import of a single file, for example, to change a library's core interface based on the availability of a library.&lt;/p&gt;
  12915.  
  12916. &lt;p&gt;D has two options for this: one is conditional compilation based on the &lt;tt&gt;version&lt;/tt&gt; keyword or a configuration module that declares manifest constants that are inspected with static if. These facilities work similarly to the preprocessor in C. You can read about &lt;tt&gt;version&lt;/tt&gt; &lt;a href=&quot;http://dlang.org/version.html&quot;&gt;here&lt;/a&gt; and the module configuration technique in my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt;.&lt;/p&gt;
  12917.  
  12918. &lt;p&gt;Those techniques work best when you want to change the implementation of a function or do a wholesale replacement of the interface based on compile time switches.&lt;/p&gt;
  12919.  
  12920. &lt;p&gt;The other option is the trick we'll learn here: use a local import so a function is always available, but its imports are only processed if that function is actually run:&lt;/p&gt;
  12921.  
  12922. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; bar; &lt;font color=&quot;green&quot;&gt;// bar is always required if you use this module
  12923. &lt;/font&gt;
  12924. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; useFoo()() {
  12925. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; foo; &lt;font color=&quot;green&quot;&gt;// but foo is only required if you actually call useFoo!
  12926. &lt;/font&gt; }
  12927. &lt;/pre&gt;
  12928.  
  12929. &lt;p&gt;Here, &lt;tt&gt;useFoo&lt;/tt&gt; is always part of the public interface, but unless your module's user actually calls &lt;tt&gt;useFoo&lt;/tt&gt;, the import within is not processed, thus making the dependency optional to the module as a whole.&lt;/p&gt;
  12930.  
  12931. &lt;p&gt;My dom.d uses this technique to handle documents that use character sets other than UTF-8. Character set conversion requires an additional module: charactersets.d. But, if you don't need this, if you know all data you'll feed to dom.d is already UTF-8 encoded, you can avoid downloading the additional charactersets.d file.&lt;/p&gt;
  12932.  
  12933. &lt;p&gt;It accomplishes this by providing two public functions: &lt;tt&gt;parseUtf8&lt;/tt&gt;, which has no dependencies, and &lt;tt&gt;parse()(args...)&lt;/tt&gt; which imports arsd.characterencodings. Internally, since it knows it is always using utf-8 strings, it uses &lt;tt&gt;parseUtf8&lt;/tt&gt;. Only in places where the character set is unknown will it use the conversion functions.&lt;/p&gt;
  12934.  
  12935. &lt;p&gt;The entire call tree that may use the charset function are set as templates: that's what the first set of parenthesis are for in &lt;tt&gt;parse()(args...)&lt;/tt&gt;. It is a template with zero parameters - no compile-time customization done and the end-user can always call it like a normal function, so they don't need to now it is a template, but it is one, meaning it gets the lazy semantics.&lt;/p&gt;
  12936.  
  12937. &lt;div class=&quot;pitfall&quot;&gt;One of the downsides of lazy templates is that the code isn't necessary full compiled unless it is used either. The compiler will ensure the syntax is correct, but not the semantics unless the function is used. Be careful to test actually calling these functions in a library you release to ensure that they do, in fact, successfully build when needed.&lt;/div&gt;
  12938.  
  12939. &lt;p&gt;As a result, if you just stick to &lt;tt&gt;parseUtf8&lt;/tt&gt;, you can use dom.d alone, without the characterencodings.d dependency.&lt;/p&gt;
  12940.  
  12941. &lt;hr /&gt;
  12942.  
  12943. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  12944.  
  12945. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  12946.  
  12947. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  12948.  
  12949. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;. Just two weeks away!&lt;/li&gt;
  12950.  
  12951. &lt;/ul&gt;
  12952.  
  12953. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  12954. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  12955. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12956. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12957. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  12958. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  12959. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12960. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  12961. &lt;/li&gt;&lt;/ul&gt;
  12962.  
  12963.  
  12964. &lt;/div&gt;
  12965. </description></item><item><title>Issue #16</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/may-03.html</link><guid>http://arsdnet.net/this-week-in-d/may-03.html</guid><pubDate>Sun, 03 May 2015 12:00:00 GMT</pubDate><description>
  12966. &lt;div id=&quot;body-container&quot;&gt;
  12967. &lt;h1&gt;
  12968. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  12969. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  12970. &lt;span id=&quot;title-date&quot;&gt;May 3, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  12971.  
  12972.  
  12973. &lt;div id=&quot;preface&quot;&gt;
  12974.  
  12975. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  12976.  
  12977. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  12978.  
  12979. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  12980.  
  12981. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  12982.  
  12983. &lt;p&gt;This Week in D last week was missed due to me taking some time off. Thus, this issue will cover the previous two weeks.&lt;/p&gt;
  12984. &lt;/div&gt;
  12985.  
  12986. &lt;h2&gt;Statistics&lt;/h2&gt;
  12987.  
  12988. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-04-20&amp;amp;chfieldto=2015-05-03&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;24 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12989. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-04-20&amp;amp;chfieldto=2015-05-03&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;63 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  12990. 84 pull requests merged into the language:
  12991.  
  12992. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-20..2015-05-03&quot;&gt;26 into DMD&lt;/a&gt;,
  12993. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-20..2015-05-03&quot;&gt;40 into Phobos&lt;/a&gt;, and
  12994. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-20..2015-05-03&quot;&gt;18 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  12995. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-20..2015-05-03&quot;&gt;13 pull requests merged into the website.&lt;/a&gt;
  12996. &lt;/li&gt;&lt;/ul&gt;
  12997.  
  12998. &lt;h2&gt;Major Changes&lt;/h2&gt;
  12999.  
  13000. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mhj8m3$121e$1@digitalmars.com&quot;&gt;D 2.067.1&lt;/a&gt; was released, including regression and bug fixes.&lt;/p&gt;
  13001.  
  13002. &lt;p&gt;A switch &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pull/4621&quot;&gt;was added to dmd in git&lt;/a&gt; to start profiling the GC itself, as part of a general push toward better memory management in D.&lt;/p&gt;
  13003.  
  13004. &lt;p&gt;Improving the GC is coupled with improving facilities to avoid it. One of those improvements was &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pull/3139&quot;&gt;an overhaul of &lt;tt&gt;std.typecons.Unique&lt;/tt&gt;&lt;/a&gt;, using a lot of fixed language bugs to make it more generally useful and like its counterpart in C++.&lt;/p&gt;
  13005.  
  13006. &lt;h2&gt;In the community&lt;/h2&gt;
  13007.  
  13008. &lt;h3&gt;Hackaton Week&lt;/h3&gt;
  13009.  
  13010. &lt;p&gt;The week of April 26 was a community hackaton which yielded some code. Among the most notable threads:&lt;/p&gt;
  13011.  
  13012. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mi3l1d$1vm9$3@digitalmars.com&quot;&gt;The hackathon week roundup&lt;/a&gt; has overview statistics and closing thoughts from Andrei&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vipsckjygxscytugezfg@forum.dlang.org&quot;&gt;ARM Cortex-M LCD Demo&lt;/a&gt; is a project to run D on bare-metal ARM from top to bottom. It works to draw on the screen!&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jglnnhrkndoszwjxoyos@forum.dlang.org&quot;&gt;ARE WE SLIM YET?&lt;/a&gt; is a new project from Vladimir Panteleev which tracks stats about D programs across D compilers. For example, it can tell which commit to the compiler caused a hello world to grow in size, helping us keep things slip.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mi1qph$cgr$1@digitalmars.com&quot;&gt;FreeTree is FreeList on autotune&lt;/a&gt; is a new allocator from Andrei.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pzvsacofjxwphqycpfnt@forum.dlang.org&quot;&gt;An article about metaprogramming&lt;/a&gt; discusses using D templates for gamedev.
  13013. &lt;/li&gt;&lt;/ul&gt;
  13014.  
  13015. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13016.  
  13017. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jxjmqajffvnsjpjimniy@forum.dlang.org&quot;&gt;Dutyl 1.5.0 released - dfmt support added&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mhftcd$s02$9@digitalmars.com&quot;&gt;D bindings for ToxCore&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lahcmyqbmsmkwmikqzdk@forum.dlang.org&quot;&gt;dfmt 0.3.2 - D source formatting tool&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mhr6fb$1rlo$1@digitalmars.com&quot;&gt;OSCON Europe: please make your D submission&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/okcaexgcfvgrjadcqukf@forum.dlang.org&quot;&gt;Code coverage for D now supported at https://codecov.io&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/equogsqpblwjlbtggepl@forum.dlang.org&quot;&gt;depend 0.0.1 - to guard against unintended dependencies&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wlucmadlpcbblppvxiab@forum.dlang.org&quot;&gt;Digger 2.1 - a tool for working with D's source code and its history&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xstuykuuxzyrjfhtstet@forum.dlang.org&quot;&gt;DTiled: Tiled map loader&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kkovaahyasyoknnmipxr@forum.dlang.org&quot;&gt;Desktopfile library - for working with .desktop files on Linux systems&lt;/a&gt;
  13018. &lt;/li&gt;&lt;/ul&gt;
  13019.  
  13020. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13021.  
  13022. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13023.  
  13024. &lt;p&gt;With the hackaton last week, there was a bit less forum discussion than usual. However, a few threads stood out as significant:&lt;/p&gt;
  13025.  
  13026. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mh69sb$vv9$22@digitalmars.com&quot;&gt;oversight with input ranges&lt;/a&gt; discusses a potentially problematic or unintentional fact about input ranges: a non-copyable front doesn't pass the test. This may result in a new range trait, perhaps called &lt;tt&gt;SingleReadRange&lt;/tt&gt;, which will allow us to adjust the input range test to allow these cases and be specialized upon without breaking the common cases.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gzbsizvhpbridbjkmxmj@forum.dlang.org&quot;&gt;ARM Cortex-M Microcontroller startup files&lt;/a&gt; is a summation of an effort to make startup files for various microcontrollers to use with D.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mh64eq$2g9n$1@digitalmars.com&quot;&gt;Found on Reddit: It's time for D to own up&lt;/a&gt; discussed ownership schemes in D. With the work being done on &lt;tt&gt;Unique&lt;/tt&gt; in the last week, D's standard library moves closer to C++'s ownership features, and with the DIP25 from a few weeks ago, D is trying to get 80% of what Rust offers with 20% of the work. The Reddit thread helped to prompt the work on &lt;tt&gt;Unique&lt;/tt&gt;.
  13027. &lt;/li&gt;&lt;/ul&gt;
  13028.  
  13029. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13030.  
  13031.  
  13032. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  13033. &lt;p&gt;&lt;b&gt;Don't be afraid to do things the C way.&lt;/b&gt;&lt;/p&gt;
  13034.  
  13035. &lt;p&gt;I've observed a lot of D programmers worrying about doing things the &amp;quot;D way&amp;quot;, including asking how to convert working C standard library code to D or lamenting the lack of a D library to replace some C code.&lt;/p&gt;
  13036.  
  13037. &lt;p&gt;There's value in this: D can do a lot of things C can't. The &amp;quot;D way&amp;quot; can often be safer, less bug-prone, more beautiful, or more efficient than C code and libraries.&lt;/p&gt;
  13038.  
  13039. &lt;p&gt;However, D is also a language for practical programmers and sometimes code that works today is more important than ideal code that might be written at some point later. This is why D gives full access to C facilities, so you can use them!&lt;/p&gt;
  13040.  
  13041. &lt;p&gt;If you know how to do something with &lt;tt&gt;scanf&lt;/tt&gt;, you can still use it in D, even while mixing with &lt;tt&gt;std.stdio&lt;/tt&gt;'s functions. Simply &lt;tt&gt;import core.stdc.stdio;&lt;/tt&gt; and you can use all your familiar C functions.&lt;/p&gt;
  13042.  
  13043. &lt;p&gt;Want to do memory management the C way? Simply &lt;tt&gt;import core.stdc.stdlib;&lt;/tt&gt; and use &lt;tt&gt;malloc&lt;/tt&gt; and &lt;tt&gt;free&lt;/tt&gt;. Combined with D features like &lt;tt&gt;scope(exit)&lt;/tt&gt; to help with freeing and struct semantics to manage ownership you can rest assured that using D will offer advantages over C where needed, without tying your hands when you want to do things the old, familiar way.&lt;/p&gt;
  13044.  
  13045. &lt;p&gt;If you have a third-party C API, you don't have to reimplement that functionality in D to take advantage of it (though, there are times you do want to, to leverage D's unique offers). You can simple write an &lt;tt&gt;extern(C)&lt;/tt&gt; function declaration and call the function directly from D, or you can also use dynamic library loading in D, the same way as in C, e.g. with &lt;tt&gt;dlopen&lt;/tt&gt; or &lt;tt&gt;LoadLibrary&lt;/tt&gt;.&lt;/p&gt;
  13046.  
  13047. &lt;p&gt;If you know how to solve a problem with pointers, structs, loops, and procedures as in C, you can use them in D too. Yes, the standard library offers a number of excellent range-based algorithms and help for coding in a functional programming style, and learning these is worth the investment. But, if you already know how to do it in C and need it done now, don't let Phobos' allure be an enemy to your productivity. You can still do your work with familiar language features.&lt;/p&gt;
  13048.  
  13049. &lt;p&gt;Moving to D opens up a whole new world of superior programming. But it doesn't shut you out of the old world. D aims to be a practical language for working programmers - remember that as you work with it. The new features will still be there to try tomorrow.&lt;/p&gt;
  13050.  
  13051. &lt;hr /&gt;
  13052.  
  13053. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  13054.  
  13055. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  13056.  
  13057. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13058.  
  13059. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;. Just a few more weeks away!&lt;/li&gt;
  13060.  
  13061. &lt;/ul&gt;
  13062.  
  13063. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13064. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13065. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13066. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13067. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13068. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13069. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13070. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13071. &lt;/li&gt;&lt;/ul&gt;
  13072.  
  13073.  
  13074. &lt;/div&gt;
  13075. </description></item><item><title>Issue #15</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/apr-19.html</link><guid>http://arsdnet.net/this-week-in-d/apr-19.html</guid><pubDate>Sun, 19 Apr 2015 12:00:00 GMT</pubDate><description>
  13076. &lt;div id=&quot;body-container&quot;&gt;
  13077. &lt;h1&gt;
  13078. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13079. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13080. &lt;span id=&quot;title-date&quot;&gt;April 19, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13081.  
  13082.  
  13083. &lt;div id=&quot;preface&quot;&gt;
  13084.  
  13085. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13086.  
  13087. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13088.  
  13089. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13090.  
  13091. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13092.  
  13093. &lt;/div&gt;
  13094.  
  13095. &lt;h2&gt;Statistics&lt;/h2&gt;
  13096.  
  13097. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-04-13&amp;amp;chfieldto=2015-04-19&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;24 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13098. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-04-13&amp;amp;chfieldto=2015-04-19&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13099. 39 pull requests merged into the language:
  13100.  
  13101. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-13..2015-04-19&quot;&gt;16 into DMD&lt;/a&gt;,
  13102. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-13..2015-04-19&quot;&gt;14 into Phobos&lt;/a&gt;, and
  13103. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-13..2015-04-19&quot;&gt;9 into druntime&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13104. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-13..2015-04-19&quot;&gt;0 pull requests merged into the website.&lt;/a&gt;
  13105. &lt;/li&gt;&lt;/ul&gt;
  13106.  
  13107. &lt;h2&gt;D Job Opening&lt;/h2&gt;
  13108.  
  13109. &lt;p&gt;EMSI, a company based in Moscow, Idaho, is looking to hire a D language software engineer. &lt;a href=&quot;https://emsi.bamboohr.com/jobs/view.php?id=30&quot;&gt;Learn more and apply here.&lt;/a&gt;&lt;/p&gt;
  13110.  
  13111. &lt;h2&gt;In the community&lt;/h2&gt;
  13112.  
  13113. &lt;h3&gt;Upcoming events&lt;/h3&gt;
  13114.  
  13115. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/mgs22f$1lir$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup&lt;/a&gt; is scheduled for April 23, 2015.&lt;/p&gt;
  13116.  
  13117. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mgu0k1$nut$1@digitalmars.com&quot;&gt;[hackathon] One week left to the first D Hackathon&lt;/a&gt;, an event where D contributors are encouraged to write as much code as they can in a week with little extra forum discussion. All are welcome to participate, including remotely.&lt;/p&gt;
  13118.  
  13119. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13120.  
  13121. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mghcpc$2rs$25@digitalmars.com&quot;&gt;cdb reader and creator&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mgfpag$1tsd$1@digitalmars.com&quot;&gt;Updated D TextMate bundle for D2 and TM2&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wgloybophglfubqrgcqx@forum.dlang.org&quot;&gt;Sciter, D language SDK bindings&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mh1cs5$t0a$1@digitalmars.com&quot;&gt;Trial migration of Dsource bindings project to Github&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/CABOHX+dYBMZUwiLpjhR13AJGZgwDrVPhqwxDQiTYFrzpE24JHg@mail.gmail.com&quot;&gt;Request for testers: GDC-5.1 Release Candidate branched&lt;/a&gt;
  13122. &lt;/li&gt;&lt;/ul&gt;
  13123.  
  13124. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13125.  
  13126. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13127.  
  13128. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qpharcskwrbfgkuubfrw@forum.dlang.org&quot;&gt;Pitching an investment bank on using D for their bond analytics&lt;/a&gt; discussed D's pros an cons and techniques to convince managers to give it a try.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mgqiji$727$1@digitalmars.com&quot;&gt;Today's programming challenge - How's your Range-Fu ?&lt;/a&gt; asked forumgoers to try to rewrite one of Phobos' functions, &lt;tt&gt;std.string.wrap&lt;/tt&gt;, to use a range interface instead of eagerly allocated strings. This is part of a push to make as much of Phobos allocation (and thus garbage collection) free.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfvi86$10ml$1@digitalmars.com&quot;&gt;DIP76: Autodecode Should Not Throw&lt;/a&gt; is a slightly old thread from earlier in the month, but still ongoing. The question is what Phobos should do about UTF - will it autodecode multibyte codepoints and if so, will it throw an exception on badly formed UTF-8 or replace them with invalid character codepoints (which are valid Unicode chars that represent unknown characters - permitted according to the standard). There's no conclusion yet. The status quo thus remains: Phobos auto-decodes UTF-8 and UTF-16, yielding dchars when given strings, and will throw an exception if it has poorly formed utf-8.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vzgxlcfxfxzdezrfxicr@forum.dlang.org&quot;&gt;How D could gain more traction?&lt;/a&gt; discusses batteries-included standard library and other adoption issues.
  13129. &lt;/li&gt;&lt;/ul&gt;
  13130.  
  13131. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13132.  
  13133. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13134. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13135. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13136. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13137. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13138. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13139. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13140. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13141. &lt;/li&gt;&lt;/ul&gt;
  13142.  
  13143.  
  13144. &lt;/div&gt;
  13145. </description></item><item><title>Issue #14</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/apr-12.html</link><guid>http://arsdnet.net/this-week-in-d/apr-12.html</guid><pubDate>Sun, 12 Apr 2015 12:00:00 GMT</pubDate><description>
  13146. &lt;div id=&quot;body-container&quot;&gt;
  13147. &lt;h1&gt;
  13148. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13149. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13150. &lt;span id=&quot;title-date&quot;&gt;April 12, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13151.  
  13152.  
  13153. &lt;div id=&quot;preface&quot;&gt;
  13154.  
  13155. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13156.  
  13157. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13158.  
  13159. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13160.  
  13161. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13162.  
  13163. &lt;/div&gt;
  13164.  
  13165. &lt;h2&gt;Statistics&lt;/h2&gt;
  13166.  
  13167. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-04-06&amp;amp;chfieldto=2015-04-12&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;18 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13168. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-04-06&amp;amp;chfieldto=2015-04-12&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13169. 61 pull requests merged into the language:
  13170.  
  13171. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-06..2015-04-12&quot;&gt;31 into DMD&lt;/a&gt;,
  13172. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-06..2015-04-12&quot;&gt;22 into Phobos&lt;/a&gt;, and
  13173. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-06..2015-04-12&quot;&gt;8 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13174. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-04-06..2015-04-12&quot;&gt;10 pull requests merged into the website.&lt;/a&gt;
  13175. &lt;/li&gt;&lt;/ul&gt;
  13176.  
  13177. &lt;h2&gt;In the community&lt;/h2&gt;
  13178.  
  13179. &lt;h3&gt;Blog Posts&lt;/h3&gt;
  13180.  
  13181. &lt;p&gt;&lt;a href=&quot;https://w0rp.com/blog/post/writing-exceptional-nogc-code/&quot;&gt;A blog post&lt;/a&gt; was written about using exceptions in &lt;tt&gt;@nogc&lt;/tt&gt; functions, suggesting various options.&lt;/p&gt;
  13182.  
  13183. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13184.  
  13185. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gaquzzsnpscrwiosaphy@forum.dlang.org&quot;&gt;Berlin D Meetup April 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kxcbizohnxdtimjwlued@forum.dlang.org&quot;&gt;Implementing cent/ucent...&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zqnukojhkynahrnilteu@forum.dlang.org&quot;&gt;Coedit - beta 1 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jtgogyqtvmzuhzlyzbfx@forum.dlang.org&quot;&gt;Vibe.Dav - webdav support to vibe.d&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/5522764D.70508@yahoo.es&quot;&gt;DMD 2.067.0 Programming Language Specifications&lt;/a&gt;
  13186. &lt;/li&gt;&lt;/ul&gt;
  13187.  
  13188. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13189.  
  13190. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13191.  
  13192. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg6p6k$2j7u$1@digitalmars.com&quot;&gt;if(arr) now a warning&lt;/a&gt; announces a language change and the cost/benefit of it. Currently, old code now triggers a warning and has found a number of bugs in the code it was tested on. In the future, the behavior of &lt;tt&gt;if(array)&lt;/tt&gt; may change.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg7vk3$nng$1@digitalmars.com&quot;&gt;Associative Arrays in the data segment&lt;/a&gt; discusses changes to make it possible to make statically initialized associative arrays. Code has been written with preliminary support.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg113r$2nhb$1@digitalmars.com&quot;&gt;Wanted: Review manager for std.data.json&lt;/a&gt; asks people to review a proposed &lt;tt&gt;std.data.json&lt;/tt&gt; module, which is a port from vibe.d's json module. It looks like the review may be done in mid-May.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg4p2d$bgf$1@digitalmars.com&quot;&gt;D Hackathon: April 25 - May 1&lt;/a&gt; announces a specific time for D code to be written instead of forum discussion tobe had.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg6idi$2cm1$1@digitalmars.com&quot;&gt;Silicon Valley D Meetup needs blood&lt;/a&gt; asks for talks at the D Silicon Valley meetup which happens monthly.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mg2hls$151c$1@digitalmars.com&quot;&gt;DDMD is now in the master branch&lt;/a&gt; announces another step toward dmd being written in D.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfv38g$ka4$1@digitalmars.com&quot;&gt;DConf: register now!&lt;/a&gt; asks people to register to attend DConf.
  13193.  
  13194. &lt;/li&gt;&lt;/ul&gt;
  13195.  
  13196. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13197.  
  13198. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  13199. &lt;p&gt;This week, we'll talk about &lt;b&gt;skipping initialization of variables&lt;/b&gt;.&lt;/p&gt;
  13200.  
  13201. &lt;p&gt;D automatically initializes all variables to a static value, their &lt;tt&gt;.init&lt;/tt&gt; property. This is typically zero, but ideally is some invalid data to make usage of an uninitialized variable obvious at runtime. For pointers, it initializes them to &lt;tt&gt;null&lt;/tt&gt;. Floating points are set to a signaling &lt;tt&gt;NaN&lt;/tt&gt; value. Chars are set to &lt;tt&gt;0xff&lt;/tt&gt;, an invalid Unicode character.&lt;/p&gt;
  13202.  
  13203. &lt;p&gt;Sometimes, though, you don't want a variable auto-initialized and D provides a way to do it: by explicitly writing &lt;tt&gt; = void&lt;/tt&gt; in the initializer:&lt;/p&gt;
  13204.  
  13205. &lt;pre class=&quot;d_code&quot;&gt; T t = &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// t will not be auto-initialized
  13206. &lt;/font&gt;&lt;/pre&gt;
  13207.  
  13208. &lt;p&gt;When do you want this? Very rarely, but there are three general areas:&lt;/p&gt;
  13209.  
  13210. &lt;p&gt;1: When you are forced to by a @disabled default constructor on a struct. When a struct has &lt;tt&gt;@disable this();&lt;/tt&gt; in it, default construction is disabled. This means that all declarations of variables of this type must be explicitly initialized - or explicitly uninitialized.&lt;/p&gt;
  13211.  
  13212. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;struct&lt;/font&gt; YourStruct {
  13213. &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;(&lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; some_arg) {}
  13214. @disable &lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;();
  13215. }
  13216. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  13217. YourStruct s; &lt;font color=&quot;green&quot;&gt;// Error: variable b.main.s default construction is disabled for type YourStruct
  13218. &lt;/font&gt;
  13219. YourStruct s = YourStruct(some_arg); &lt;font color=&quot;green&quot;&gt;// OK
  13220. &lt;/font&gt; YourStruct s = &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// also OK!
  13221. &lt;/font&gt; }
  13222. &lt;/pre&gt;
  13223.  
  13224. &lt;p&gt;It is very important to still set up your struct appropriately, so it passes its object invariants, so typically this is only done in internal functions that know the struct's innards well enough to do it right&lt;/p&gt;
  13225. &lt;p&gt;2: When you know the default initialization is a complete waste of time and you want to optimize it away manually&lt;/p&gt;.
  13226.  
  13227. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt;[1000] a = &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;; &lt;font color=&quot;green&quot;&gt;// initialized below
  13228. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// a is normally set to all zero, but here it is
  13229. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// left as garbage because we initialize it right
  13230. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// below
  13231. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;foreach&lt;/font&gt;(idx, &lt;font color=&quot;blue&quot;&gt;ref&lt;/font&gt; item; a)
  13232. item = idx;
  13233. &lt;font color=&quot;green&quot;&gt;// now it is initialized anyway
  13234. &lt;/font&gt;&lt;/pre&gt;
  13235.  
  13236. &lt;p&gt;This is dangerous if the code is refactored and the initialization gets lost, so only do it if you know it will actually make a relevant difference in your case. Moreover, you probably ought to comment why it is set to void at the declaration point so future reading of your code in the future will understand your intention.&lt;/p&gt;
  13237.  
  13238. &lt;p&gt;3: Initialization depends on runtime logic, but you want to scope the variable outside those conditionals. For example:&lt;/p&gt;
  13239.  
  13240. &lt;pre class=&quot;d_code&quot;&gt;Struct s = &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt;;
  13241. &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(somecond)
  13242. {
  13243.   s = option1;
  13244. }
  13245. &lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt;
  13246. {
  13247.   s = option2;
  13248. }
  13249. &lt;/pre&gt;
  13250.  
  13251. &lt;p&gt;In this example, you could also initialize it with a ternary operator (&lt;tt&gt;Struct s = somecond ? option1 : option2;&lt;/tt&gt;) or a helper function that encapsulates the condition, but this also provides a way. This reasoning, especially coupled with one or both of the other scenarios (e.g. default construction is disabled, but the value depends on the runtime condition) is a common reason to see void initialization in the wild.&lt;/p&gt;
  13252.  
  13253. &lt;div class=&quot;pitfall&quot;&gt;This example demonstrates assignment, not construction! It is possible for &lt;tt&gt;s&lt;/tt&gt;'s destructor, &lt;tt&gt;~this&lt;/tt&gt;, to be called on the uninitialized object when it is assigned to the new value. Only use this option when you are sure the destructor call will be harmless.&lt;/div&gt;
  13254.  
  13255. &lt;hr /&gt;
  13256.  
  13257. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  13258.  
  13259. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  13260.  
  13261. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13262.  
  13263. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13264.  
  13265. &lt;/ul&gt;
  13266.  
  13267. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13268. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13269. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13270. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13271. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13272. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13273. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13274. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13275. &lt;/li&gt;&lt;/ul&gt;
  13276.  
  13277.  
  13278. &lt;/div&gt;
  13279. </description></item><item><title>Issue #13</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/apr-05.html</link><guid>http://arsdnet.net/this-week-in-d/apr-05.html</guid><pubDate>Mon, 06 Apr 2015 12:00:00 GMT</pubDate><description>
  13280. &lt;div id=&quot;body-container&quot;&gt;
  13281. &lt;h1&gt;
  13282. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13283. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13284. &lt;span id=&quot;title-date&quot;&gt;April 6, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13285.  
  13286.  
  13287. &lt;div id=&quot;preface&quot;&gt;
  13288.  
  13289. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13290.  
  13291. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13292.  
  13293. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13294.  
  13295. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13296.  
  13297. &lt;/div&gt;
  13298.  
  13299. &lt;h2&gt;Statistics&lt;/h2&gt;
  13300.  
  13301. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-03-29&amp;amp;chfieldto=2015-04-06&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;28 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13302. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-03-29&amp;amp;chfieldto=2015-04-06&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;41 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13303. 62 pull requests merged into the language:
  13304.  
  13305. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-29..2015-04-06&quot;&gt;33 into DMD&lt;/a&gt;,
  13306. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-29..2015-04-06&quot;&gt;23 into Phobos&lt;/a&gt;, and
  13307. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-29..2015-04-06&quot;&gt;6 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13308. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-29..2015-04-06&quot;&gt;18 pull requests merged into the website.&lt;/a&gt;
  13309. &lt;/li&gt;&lt;/ul&gt;
  13310.  
  13311. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13312.  
  13313. &lt;p&gt;&lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1202&quot;&gt;Remove deprecated clear method&lt;/a&gt; is a small change, but a positive one - this method was in the global scope of all modules and had a common name, causing a lot of confusion. The replacement method is called &lt;tt&gt;destroy&lt;/tt&gt; and has been preferred for several months.&lt;/p&gt;
  13314.  
  13315. &lt;p&gt;&lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/1147&quot;&gt;GC API profiling&lt;/a&gt; was also merged, another step toward making a better garbage collector in D.&lt;/p&gt;
  13316.  
  13317. &lt;h2&gt;In the community&lt;/h2&gt;
  13318.  
  13319. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13320.  
  13321. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfjqt6$26f1$1@digitalmars.com&quot;&gt;Tagged Scriptlike release: v0.7.0 - A utility library to aid in writing script-like programs in D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mgdkcazrnihembbztbsj@forum.dlang.org&quot;&gt;Loading of widgets from DML markup and DML Editor in DlangUI&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/azntlhtzvhkaodvodiqe@forum.dlang.org&quot;&gt;OpenVG bindings&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bogsabxcyxxthrplxucu@forum.dlang.org&quot;&gt;Port of Maxon C4D API from C++ to D.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zfqlrrmhyhgmtyezwkyz@forum.dlang.org&quot;&gt;D bindings to the EditorConfig library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xsvuiodicwbrcjidajxp@forum.dlang.org&quot;&gt;Standardpaths library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/nehdahkngxltmkfjbmxz@forum.dlang.org&quot;&gt;Dgame RC #1&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cycyjqdcsdbnkrbziqgl@forum.dlang.org&quot;&gt;Reggae v0.0.5 super alpha: A build system in D&lt;/a&gt;
  13322. &lt;/li&gt;&lt;/ul&gt;
  13323.  
  13324. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13325.  
  13326. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13327.  
  13328. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfkgp8$2trd$1@digitalmars.com&quot;&gt;Mid-term vision review&lt;/a&gt; revisits the six month vision presented at the beginning of the year and states that, in Andrei's view, we are on schedule and improving important issues. The one major addition is switching to ddmd, a D port of the dmd compiler from C++, in the next few months.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kdxidecfhivdmonazrra@forum.dlang.org&quot;&gt;Benchmark of D against other languages&lt;/a&gt; looked at a D benchmark and found some problems in it, including too many virtual methods. The community improved the benchmark code and brought the D version to the front of the leaderboard. Other library issues were also found and work may be forthcoming.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfci6o$13oa$1@digitalmars.com&quot;&gt;unittests are really part of the build, not a special run&lt;/a&gt; argues that the built in unittesting could use some tweaks to make it easier to use. The big problem is: who will implement the improvements? As of this writing, it is unclear.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rxrlggihbstxxriswwnp@forum.dlang.org&quot;&gt;std.reflection prototype&lt;/a&gt; discusses runtime reflection in D. We have a facility, RTInfo, that allows arbitrary generation of runtime reflection data for types. A similar one for complete modules has been proposed and tentatively approved, but no implementation has happened yet. The thread discusses ways to move forward with new facilities and writes code to use existing facilities better.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pwykxattqfmrgywjctoz@forum.dlang.org&quot;&gt;Trouble with Cortex-M &amp;quot;Hello World&amp;quot;&lt;/a&gt; talks about using D in embedded environments, going over a list of difficulties and successes.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gtxrpwghpamqwfxxksje@forum.dlang.org&quot;&gt;Filling out the wiki - D as a second language&lt;/a&gt; talks about improving the documentation to be more newbie friendly, writing pages to help tie D into other languages so it is easier to learn after you already know them.
  13329. &lt;/li&gt;&lt;/ul&gt;
  13330.  
  13331. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13332.  
  13333. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  13334. &lt;p&gt;&lt;b&gt;Don&amp;#8217;t do by hand what the computer will do for you.&lt;/b&gt; Submitted by Steven Schveighoffer&lt;/p&gt;
  13335.  
  13336. &lt;p&gt;I have a D utility that processes log data from a controller. This utility accumulates runtime based on a 10 second interval log and outputs what percentage of the time certain things were turned on. The output is in tab-separated format, so excel users can read it.&lt;/p&gt;
  13337.  
  13338. &lt;p&gt;Recently, I&amp;#8217;ve had to update this utility to take into account new columns, and also to handle timestamps that go backwards (yeah, the real world&amp;#8217;s not perfect). In my code, I have a line that looks like this:&lt;/p&gt;
  13339.  
  13340. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt; header = &lt;font color=&quot;red&quot;&gt;&amp;quot;TIME\tDELTA\tMISS\t &amp;#8230; \tDHERR&amp;quot;&lt;/font&gt;;
  13341. target.writeln(header);
  13342. &lt;/pre&gt;
  13343.  
  13344. &lt;p&gt;With about 40 columns.&lt;/p&gt;
  13345.  
  13346. &lt;p&gt;Each line is output to show the latest timestamp, and the data for each column that accumulated between this and the previous timestamp. In order to establish the &amp;#8220;initial&amp;#8221; timestamp where no data has been recorded yet, I output a line that just has the time and dashes for each of the data points. The code looked like this:&lt;/p&gt;
  13347.  
  13348. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;// print a line with no data to show initial time stamp
  13349. &lt;/font&gt;target.printDate(lastTimeStamp);
  13350. &lt;font color=&quot;green&quot;&gt;// print tab separated dashes
  13351. &lt;/font&gt;target.writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;\t-\t-\t-\t- ... \t-&amp;quot;&lt;/font&gt;);
  13352.  
  13353. &lt;/pre&gt;
  13354.  
  13355. &lt;p&gt;So adding new columns, I now had to add an appropriate number of &amp;quot;\t-&amp;quot; to this output. In this update, I also decided to print one of these whenever the log &amp;#8220;restarts&amp;#8221;, or the timestamps go backwards in time (usually due to the original timestamp not being correct, or the person actually changing the time on the controller), so now I would have multiple lines like this to maintain. How annoying.&lt;/p&gt;
  13356.  
  13357. &lt;p&gt;Of course, being a lazy programmer, I decided to have the computer figure out how to output that set of dashes for me. First we count the number of fields in the header (done at the beginning):&lt;/p&gt;
  13358.  
  13359. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;immutable&lt;/font&gt; nfields = header.count('\t');
  13360. &lt;/pre&gt;
  13361.  
  13362. &lt;p&gt;&lt;tt&gt;count&lt;/tt&gt; comes from &lt;tt&gt;std.algorithm&lt;/tt&gt;. Now, we need to output &lt;tt&gt;nfields&lt;/tt&gt; dashes. We can use a loop, but there is a more elegant way &amp;#8212; have the library build the string.Using ranges, we don&amp;#8217;t even have to construct the string in memory, we can construct it lazily (yes, the library is lazy too!):&lt;/p&gt;
  13363.  
  13364. &lt;pre class=&quot;d_code&quot;&gt;target.writeln(cycle(&lt;font color=&quot;red&quot;&gt;&amp;quot;\t-&amp;quot;&lt;/font&gt;).take(2 * nfields));
  13365. &lt;/pre&gt;
  13366.  
  13367. &lt;p&gt;&lt;tt&gt;std.range.cycle&lt;/tt&gt; creates a range that repeats a forward range infinitely, and &lt;tt&gt;std.range.take&lt;/tt&gt; limits a large or infinite range to a finite number of elements (the multiply by 2 is because it is not aware of the original string&amp;#8217;s length). Super-win, now I only ever have to update the original column string.&lt;/p&gt;
  13368. &lt;p&gt;Little things like this are what make me love D.&lt;/p&gt;
  13369.  
  13370. &lt;p&gt;Other users have suggested using &lt;tt&gt;std.range.repeat&lt;/tt&gt; and &lt;tt&gt;std.range.joiner&lt;/tt&gt; to a similar effect. This has the benefit of not having to literal in the repeated string&amp;#8217;s length to &amp;#8216;take&amp;#8217;:&lt;/p&gt;
  13371.  
  13372. &lt;pre class=&quot;d_code&quot;&gt;target.writeln(repeat(&lt;font color=&quot;red&quot;&gt;&amp;quot;\t-&amp;quot;&lt;/font&gt;, nfields).joiner);
  13373. &lt;/pre&gt;
  13374.  
  13375.  
  13376. &lt;hr /&gt;
  13377.  
  13378. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  13379.  
  13380. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  13381.  
  13382. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13383.  
  13384. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13385.  
  13386. &lt;/ul&gt;
  13387.  
  13388. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13389. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13390. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13391. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13392. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13393. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13394. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13395. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13396. &lt;/li&gt;&lt;/ul&gt;
  13397.  
  13398.  
  13399. &lt;/div&gt;
  13400. </description></item><item><title>Issue #12</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/mar-29.html</link><guid>http://arsdnet.net/this-week-in-d/mar-29.html</guid><pubDate>Sun, 29 Mar 2015 12:00:00 GMT</pubDate><description>
  13401. &lt;div id=&quot;body-container&quot;&gt;
  13402. &lt;h1&gt;
  13403. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13404. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13405. &lt;span id=&quot;title-date&quot;&gt;March 29, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13406.  
  13407.  
  13408. &lt;div id=&quot;preface&quot;&gt;
  13409.  
  13410. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13411.  
  13412. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13413.  
  13414. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13415.  
  13416. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13417.  
  13418. &lt;/div&gt;
  13419.  
  13420. &lt;h2&gt;Statistics&lt;/h2&gt;
  13421.  
  13422. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-03-22&amp;amp;chfieldto=2015-03-29&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;31 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13423. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-03-22&amp;amp;chfieldto=2015-03-29&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;36 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13424. 65 pull requests merged into the language:
  13425.  
  13426. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-22..2015-03-29&quot;&gt;26 into DMD&lt;/a&gt;,
  13427. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-22..2015-03-29&quot;&gt;32 into Phobos&lt;/a&gt;, and
  13428. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-22..2015-03-29&quot;&gt;7 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13429. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-22..2015-03-29&quot;&gt;17 pull requests merged into the website.&lt;/a&gt;
  13430. &lt;/li&gt;&lt;/ul&gt;
  13431.  
  13432. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13433.  
  13434. &lt;p&gt;&lt;a href=&quot;http://dlang.org/changelog.html#new2_067.0&quot;&gt;D 2.067.0 has been released!&lt;/a&gt;&lt;/p&gt;
  13435.  
  13436. &lt;p&gt;A change not listed on the changelog but nevertheless new and useful is that DDoc now supports backtick code, like in GitHub, StackOverflow, and other sites. For example: &lt;tt&gt;`code here`&lt;/tt&gt; inside a ddoc comment. This does two things: it escapes the characters in the block and then wraps it in a DDOC_BACKQUOTED macro. By default, this macro expands to inline code style.&lt;/p&gt;
  13437.  
  13438. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;green&quot;&gt;/// You can now write `&amp;lt;span&amp;gt;stuff like this&amp;lt;/span&amp;gt;` in DDoc!
  13439. &lt;/font&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; example() {}
  13440. &lt;/pre&gt;
  13441.  
  13442. &lt;p&gt;The escaping makes this more than just syntax sugar: it is a new feature that makes documenting functions that handle HTML much easier, since you can write &lt;tt&gt;`&amp;lt;li&amp;gt;`&lt;/tt&gt; without the &lt;tt&gt;&amp;lt;li&amp;gt;&lt;/tt&gt; tag being passed straight through to the output.&lt;/p&gt;
  13443.  
  13444. &lt;p&gt;If you need to write a pair of backticks on a single line, you should use the BACKTICK macro. A backtick on a line without a closing pair is still passed through unmodified, so lines like `text', e.g. ld's output, can be written literally.&lt;/p&gt;
  13445.  
  13446. &lt;p&gt;Other changes with examples can be seen in the changelog.&lt;/p&gt;
  13447.  
  13448. &lt;hr /&gt;
  13449.  
  13450. &lt;p&gt;This release was fully managed by the new release czar, Martin Nowak, using a new process. The download page, as you'll see on the link, includes several packaged variants.&lt;/p&gt;
  13451.  
  13452. &lt;h2&gt;In the community&lt;/h2&gt;
  13453.  
  13454. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  13455.  
  13456. &lt;p&gt;The &lt;a href=&quot;http://dconf.org/2015/schedule/index.html&quot;&gt;schedule for DConf 2015&lt;/a&gt; was announced this week. The selected talks are varied and include low level discussions, high level code presentations, case studies from business users, and more over three days.&lt;/p&gt;
  13457.  
  13458. &lt;p&gt;See the schedule for details.&lt;/p&gt;
  13459.  
  13460. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13461.  
  13462. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mepg32$18k$1@digitalmars.com&quot;&gt;DConf 2015 Schedule published&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mes5lj$2k0j$1@digitalmars.com&quot;&gt;Release D 2.067.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mev9q5$op5$1@digitalmars.com&quot;&gt;vibe.d 0.7.23 has been released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mf21tt$ivt$1@digitalmars.com&quot;&gt;GtkD 3.1.0 released, GTK+ with D.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zundbpxaffzoqlvesamp@forum.dlang.org&quot;&gt;dsq-1: open-source software synthesizer&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mfa712$1upr$1@digitalmars.com&quot;&gt;The D Language: A sweet-spot between Python and C&lt;/a&gt;
  13463.  
  13464. &lt;/li&gt;&lt;/ul&gt;
  13465.  
  13466. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13467.  
  13468. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13469.  
  13470. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mev7ll$mqr$1@digitalmars.com&quot;&gt;Gary Willoughby: &amp;quot;Why Go's design is a disservice to intelligent programmers&amp;quot;&lt;/a&gt; sparked an enormous thread on both Reddit and the D forums. It discusses goroutines in D, language complexity trade offs, and the optics of language flamewars, among many other topics.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pettuhnkkhwwgnqucrua@forum.dlang.org&quot;&gt;DMD compilation speed&lt;/a&gt; discusses the slowing compiler with many releases. It is a constant fight to maintain dmd's performance, slowness creeps in, then it is optimized again, and the cycle continues. This thread discusses ways to stabilize the situation.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qziyjhmffndvlpjdnllg@forum.dlang.org&quot;&gt;Class Hierarchy Graphs&lt;/a&gt; discusses automatically making code layout visualizations from source.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uimssrcikcgjqumbeqep@forum.dlang.org&quot;&gt;Why doesn't D check null pointers&lt;/a&gt; is a frequently asked question answered once again. The answer is that runtime null checks can harm performance and compile time checks are considered too intrusive of a change at this point. Moreover, the most common use cases of null checks: debugging and making servers that don't die with buggy code, both have alternatives: debugging can be done with core dumps and reliable servers or other plugin related code are MUCH better served by process separation. Attempting to continue running after a segfault may lead to memory corruption and unpredictable results, even if you did catch the exception.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mghicuuvxtznzrxmxvwk@forum.dlang.org&quot;&gt;Human unreadable documentation - the ugly seam between simple D and complex D&lt;/a&gt; discusses how the documentation for Phobos make D look a lot harder to use than it really is.
  13471. &lt;/li&gt;&lt;/ul&gt;
  13472.  
  13473. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13474.  
  13475.  
  13476.  
  13477.  
  13478. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13479.  
  13480. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13481.  
  13482. &lt;/ul&gt;
  13483.  
  13484. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13485. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13486. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13487. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13488. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13489. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13490. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13491. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13492. &lt;/li&gt;&lt;/ul&gt;
  13493.  
  13494.  
  13495. &lt;/div&gt;
  13496. </description></item><item><title>Issue #11</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/mar-22.html</link><guid>http://arsdnet.net/this-week-in-d/mar-22.html</guid><pubDate>Sun, 22 Mar 2015 12:00:00 GMT</pubDate><description>
  13497. &lt;div id=&quot;body-container&quot;&gt;
  13498. &lt;h1&gt;
  13499. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13500. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13501. &lt;span id=&quot;title-date&quot;&gt;March 22, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13502.  
  13503.  
  13504. &lt;div id=&quot;preface&quot;&gt;
  13505.  
  13506. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13507.  
  13508. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13509.  
  13510. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13511.  
  13512. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13513.  
  13514. &lt;/div&gt;
  13515.  
  13516. &lt;h2&gt;Statistics&lt;/h2&gt;
  13517.  
  13518. &lt;p&gt;The team is preparing for the next official dmd release, and is only merging major bug fixes and regressions found in the &lt;a href=&quot;http://forum.dlang.org/thread/md5kq0$8au$1@digitalmars.com&quot;&gt;beta&lt;/a&gt; at this time.&lt;/p&gt;
  13519.  
  13520. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-03-16&amp;amp;chfieldto=2015-03-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;16 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13521. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-03-16&amp;amp;chfieldto=2015-03-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;11 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13522. 46 pull requests merged into the language:
  13523.  
  13524. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-16..2015-03-22&quot;&gt;10 into DMD&lt;/a&gt;,
  13525. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-16..2015-03-22&quot;&gt;30 into Phobos&lt;/a&gt;, and
  13526. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-16..2015-03-22&quot;&gt;6 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13527. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-16..2015-03-22&quot;&gt;4 pull requests merged into the website.&lt;/a&gt;
  13528. &lt;/li&gt;&lt;/ul&gt;
  13529.  
  13530. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13531.  
  13532. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/me7ige$qj8$1@digitalmars.com&quot;&gt;Release Candidate D 2.067.0-rc1&lt;/a&gt;&lt;/p&gt;
  13533.  
  13534. &lt;h2&gt;In the community&lt;/h2&gt;
  13535.  
  13536. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13537.  
  13538. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/melcom$2ca7$1@digitalmars.com&quot;&gt;serve - A simple HTTP server for static files&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/oqfjoczwegqqkdqtdqig@forum.dlang.org&quot;&gt;DTanks Alpha&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fffrtzrwuwdbjfiprwgi@forum.dlang.org&quot;&gt;Poodinis Dependency Injection Framework v1.0.0 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/jsscaeiuegibogplkosp@forum.dlang.org&quot;&gt;LDC 0.15.2 beta1 is out!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vikehfdpijfjqlzkzuwk@forum.dlang.org&quot;&gt;New Russian doc in wiki.dlang.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zakmsrnmkvuujzhjqhmd@forum.dlang.org&quot;&gt;Terminal ANSI Colouring Library&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ompfcoinghksukfkjvcb@forum.dlang.org&quot;&gt;dfmt 0.2.0&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/me79ru$jc4$1@digitalmars.com&quot;&gt;SDLang-D v0.9.0&lt;/a&gt;
  13539. &lt;/li&gt;&lt;/ul&gt;
  13540.  
  13541. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13542.  
  13543. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13544.  
  13545. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mechal$28cl$1@digitalmars.com&quot;&gt;Enhancement: issue error on all public functions that are missing ddoc sections&lt;/a&gt; discusses making an opt-in switch to require documentation in code. Counter arguments included the fact that existing D lint tools can already detect this, so it might not make it into the compiler itself.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/melpfi$2scc$1@digitalmars.com&quot;&gt;Making byLine faster: we should be able to delegate this&lt;/a&gt; had Andrei significantly improving byLine's performance and asking the community to help on these issues. An automated performance test suite was proposed.
  13546. &lt;/li&gt;&lt;/ul&gt;
  13547.  
  13548. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13549.  
  13550.  
  13551.  
  13552.  
  13553. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13554.  
  13555. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/thread/qitiqukwqzsjvjkngjeb@forum.dlang.org&quot;&gt;2nd London D Programmers Meetup - Robot Tank Battle Tournament, Tuesday 24th March&lt;/a&gt;&lt;/li&gt;
  13556. &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13557.  
  13558. &lt;/ul&gt;
  13559.  
  13560. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13561. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13562. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13563. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13564. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13565. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13566. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13567. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13568. &lt;/li&gt;&lt;/ul&gt;
  13569.  
  13570.  
  13571. &lt;/div&gt;
  13572. </description></item><item><title>Issue #10</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/mar-15.html</link><guid>http://arsdnet.net/this-week-in-d/mar-15.html</guid><pubDate>Sun, 15 Mar 2015 12:00:00 GMT</pubDate><description>
  13573. &lt;div id=&quot;body-container&quot;&gt;
  13574. &lt;h1&gt;
  13575. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13576. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13577. &lt;span id=&quot;title-date&quot;&gt;March 15, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13578.  
  13579.  
  13580. &lt;div id=&quot;preface&quot;&gt;
  13581.  
  13582. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13583.  
  13584. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13585.  
  13586. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13587.  
  13588. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13589.  
  13590. &lt;/div&gt;
  13591.  
  13592. &lt;h2&gt;Statistics&lt;/h2&gt;
  13593.  
  13594. &lt;p&gt;The team is preparing for the next official dmd release, and is only merging major bug fixes and regressions found in the &lt;a href=&quot;http://forum.dlang.org/thread/md5kq0$8au$1@digitalmars.com&quot;&gt;beta&lt;/a&gt; at this time.&lt;/p&gt;
  13595.  
  13596. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-03-09&amp;amp;chfieldto=2015-03-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;21 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13597. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-03-09&amp;amp;chfieldto=2015-03-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;20 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13598. 45 pull requests merged into the language:
  13599.  
  13600. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-09..2015-03-15&quot;&gt;25 into DMD&lt;/a&gt;,
  13601. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-09..2015-03-15&quot;&gt;17 into Phobos&lt;/a&gt;, and
  13602. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-09..2015-03-15&quot;&gt;3 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13603. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-09..2015-03-15&quot;&gt;3 pull requests merged into the website.&lt;/a&gt;
  13604. &lt;/li&gt;&lt;/ul&gt;
  13605.  
  13606. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13607.  
  13608. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/xtjupwljtpxwvqftezyj@forum.dlang.org&quot;&gt;Last beta for D 2.067 released&lt;/a&gt;; the release candidate is right around the corner.&lt;/p&gt;
  13609.  
  13610. &lt;h2&gt;In the community&lt;/h2&gt;
  13611.  
  13612. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13613.  
  13614. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ionjnsvqcplgxuoipykp@forum.dlang.org&quot;&gt;Video: Cool Things about D - Why and how we use it at Facebook&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdt3b2$915$1@digitalmars.com&quot;&gt;Discounted hotel rates for DConf 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hbnjepeljfdlnaagnzgs@forum.dlang.org&quot;&gt;Deadcode on github - a D-oriented text editor written&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/me2mg7$2e1g$1@digitalmars.com&quot;&gt;[GUI-lib] Maybe a better year for DQuick&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/vggnuhbzkojllxgrjzlv@forum.dlang.org&quot;&gt;dfmt 0.1.5 (codename: &amp;quot;entomology&amp;quot;) - a D code formatting tool&lt;/a&gt;
  13615. &lt;/li&gt;&lt;/ul&gt;
  13616.  
  13617. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13618.  
  13619. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13620.  
  13621. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdtago$em9$1@digitalmars.com&quot;&gt;A few notes on choosing between Go and D for a quick project&lt;/a&gt; has been a very long thread talking about D's pros and cons.
  13622. &lt;p&gt;The majority opinion seems to be that D is a more complex language than Go, and we should &lt;i&gt;embrace&lt;/i&gt; this and market D as being a fully-loaded machine shop with all the power that offers.&lt;/p&gt;
  13623. &lt;p&gt;A second concern was the D documentation, where there's a general consensus that it could use a lot of work in showing how simple things in D really are simple. Currently, the documentation shows a lot of the underlying flexibility and assumes some familiarity with writing intermediate to advanced D on the part of the reader, making it not very newbie friendly. While everyone agrees this could use work, there is no clear plan to actually fix the problem; nobody has yet stepped up willing to do the necessary writing.&lt;/p&gt;
  13624. &lt;p&gt;Other benefits of D discussed include the fast compile time and familiarity to programmers who use other C-style languages.&lt;/p&gt;
  13625. &lt;p&gt;The thread also suggests other marketing-related ideas.&lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/me24t2$2013$1@digitalmars.com&quot;&gt;const as default for variables&lt;/a&gt; discusses an idea to move to const-as-default as opposed to immutable-by-default or the status quo, mutable by default. (Editor's note: the syntax &lt;tt&gt;immutable foo = something;&lt;/tt&gt; is legal in today's D and does inference of immutable types.) While Walter started the thread, there is enough controversy that I do not believe it will be implemented.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/me4njq$1cul$1@digitalmars.com&quot;&gt;Replace core language HexStrings with library entity&lt;/a&gt; came from the D vs Go thread, looking at places the D language itself could be simplified without sacrificing any of the tools it offers. Having previously moved &lt;a href=&quot;http://www.digitalmars.com/articles/b63.html&quot;&gt;octal literals to the library&lt;/a&gt;, Walter proposes we also move hex string literals to the library and asks for similar examples. &lt;p&gt;This thread will likely result in some features being deprecated in some months time, replaced with library alternatives which are substantially similar.&lt;/p&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/me1rac$1n8v$1@digitalmars.com&quot;&gt;sudo apt-get install dmd&lt;/a&gt; discusses packaging dmd in official distribution repositories.
  13626. &lt;/li&gt;&lt;/ul&gt;
  13627.  
  13628. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13629.  
  13630. &lt;h2&gt;Community Interview&lt;/h2&gt;
  13631.  
  13632. &lt;p&gt;We have a new user contribution this week: Joakim interviewed S&amp;#246;nke Ludwig and discussed dub and vibe.d. What follows is the text of that interview, courtesy of Joakim:&lt;/p&gt;
  13633.  
  13634. &lt;p&gt;&lt;b&gt;S&amp;#246;nke Ludwig is the primary developer behind DUB, the D package manager, and the vibe.d web framework, which was recently chosen to be bundled alongside the reference dmd compiler.&lt;/b&gt;&lt;/p&gt;
  13635.  
  13636. &lt;p&gt;&lt;b&gt;- How did you first come to start the vibe.d project and why?  Was it your first D project or were there other attempts before?&lt;/b&gt;&lt;/p&gt;
  13637.  
  13638. &lt;p&gt;- I first heard about D, I think, in a magazine article around maybe
  13639. 2005 and got all ears immediately. My growing dislike for C++ (lacking
  13640. an overall better alternative) grew over the years and the cleaned-up
  13641. syntax and the module system of D alone were huge selling points.
  13642. However, things were still too unstable back then: platform support was
  13643. lacking and I didn't feel ready to ditch the concept of &amp;quot;const&amp;quot; (which
  13644. didn't exist before D 2.x), so that the starting shot for me was when
  13645. the first 2.000 alpha of DMD was released back in 2007.&lt;/p&gt;
  13646.  
  13647. &lt;p&gt;My first large D project was the conversion of my C++ game engine and
  13648. GUI framework to D. Bit for bit, going over the course of multiple
  13649. years, finally the D version had more features than the old C++ code
  13650. base - at about half the number of code lines and those were also much
  13651. shorter on average! This framework also forms the basis of most of my
  13652. current commercial projects. I'd like to publish parts of it one day,
  13653. maybe using some kind of dual-licensing scheme, when I have enough time
  13654. to properly maintain it.&lt;/p&gt;
  13655.  
  13656. &lt;p&gt;&lt;a href=&quot;http://vibed.org&quot;&gt;Vibe.d&lt;/a&gt; was born later, in 2012, when a few friends and I wanted to start a project that was partially web based. In terms of scalability, node.js was the hip new thing and one of us already had experience with it, so we first went with that. However, using JavaScript meant that we had to rewrite and maintain parts of the D code in JavaScript, and more
  13657. importantly, programming with node.js was really awful due to the
  13658. callback-based API.&lt;/p&gt;
  13659.  
  13660. &lt;p&gt;Then I remembered D's &amp;quot;Fiber&amp;quot; class, which was inherited from Tango's runtime during the D1-&amp;gt;D2 transition. This was the missing piece of the puzzle to an I/O system in D that could be made better in almost every aspect. So we decided that we'd put some concentrated effort into this to make the development of the project more bearable. Two months later, the first public alpha version was born.&lt;/p&gt;
  13661.  
  13662. &lt;p&gt;&lt;b&gt;- You call vibe.d &amp;quot;a high-performance asynchronous I/O, concurrency and web application toolkit:&amp;quot; how does that differ from a web framework like ruby on rails?  Why the focus on I/O and concurrency before web applications?&lt;/b&gt;&lt;/p&gt;
  13663.  
  13664. &lt;p&gt;- The initial focus was on getting a generic framework running that could be used as the basis for event based I/O, but also had means to do general thread-based concurrency without interfering with I/O and
  13665. integrated well with the GUI event loop. And although the HTTP server
  13666. component has always been part of the library, all of the higher-level
  13667. web functionality was only added later, step by step, to fill the gaps
  13668. needed for creating larger-scale web services.&lt;/p&gt;
  13669.  
  13670. &lt;p&gt;Today, with the inclusion of high-level declarative web and REST
  13671. frameworks, the emphasis has finally shifted more towards web
  13672. development. The main reason for going this way and not creating a
  13673. separate high-level library is that there are loose ongoing plans to
  13674. eventually integrate the I/O and concurrency abstraction directly into
  13675. the D standard library, and this way there will still be enough meat
  13676. left to continue the library in its current form. But the time may
  13677. actually be ripe for changing that slogan.&lt;/p&gt;
  13678.  
  13679. &lt;p&gt;&lt;b&gt;- How did &lt;a href=&quot;http://code.dlang.org&quot;&gt;DUB&lt;/a&gt; come to be? Any other info on its current use and success would be worthwhile.&lt;/b&gt;&lt;/p&gt;
  13680.  
  13681. &lt;p&gt;- DUB was born as a spin-off of vibe.d. It included a small package
  13682. manager, the vibe.d package manager &amp;quot;VPM&amp;quot;, specifically meant to write
  13683. vibe.d based extensions and applications, relying on rdmd exclusively to build everything. At that time we didn't want to set the goals too high and decided against positioning it as a full D package manager. VPM, in its half year of existence, hadn't been very successful in terms of adoption (about a dozen public packages, most of them our own), but after growing calls for a package manager within the D community, we were finally convinced that we could serve the language ecosystem better by making it a generic tool for D applications and libraries. So we basically started to rip out all vibe.d specifics as far as possible, added proper generic substitutes, and released a first version of DUB.&lt;/p&gt;
  13684.  
  13685. &lt;p&gt;People soon started to add their own packages, but it took another six
  13686. months until we switched the address of the package registry from
  13687. registry.vibed.org to code.dlang.org and things really took off. Since
  13688. then we've had a steady growth of packages going from 40 at the time of
  13689. the switch to almost 500 as of now. Taking only this measure, D2, after
  13690. the big Phobos-Tango-D2 exodus and a long struggle, is now more
  13691. successful than D1 during its best times (dsource.org had about 260
  13692. projects listed). My hope is that the growth and use of packages now
  13693. gets another acceleration due to the new prominent links to
  13694. code.dlang.org on the D homepage, so that one day we'll have a vibrant
  13695. one-stop shop for all kinds of libraries and tools, similar to what more popular languages have accumulated today (Ruby has over 100,000 packages, node.js has crazy 126,000 packages - not sure if we'd want to go that far).&lt;/p&gt;
  13696.  
  13697. &lt;p&gt;In terms of future direction, while the current feature set of DUB, with only little exceptions, has proven to be very successful for supporting an ecosystem of pure D packages, the next goal for DUB is now to get better support for more advanced use cases, such as mixed-language projects (e.g. C++ and D) or more complicated build processes.&lt;/p&gt;
  13698.  
  13699. &lt;p&gt;&lt;b&gt;- Could you talk about your experiences with D in building vibe.d, ie things you liked about D when writing vibe.d and things you had to work around?&lt;/b&gt;&lt;/p&gt;
  13700.  
  13701. &lt;p&gt;- In general, D has always been very pleasant to work with, including when developing vibe.d. I have never experienced this level of productiveness for medium to large scale projects with any other language so far. However, hitting compiler bugs and regressions of all sorts was common, and finding workarounds/reproducible cases and reporting bugs at times diminished a lot of the productivity gains. However, although there is still something that breaks with almost any new beta release of DMD, this has gotten much better over time and isn't so much of an issue today anymore. It can still be a little difficult to maintain compatibility with a range of D compilers (vibe.d tries to support 2.065-2.067 ATM), especially since using new language features can be very tempting!&lt;/p&gt;
  13702.  
  13703. &lt;p&gt;Speaking of which, one of the most useful additions to D would be things like proper &amp;quot;scope&amp;quot; and isolated (a.k.a. &amp;quot;unique&amp;quot;) references. Those would enable the memory-safe use of faster programming paradigms, such as using stack-allocated classes, or accessing objects from different threads without the need for costly locks or atomic operations. These are things that vibe.d could greatly benefit from, but memory safety is too important for network services to go this route without language-based verification.&lt;/p&gt;
  13704.  
  13705. &lt;p&gt;&lt;b&gt;- Please tell us a bit about yourself: who you are, what programming languages you used before D, and your experience first discovering and using D.&lt;/b&gt;&lt;/p&gt;
  13706.  
  13707. &lt;p&gt;I grew up and still live in northern Germany near the city of L&amp;#252;beck,
  13708. which is also where I graduated in bioinformatics a few years ago. My
  13709. first programming experiences began in my early teenager times when I
  13710. got my first 386DX, running DOS/Windows 3.1. I discovered qbasic.exe
  13711. soon after playing around with some simple batch files and began
  13712. creating all kinds of little GUI and 3D-Graphics based DOS applications.&lt;/p&gt;
  13713.  
  13714. &lt;p&gt;The experience of the direct feedback back then got me hooked. After
  13715. some tinkering with TurboBasic - boy, was that fast - and another BASIC
  13716. based Windows IDE (CA Realizer) around '95, a friend of mine gave me a
  13717. CD with Borland C++ 5.0, which I then discovered step by step in a
  13718. completely naive and trial/error based way (What is a &amp;quot;pointer&amp;quot;? Why
  13719. does it crash now?). The next thing I remember are some bad memories
  13720. involving Visual C++ 6 and tons of cross compiler compatibility macros,
  13721. and discovering all of the details of the C++ standard that I wouldn't
  13722. ever have wanted to know about.&lt;/p&gt;
  13723.  
  13724. &lt;p&gt;In these times, I created a big number of small programs, discovering
  13725. the darkest corners of the Windows API, network protocols, hardware
  13726. interfaces, OpenGL and other random things. I also tried out a lot of
  13727. other programming languages, including most of the popular scripting
  13728. languages and a short trip to OCaml, but I've mainly stuck to C and
  13729. C++ for actual projects (still preferring C over C++ due to many
  13730. factors). W32DASM was also one of my favorite tools at the time, without going into details of what kind of 1337 things that was used for, but it also helped me learn the details of x86 assembly.&lt;/p&gt;
  13731.  
  13732. &lt;p&gt;Then, during my time at the university, I worked for Nik Software, a
  13733. former company which specialized in software for professional
  13734. photographers, later bought out by Google. There I managed the creation
  13735. of the company-wide cross-platform core library, providing higher level
  13736. concepts needed for almost all products. This included an image-filtering framework capable of transparently using multi-core CPUs and
  13737. GPUs to filter images of arbitrary sizes and a custom GUI framework,
  13738. which allowed us to maintain a single code base for all platforms, while having the ability to implement advanced GUI concepts that were more or less impossible with other GUI frameworks at the time.&lt;/p&gt;
  13739.  
  13740. &lt;p&gt;For my masters thesis back in 2011, I created a compiler in D for an
  13741. image filtering-specific DSL, which was able to translate to GPU shader
  13742. code (GLSL or HSL), to C++ code and, thanks to LLVM, directly to machine code at runtime. It was then integrated into the company's core library to form the basis for new filters. This was the fist piece of software in the company which was written in D (controlled through an extern(C) interface). The language made this a very pleasant and an extremely efficient endeavor (apart from some friction caused by the C interfaces to the host application and to the LLVM libraries). I intentionally tried to keep the D code simple, without excessive use of advanced meta-programming and other &amp;quot;bleeding edge&amp;quot; features, so that the chance of running into compiler bugs was as low as possible (there have still been quite some of these, and getting 64-bit builds to work on Windows also still was a challenge at the time).&lt;/p&gt;
  13743.  
  13744. &lt;p&gt;&lt;b&gt;- Do you make a living with Rejected Software and writing D?  What kind of business are you into?&lt;/b&gt;&lt;/p&gt;
  13745.  
  13746. - I used to make a living by doing various kinds of software development contract work for some companies, which I still do, but only to a small extent. Topics include low-level development support, accounting software, image processing, web development, graphics creation and more. Some of the projects are written in D, but most are still implemented with other languages as per the request of the customer.
  13747.  
  13748. &lt;p&gt;Today, I try to focus more and more on getting our products ready
  13749. instead, so that one day those will hopefully be able to generate enough income alone. Unfavorable for these plans, offspring and moving to a house has consumed so much time recently that I had to suspend most of my work, including the open source projects. But, setting aside any unforeseen events, I'm hoping the best for getting back to full speed this year.&lt;/p&gt;
  13750.  
  13751. &lt;p&gt;&lt;b&gt;- What do you love and/or hate about D?  This is more general than the specific vibe.d-related question above.&lt;/b&gt;&lt;/p&gt;
  13752.  
  13753. &lt;p&gt;- I basically love the initial (D1) design choices - the clean and easy to parse syntax (field access, templates, slices, foreach etc.), the module system and the low compile times. Also D's meta-programming
  13754. abilities, including CTFE and the more recent support for user-defined
  13755. attributes, are superb and, I'm sure other D programmers know this
  13756. feeling as well, it's sometimes really hard for me now to force myself
  13757. into doing things with certain other languages that could have been done much more efficiently in D, even when talking just about a few lines of code more or less.&lt;/p&gt;
  13758.  
  13759. &lt;p&gt;But the thing I probably dislike most about the language is the at-times strong friction against fundamental improvements in favor of keeping backwards compatibility (which doesn't happen anyway). I believe that the language has to keep moving fast towards &amp;quot;perfection&amp;quot; to stay (or become) successful. Other languages show ways to mitigate the effects of breaking changes, starting with proper deprecation paths and continuing with automatic code-fixing tools or even GitHub bots that file automatic pull requests with fixes for all public repositories.&lt;/p&gt;
  13760.  
  13761. &lt;p&gt;An example of a simple but fundamental issue are the defaults of the
  13762. built-in attributes. I think some of them, for historical or compatibility reasons, are currently simply the wrong way around (pure, @safe, final and scope should really all be enabled by default, with scope providing recursive guarantees) and using them properly completely destroys the initial idea of having a clean language syntax. It's sometimes really sad to see modern idiomatic D code degrading into a mess of attributes and contract syntax noise. After all, a clean syntax used to be one of the key selling points. Attribute inference helps somewhat with this, but that only applies to template functions and also makes tracking down attribute mismatch issues more difficult.&lt;/p&gt;
  13763.  
  13764.  
  13765.  
  13766.  
  13767.  
  13768. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13769.  
  13770. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/thread/qitiqukwqzsjvjkngjeb@forum.dlang.org&quot;&gt;2nd London D Programmers Meetup - Robot Tank Battle Tournament, Tuesday 24th March&lt;/a&gt;&lt;/li&gt;
  13771. &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13772.  
  13773. &lt;/ul&gt;
  13774.  
  13775. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13776. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13777. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13778. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13779. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13780. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13781. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13782. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13783. &lt;/li&gt;&lt;/ul&gt;
  13784.  
  13785.  
  13786. &lt;/div&gt;
  13787. </description></item><item><title>Issue #9</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/mar-08.html</link><guid>http://arsdnet.net/this-week-in-d/mar-08.html</guid><pubDate>Sun, 08 Mar 2015 12:00:00 GMT</pubDate><description>
  13788. &lt;div id=&quot;body-container&quot;&gt;
  13789. &lt;h1&gt;
  13790. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13791. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13792. &lt;span id=&quot;title-date&quot;&gt;March 8, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13793.  
  13794.  
  13795. &lt;div id=&quot;preface&quot;&gt;
  13796.  
  13797. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13798.  
  13799. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13800.  
  13801. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13802.  
  13803. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13804.  
  13805. &lt;/div&gt;
  13806.  
  13807. &lt;h2&gt;Statistics&lt;/h2&gt;
  13808.  
  13809. &lt;p&gt;The team is preparing for the next official dmd release, and is only merging major bug fixes and regressions found in the &lt;a href=&quot;http://forum.dlang.org/thread/md5kq0$8au$1@digitalmars.com&quot;&gt;beta&lt;/a&gt; at this time.&lt;/p&gt;
  13810.  
  13811. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-03-02&amp;amp;chfieldto=2015-03-08&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;7 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13812. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-03-02&amp;amp;chfieldto=2015-03-08&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;26 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13813. 16 pull requests merged into the language:
  13814.  
  13815. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-02..2015-03-08&quot;&gt;3 into DMD&lt;/a&gt;,
  13816. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-02..2015-03-08&quot;&gt;10 into Phobos&lt;/a&gt;, and
  13817. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-02..2015-03-08&quot;&gt;3 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13818. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-03-02..2015-03-08&quot;&gt;2 pull requests merged into the website.&lt;/a&gt;
  13819. &lt;/li&gt;&lt;/ul&gt;
  13820.  
  13821. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13822.  
  13823. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/54FB47B8.5060204@dawg.eu&quot;&gt;DMD now requires a working D compiler to be built&lt;/a&gt;, a step toward making a self-hosting dmd compiler.&lt;/p&gt;
  13824.  
  13825. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/md5kq0$8au$1@digitalmars.com&quot;&gt;D 2.067.0-b3&lt;/a&gt;, the next beta for the soon-to-be-coming release, is out. If you use the beta, please file &lt;a href=&quot;https://issues.dlang.org/&quot;&gt;regression bugs&lt;/a&gt; as soon as possible so we can fix them before the release.&lt;/p&gt;
  13826.  
  13827. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/svuhjrzcnnirfposbqvw@forum.dlang.org&quot;&gt;DIP75&lt;/a&gt; was written, aiming to formalize the release process. It seems uncontroversial.&lt;/p&gt;
  13828.  
  13829. &lt;h2&gt;In the community&lt;/h2&gt;
  13830.  
  13831. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13832.  
  13833. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/md7pa0$2cqf$1@digitalmars.com&quot;&gt;DLang Silicon Valley group is looking for speakers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdfpns$1e1s$1@digitalmars.com&quot;&gt;GtkD 3.0-beta&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uciguycoispkjkmxzzbg@forum.dlang.org&quot;&gt;Digger 1.1 - a tool for working with D's source code and its
  13834. history&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/wctzwywddsrjzbygresa@forum.dlang.org&quot;&gt;dfmt 0.1.3 (codename: &amp;quot;yebblied&amp;quot;) - source code formatter for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdgdhp$1v6m$1@digitalmars.com&quot;&gt;Streaming, making a book!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mdcolf$1hv5$1@digitalmars.com&quot;&gt;DDT 0.11.0 released - Eclipse-based IDE for the D langage&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pjtsalfbphgvkrzczbbh@forum.dlang.org&quot;&gt;Typi, Simple compile to javascript toy language&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hxcukeixfratfapolxyi@forum.dlang.org&quot;&gt;GSoC 2015 - Application Rejected&lt;/a&gt;
  13835. &lt;/li&gt;&lt;/ul&gt;
  13836.  
  13837. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13838.  
  13839. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13840.  
  13841. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/svuhjrzcnnirfposbqvw@forum.dlang.org&quot;&gt;DIP75 - Release Process&lt;/a&gt; is a thread aiming to formalize the dmd release process&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/giybeoqkbcpvueboueez@forum.dlang.org&quot;&gt;Standard GUI framework inspired by Qt&lt;/a&gt; was discussed. While this is a topic which often comes up, it is this editor's opinion that little will come from it - the core Phobos maintainers have little interest in adding a GUI library to the stdlib, and third party ones always end up being more work than the author expects when starting, making them perpetually behind schedule. Nevertheless, the discussions are interesting to follow, and perhaps this one will be different.
  13842. &lt;/li&gt;&lt;/ul&gt;
  13843.  
  13844. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13845.  
  13846.  
  13847.  
  13848. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13849.  
  13850. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/thread/qitiqukwqzsjvjkngjeb@forum.dlang.org&quot;&gt;2nd London D Programmers Meetup - Robot Tank Battle Tournament, Tuesday 24th March&lt;/a&gt;&lt;/li&gt;
  13851. &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13852.  
  13853. &lt;/ul&gt;
  13854.  
  13855. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13856. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13857. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13858. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13859. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13860. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13861. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13862. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13863. &lt;/li&gt;&lt;/ul&gt;
  13864.  
  13865.  
  13866. &lt;/div&gt;
  13867. </description></item><item><title>Issue #8</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/mar-01.html</link><guid>http://arsdnet.net/this-week-in-d/mar-01.html</guid><pubDate>Sun, 01 Mar 2015 12:00:00 GMT</pubDate><description>
  13868. &lt;div id=&quot;body-container&quot;&gt;
  13869. &lt;h1&gt;
  13870. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13871. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13872. &lt;span id=&quot;title-date&quot;&gt;March 1, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13873.  
  13874.  
  13875. &lt;div id=&quot;preface&quot;&gt;
  13876.  
  13877. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13878.  
  13879. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13880.  
  13881. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13882.  
  13883. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13884.  
  13885. &lt;/div&gt;
  13886.  
  13887. &lt;h2&gt;Statistics&lt;/h2&gt;
  13888.  
  13889. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-02-23&amp;amp;chfieldto=2015-03-01&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;20 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13890. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-02-23&amp;amp;chfieldto=2015-03-01&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;13 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13891. 32 pull requests merged into the language:
  13892.  
  13893. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-23..2015-03-01&quot;&gt;23 into DMD&lt;/a&gt;,
  13894. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-23..2015-03-01&quot;&gt;9 into Phobos&lt;/a&gt;, and
  13895. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-23..2015-03-01&quot;&gt;0 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13896. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-23..2015-03-01&quot;&gt;1 pull request merged into the website.&lt;/a&gt;
  13897. &lt;/li&gt;&lt;/ul&gt;
  13898.  
  13899. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13900.  
  13901. &lt;p&gt;&lt;a href=&quot;http://wiki.dlang.org/DIP74&quot;&gt;DIP74&lt;/a&gt; was written and discussed. It looks probable that some variant on it will be implemented. DIP 74 proposes a reference counted class hierarchy. By implementing specially named methods in a class or interface, the compiler will consider objects of that type to be automatically reference counted.&lt;/p&gt;
  13902.  
  13903. &lt;p&gt;These reference counted objects can not be implicitly converted to GC object types, meaning they will form, in effect, a parallel class hierarchy wherein the type system will help catch inappropriately escaping references. Coupled with DIP25, implemented last week, it should make sealed references possible with safe, deterministic freeing.&lt;/p&gt;
  13904.  
  13905. &lt;p&gt;Discussion on the forum this week was dominated by this proposal, with people searching for holes in it and proposing optimizations to it. One such optimization was to elide reference increment and decrement in functions where the reference cannot escape, however this was shown to be easier said than proven. The thread is still ongoing at this time.&lt;/p&gt;
  13906.  
  13907. &lt;p&gt;A likely candidate for refcounting in the standard library will be the Throwable or Exception classes.&lt;/p&gt;
  13908.  
  13909. &lt;h2&gt;In the community&lt;/h2&gt;
  13910.  
  13911. &lt;h3&gt;Community announcements&lt;/h3&gt;
  13912.  
  13913. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/dbqouzpaqzuabztfywyb@forum.dlang.org&quot;&gt;DCD v0.5.1: autocompletion fixes for classes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qitiqukwqzsjvjkngjeb@forum.dlang.org&quot;&gt;2nd London D Programmers Meetup - Robot Tank Battle Tournament, Tuesday 24th March&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m2r3tcbjxp.fsf@comcast.net&quot;&gt;LDC for iOS&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mczocbpoohslhrjimzqs@forum.dlang.org&quot;&gt;Mister Math is wanted!&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gabebhgbfmqxwpgvveqg@forum.dlang.org&quot;&gt;LLVM 3.6 released - LDC master branch/0.15.1 is ready to use it!&lt;/a&gt;
  13914. &lt;/li&gt;&lt;/ul&gt;
  13915.  
  13916. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  13917.  
  13918. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  13919.  
  13920. &lt;ul&gt;&lt;li&gt; The DIP74/Reference Counting discussion spanned several threads:
  13921. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mcg8qq$1mbr$1@digitalmars.com&quot;&gt;A Refcounted Array Type&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mco4g0$njr$1@digitalmars.com&quot;&gt;DIP74: Reference Counted Class Objects&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mctb0l$kc9$2@digitalmars.com&quot;&gt;DIP74 updated with new protocol for function calls&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mctqmo$13gb$1@digitalmars.com&quot;&gt;Making RCSlice and DIP74 work with const and immutable&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mcik3j$153g$1@digitalmars.com&quot;&gt;An exegesis of Walter's reference counted slice&lt;/a&gt;
  13922. &lt;a href=&quot;http://forum.dlang.org/thread/mcqcor$aa$1@digitalmars.com&quot;&gt;Improving DIP74: functions borrow by default, retain only if needed&lt;/a&gt;
  13923. &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;
  13924. There were also user threads with competing proposals: &lt;a href=&quot;http://forum.dlang.org/thread/offurllmuxjewizxedab@forum.dlang.org&quot;&gt;My Reference Safety System (DIP???)&lt;/a&gt; and a &lt;a href=&quot;http://forum.dlang.org/thread/leotolslftebhfvlypyy@forum.dlang.org&quot;&gt;complaint about the process&lt;/a&gt;.
  13925. &lt;/li&gt;&lt;/ul&gt;
  13926.  
  13927. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  13928.  
  13929.  
  13930.  
  13931. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  13932.  
  13933. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://forum.dlang.org/thread/qitiqukwqzsjvjkngjeb@forum.dlang.org&quot;&gt;2nd London D Programmers Meetup - Robot Tank Battle Tournament, Tuesday 24th March&lt;/a&gt;&lt;/li&gt;
  13934. &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  13935.  
  13936. &lt;/ul&gt;
  13937.  
  13938. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  13939. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  13940. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13941. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13942. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  13943. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  13944. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13945. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  13946. &lt;/li&gt;&lt;/ul&gt;
  13947.  
  13948.  
  13949. &lt;/div&gt;
  13950. </description></item><item><title>Issue #7</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/feb-22.html</link><guid>http://arsdnet.net/this-week-in-d/feb-22.html</guid><pubDate>Sun, 22 Feb 2015 12:00:00 GMT</pubDate><description>
  13951. &lt;div id=&quot;body-container&quot;&gt;
  13952. &lt;h1&gt;
  13953. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  13954. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  13955. &lt;span id=&quot;title-date&quot;&gt;February 22, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  13956.  
  13957.  
  13958. &lt;div id=&quot;preface&quot;&gt;
  13959.  
  13960. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  13961.  
  13962. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  13963.  
  13964. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  13965.  
  13966. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  13967.  
  13968. &lt;p&gt;Missed last week's issue? Find it &lt;a href=&quot;http://arsdnet.net/this-week-in-d/feb-15.html&quot;&gt;here&lt;/a&gt; or use the &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt; as an archive.&lt;/p&gt;
  13969. &lt;/div&gt;
  13970.  
  13971. &lt;h2&gt;Statistics&lt;/h2&gt;
  13972.  
  13973. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-02-15&amp;amp;chfieldto=2015-02-22&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;24 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13974. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-02-15&amp;amp;chfieldto=2015-02-22&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;24 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  13975. 45 pull requests merged into the language:
  13976.  
  13977. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-15..2015-02-22&quot;&gt;19 into DMD&lt;/a&gt;,
  13978. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-15..2015-02-22&quot;&gt;19 into Phobos&lt;/a&gt;, and
  13979. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-15..2015-02-22&quot;&gt;7 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  13980. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-15..2015-02-22&quot;&gt;17 pull requests merged into the website.&lt;/a&gt;
  13981. &lt;/li&gt;&lt;/ul&gt;
  13982.  
  13983. &lt;h2&gt;Major Changes&lt;/h2&gt;
  13984. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mca361$1no8$1@digitalmars.com&quot;&gt;DDMD just went green on all platforms for the first time&lt;/a&gt;. ddmd is a port of the dmd compiler from C++ to D. The port now passes automated testing. With this, D is likely to be fully bootstrapped into self-hosting very soon.&lt;/p&gt;
  13985.  
  13986. &lt;p&gt;&lt;a href=&quot;http://wiki.dlang.org/DIP25&quot;&gt;DIP25&lt;/a&gt; was implemented. It adds a feature called &lt;b&gt;return ref&lt;/b&gt; to function parameters, signifying that it takes a reference that may be returned from the function. This helps prevent reference escaping from sealed objects.&lt;/p&gt;
  13987.  
  13988. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/mc26m5$11ve$1@digitalmars.com&quot;&gt;dmd 2.067 beta&lt;/a&gt; has been released.&lt;/p&gt;.
  13989.  
  13990. &lt;h2&gt;In the community&lt;/h2&gt;
  13991.  
  13992. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  13993. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ma755q$9re$1@digitalmars.com&quot;&gt;Early bird registration is open &lt;b&gt;until the end of this week&lt;/b&gt;!&lt;/a&gt; For $250 in ($B February only), you can register to attend DConf 2015 which will be held May 27-29 at Utah Valley University in Orem, Utah, in the United States.&lt;/p&gt;
  13994.  
  13995. &lt;p&gt;&lt;b&gt;The talk submission deadline is &lt;a href=&quot;http://forum.dlang.org/thread/mcdqo4$2dh9$1@digitalmars.com&quot;&gt;this Saturday&lt;/a&gt;!&lt;/b&gt; If you have something to say about D at the conference, please &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;&lt;b&gt;submit ASAP&lt;/b&gt;&lt;/a&gt;!&lt;/p&gt;
  13996.  
  13997. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  13998.  
  13999. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14000.  
  14001. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mbvtpb$20lv$1@digitalmars.com&quot;&gt;[NEEDING HELP] Translation of Ali Cehreli's book in French&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mbtt8c$3ng$1@digitalmars.com&quot;&gt;New book: Developing with compile time in mind&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ubrngkdmyduepmfkhefp@forum.dlang.org&quot;&gt;let (x,y) = ... made possible by community library module&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mc26m5$11ve$1@digitalmars.com&quot;&gt;We are Beta (2.067.0-b2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/updwbngwrilngxhunzon@forum.dlang.org&quot;&gt;dfmt 0.1.0 (D source code formatting tool) released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hdcgwukmojxfnlvvqxsz@forum.dlang.org&quot;&gt;Reloaded for dub - automatically rebuilds when files are changed&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mc1raf$2dvo$40@digitalmars.com&quot;&gt;quick-and-dirty minimalistic LISP engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cwmvdndazklelixtqrru@forum.dlang.org
  14002. &quot;&gt;Dgame revived - D game tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gjylpmfrxyfpnqczsejy@forum.dlang.org&quot;&gt;dbeaengine - D binding for the BeaEngine disassembler&lt;/a&gt;
  14003. &lt;/li&gt;&lt;/ul&gt;
  14004.  
  14005. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14006.  
  14007. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14008.  
  14009. &lt;ul&gt;&lt;li&gt; Apple's transition away from GC prompted a &lt;a href=&quot;http://forum.dlang.org/thread/tbwqibnmdzmlxjrtawic@forum.dlang.org&quot;&gt;discussion on garbage collection vs reference counting&lt;/a&gt;. D got a &lt;a href=&quot;http://wiki.dlang.org/DIP25&quot;&gt;new feature&lt;/a&gt; to help implement sealed references.&lt;/li&gt;&lt;li&gt; There was also a discussion on &lt;a href=&quot;http://forum.dlang.org/thread/vijvcfeqxnohtpfuckyp@forum.dlang.org&quot;&gt;using exceptions with the @nogc annotation&lt;/a&gt; which was inconclusive, though refcounting came up again as well as preallocated exceptions.
  14010. &lt;/li&gt;&lt;/ul&gt;
  14011.  
  14012. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14013.  
  14014. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14015. &lt;p&gt;When installing dmd, you may use premade packages or a generic zip download. Despite only showing the Ubuntu, Debian, Fedora, CentOS, and openSUSE logos, the Linux zip is fairly generic and works on most distros. I use it, for example, on Slackware Linux.&lt;/p&gt;
  14016.  
  14017. &lt;p&gt;Installing the packages tends to do a full installation to system locations, but using the zip is done most easily in-place. That is, you simply unzip it and run the programs directly out of there without trying to copy or move the files to other folders.&lt;/p&gt;
  14018.  
  14019. &lt;p&gt;You might make a script in your PATH that forwards the command to a zip location. Then, using a new version of dmd is as simple as unzipping the new version to the same place where you unzipped the old one.&lt;/p&gt;
  14020.  
  14021. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14022.  
  14023. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14024.  
  14025. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  14026. &lt;/ul&gt;
  14027.  
  14028. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14029. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14030. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14031. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14032. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14033. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14034. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14035. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14036. &lt;/li&gt;&lt;/ul&gt;
  14037.  
  14038.  
  14039. &lt;/div&gt;
  14040. </description></item><item><title>Issue #6</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/feb-15.html</link><guid>http://arsdnet.net/this-week-in-d/feb-15.html</guid><pubDate>Sun, 15 Feb 2015 12:00:00 GMT</pubDate><description>
  14041. &lt;div id=&quot;body-container&quot;&gt;
  14042. &lt;h1&gt;
  14043. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14044. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14045. &lt;span id=&quot;title-date&quot;&gt;February 15, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14046.  
  14047.  
  14048. &lt;div id=&quot;preface&quot;&gt;
  14049.  
  14050. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14051.  
  14052. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14053.  
  14054. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  14055.  
  14056. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14057.  
  14058. &lt;p&gt;&lt;b&gt;Last week's issue&lt;/b&gt; was cancelled due to the editor taking a sick day. This issue of &lt;i&gt;This Week in D&lt;/i&gt; will cover major events from the preceding two weeks.&lt;/p&gt;
  14059. &lt;/div&gt;
  14060.  
  14061. &lt;h2&gt;Statistics&lt;/h2&gt;
  14062.  
  14063. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-02-02&amp;amp;chfieldto=2015-02-15&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;47 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14064. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-02-02&amp;amp;chfieldto=2015-02-15&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;43 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14065. 101 pull requests merged into the language:
  14066.  
  14067. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-15&quot;&gt;41 into DMD&lt;/a&gt;,
  14068. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-15&quot;&gt;35 into Phobos&lt;/a&gt;, and
  14069. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-15&quot;&gt;25 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14070. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-15&quot;&gt;20 pull requests merged into the website.&lt;/a&gt;
  14071. &lt;/li&gt;&lt;/ul&gt;
  14072.  
  14073. &lt;h2&gt;In the community&lt;/h2&gt;
  14074.  
  14075. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  14076.  
  14077. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ma755q$9re$1@digitalmars.com&quot;&gt;Early bird registration is open!&lt;/a&gt; For $250 in February only, you can register to attend DConf 2015 which will be held May 27-29 at Utah Valley University in Orem, Utah, in the United States.&lt;/p&gt;
  14078.  
  14079. &lt;p&gt;The talk submission deadline is this month! If you have something to say about D at the conference, please &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;submit soon&lt;/a&gt;!&lt;/p&gt;
  14080.  
  14081. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/mbdo4n$1pr2$1@digitalmars.com&quot;&gt;second call for proposals&lt;/a&gt; has been issued, let's make it a great conference together.&lt;/p&gt;
  14082.  
  14083. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14084.  
  14085. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14086.  
  14087. &lt;ul&gt;&lt;li&gt; The &lt;a href=&quot;http://forum.dlang.org/thread/lwvtazxjscdafspgbalt@forum.dlang.org#post-twjeqejvyohrkjgipkyp:40forum.dlang.org&quot;&gt;London D Programmers MeetUp&lt;/a&gt; was on Tuesday, February 3rd at Skills Matter.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rstqgjfsmodayitoczie@forum.dlang.org&quot;&gt;D Lecture in Tel Aviv, Israel&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mauc89$qdm$1@digitalmars.com&quot;&gt;Martin Nowak is our new release czar&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gctbjxuhhpnbcxlxryfm@forum.dlang.org&quot;&gt;Berlin D Meetup Feb 2015&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ctsxrsnmikqegtrredxg@forum.dlang.org&quot;&gt;DCD 0.5.0 -- DCD is a client/server program used to provide D code
  14088. autocompletion for various text editors and IDEs.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lpbwoduwbzphjdpsgpio@forum.dlang.org&quot;&gt;DlangIDE alpha released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/weuxppabkrreaxbqqpdv@forum.dlang.org&quot;&gt;DDocs.org: auto-generated documentation for all DUB projects (WIP)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/cjcfanvzrbvllysyzlps@forum.dlang.org&quot;&gt;Packt is looking for someone to author a new book: &amp;quot;Learning D&amp;quot;&lt;/a&gt;
  14089. &lt;/li&gt;&lt;/ul&gt;
  14090.  
  14091. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14092.  
  14093. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14094.  
  14095. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mb938d$30id$1@digitalmars.com&quot;&gt;Testing package proposed for Phobos&lt;/a&gt; because testing ranges is difficult without mocks. std.internal.test.dummyrange already exists along with other testing libraries. A &lt;a href=&quot;http://digitalmars.com/sargon/asinputrange.html&quot;&gt;module&lt;/a&gt; was written for Walter's Sargon extension library.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mb0uvr$2fdb$1@digitalmars.com&quot;&gt;@trust is an encapsulation method, not an escape&lt;/a&gt; is a long thread prompted by a long bugzilla discussion about the use of @trusted in Phobos. @trusted is often used on small local functions to provide an escape from the @safe protections. These small functions are not really trusted on their own, but since they are highly limited in scope, their use at all possible points can be manually verified. This allows automatic @safe checking for most the function while allowing limited escapes. Walter argues this is incorrect and the correct way to use @trusted is to encapsulate the whole operation, so the usage of the function does not need to be checked. The discussion argued both cases are valid and reviewers need to check it on a case-by-case basis to see what is best. The discussion also turned to possible language changes to help make @trusted and @safe easier to use.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/maud7e$1j3u$1@digitalmars.com&quot;&gt;Another idiom I wish were gone from phobos/druntime&lt;/a&gt; is a thread discussing the pros and cons of &lt;tt&gt;in&lt;/tt&gt; contracts. Andrei argues the code is unnecessarily verbose, but is convinced that explicit contracts do carry other advantages. People argue the verbosity is just due to blindly applying style rules when they don't make sense.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mb68cu$9ck$1@digitalmars.com&quot;&gt;A safer interface for core.stdc&lt;/a&gt; proposes writing tiny wrappers for standard C functions to provide increased safety using D features such as array slices.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kvqklkmjnajuhrlthuug@forum.dlang.org&quot;&gt;Renaming DMD File Extensions from C to C++&lt;/a&gt; discusses a longstanding minor annoyance: for historical reasons, dmd's C++ source code has .c file extensions. This would change it to .cpp. It is unclear if the change will happen, since dmd is being ported to D anyway.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mb070a$1ok1$1@digitalmars.com&quot;&gt;misplaced @trust?&lt;/a&gt; discusses a possible language change to make @trusted easier to use. It does not look like the change will happen.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ysnfzpvrcvmjdekulfnq@forum.dlang.org&quot;&gt;Git, the D package manager&lt;/a&gt; argues that git submodules can be used as a package manager. However, deficiencies in dependency management shoot the idea down.
  14096. &lt;/li&gt;&lt;/ul&gt;
  14097.  
  14098. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14099.  
  14100. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14101. &lt;p&gt;Don't use the &lt;tt&gt;~&lt;/tt&gt; operator in a call to &lt;tt&gt;writeln&lt;/tt&gt;. Instead, pass the arguments separately:&lt;/p&gt;
  14102.  
  14103. &lt;pre class=&quot;d_code&quot;&gt; writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;hello &amp;quot;&lt;/font&gt; ~ yourname); &lt;font color=&quot;green&quot;&gt;// don't do this
  14104. &lt;/font&gt;
  14105. writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;hello &amp;quot;&lt;/font&gt;, yourname); &lt;font color=&quot;green&quot;&gt;// instead, do this.
  14106. &lt;/font&gt;&lt;/pre&gt;
  14107.  
  14108. &lt;p&gt;The &lt;tt&gt;~&lt;/tt&gt; operator (not to be confused with the &lt;tt&gt;~=&lt;/tt&gt; operator, which works differently) allocates an intermediate to hold the concatenated result. This is often very convenient, but also somewhat wasteful. &lt;tt&gt;writeln&lt;/tt&gt; offers an alternative with more convenience and efficiency: its variadic argument list.&lt;/p&gt;
  14109.  
  14110. &lt;p&gt;&lt;tt&gt;writeln&lt;/tt&gt; (and similar functions like &lt;tt&gt;writefln&lt;/tt&gt;, &lt;tt&gt;std.conv.text&lt;/tt&gt;, and &lt;tt&gt;std.string.format&lt;/tt&gt;) can take any number of arguments of any type. It will convert them to string automatically and write them out, generating a minimal number of intermediates. With most arguments, &lt;tt&gt;writeln&lt;/tt&gt; will not allocate at all.&lt;/p&gt;
  14111.  
  14112. &lt;p&gt;Simply changing your &lt;tt&gt;~&lt;/tt&gt; to &lt;tt&gt;,&lt;/tt&gt; in &lt;tt&gt;writeln&lt;/tt&gt; calls can make your code more efficient at small cost.&lt;/p&gt;
  14113.  
  14114. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14115.  
  14116. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14117.  
  14118. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  14119. &lt;/ul&gt;
  14120.  
  14121. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14122. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14123. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14124. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14125. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14126. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14127. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14128. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14129. &lt;/li&gt;&lt;/ul&gt;
  14130.  
  14131.  
  14132. &lt;/div&gt;
  14133. </description></item><item><title>Issue #5</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/feb-08.html</link><guid>http://arsdnet.net/this-week-in-d/feb-08.html</guid><pubDate>Sun, 08 Feb 2015 12:00:00 GMT</pubDate><description>
  14134. &lt;div id=&quot;body-container&quot;&gt;
  14135. &lt;h1&gt;
  14136. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14137. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14138. &lt;span id=&quot;title-date&quot;&gt;February 8, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14139.  
  14140.  
  14141. &lt;div id=&quot;preface&quot;&gt;
  14142.  
  14143. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14144.  
  14145. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14146.  
  14147. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  14148.  
  14149. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14150.  
  14151. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is in the process of being hosted at dlang.org. Starting soon, you'll be able to find this publication there.&lt;/p&gt;
  14152. &lt;/div&gt;
  14153.  
  14154. &lt;h2&gt;Upcoming events in the week&lt;/h2&gt;
  14155.  
  14156. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/lwvtazxjscdafspgbalt@forum.dlang.org#post-twjeqejvyohrkjgipkyp:40forum.dlang.org&quot;&gt;London D Programmers MeetUp&lt;/a&gt; will be on Tuesday, February 3rd at Skills Matter.&lt;/p&gt;
  14157.  
  14158. &lt;h2&gt;Statistics&lt;/h2&gt;
  14159.  
  14160. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-02-02&amp;amp;chfieldto=2015-02-08&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;25 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14161. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-02-02&amp;amp;chfieldto=2015-02-08&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;30 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14162. 55 pull requests merged into the language:
  14163.  
  14164. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-08&quot;&gt;24 into DMD&lt;/a&gt;,
  14165. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-08&quot;&gt;18 into Phobos&lt;/a&gt;, and
  14166. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-08&quot;&gt;13 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14167. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-02-02..2015-02-08&quot;&gt;13 pull requests merged into the website.&lt;/a&gt;
  14168. &lt;/li&gt;&lt;/ul&gt;
  14169.  
  14170. &lt;h2&gt;In the community&lt;/h2&gt;
  14171.  
  14172. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  14173.  
  14174. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ma755q$9re$1@digitalmars.com&quot;&gt;Early bird registration is open!&lt;/a&gt; For $250 in February only, you can register to attend DConf 2015 which will be held May 27-29 at Utah Valley University in Orem, Utah, in the United States.&lt;/p&gt;
  14175.  
  14176. &lt;p&gt;The talk submission deadline is this month! If you have something to say about D at the conference, please &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;submit soon&lt;/a&gt;!&lt;/p&gt;
  14177.  
  14178. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14179.  
  14180. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14181.  
  14182. &lt;ul&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;
  14183.  
  14184. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14185.  
  14186. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14187.  
  14188. &lt;ul&gt;&lt;li&gt; http://forum.dlang.org/thread/gctbjxuhhpnbcxlxryfm@forum.dlang.org
  14189. http://forum.dlang.org/thread/axlruepeznsokcpkgvyb@forum.dlang.org
  14190. http://forum.dlang.org/thread/lpbwoduwbzphjdpsgpio@forum.dlang.org
  14191. http://forum.dlang.org/thread/mauc89$qdm@digitalmars.com
  14192. http://forum.dlang.org/thread/rstqgjfsmodayitoczie@forum.dlang.org
  14193. http://forum.dlang.org/thread/mb68cuck@digitalmars.com
  14194. http://forum.dlang.org/thread/mb0uvrfdb@digitalmars.com
  14195. http://forum.dlang.org/thread/mb938d0id@digitalmars.com
  14196. http://forum.dlang.org/thread/maud7ej3u@digitalmars.com
  14197. http://forum.dlang.org/thread/kvqklkmjnajuhrlthuug@forum.dlang.org
  14198. http://forum.dlang.org/thread/mb070aok1@digitalmars.com
  14199. http://forum.dlang.org/thread/ysnfzpvrcvmjdekulfnq@forum.dlang.org
  14200. &lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;
  14201.  
  14202. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14203.  
  14204. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14205.  
  14206. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14207.  
  14208. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14209.  
  14210. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  14211. &lt;/ul&gt;
  14212.  
  14213. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14214. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14215. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14216. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14217. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14218. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14219. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14220. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14221. &lt;/li&gt;&lt;/ul&gt;
  14222.  
  14223.  
  14224. &lt;/div&gt;
  14225. </description></item><item><title>Issue #4</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/feb-01.html</link><guid>http://arsdnet.net/this-week-in-d/feb-01.html</guid><pubDate>Sun, 01 Feb 2015 12:00:00 GMT</pubDate><description>
  14226. &lt;div id=&quot;body-container&quot;&gt;
  14227. &lt;h1&gt;
  14228. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14229. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14230. &lt;span id=&quot;title-date&quot;&gt;February 1, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14231.  
  14232.  
  14233. &lt;div id=&quot;preface&quot;&gt;
  14234.  
  14235. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14236.  
  14237. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14238.  
  14239. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  14240.  
  14241. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14242.  
  14243. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is in the process of being hosted at dlang.org. Starting soon, you'll be able to find this publication there.&lt;/p&gt;
  14244. &lt;/div&gt;
  14245.  
  14246. &lt;h2&gt;Upcoming events in the week&lt;/h2&gt;
  14247.  
  14248. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/lwvtazxjscdafspgbalt@forum.dlang.org#post-twjeqejvyohrkjgipkyp:40forum.dlang.org&quot;&gt;London D Programmers MeetUp&lt;/a&gt; will be on Tuesday, February 3rd at Skills Matter.&lt;/p&gt;
  14249.  
  14250. &lt;h2&gt;Statistics&lt;/h2&gt;
  14251.  
  14252. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-01-26&amp;amp;chfieldto=2015-02-01&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;31 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14253. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-01-26&amp;amp;chfieldto=2015-02-01&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;47 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14254. 81 pull requests merged into the language:
  14255.  
  14256. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01&quot;&gt;26 into DMD&lt;/a&gt;,
  14257. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01&quot;&gt;34 into Phobos&lt;/a&gt;, and
  14258. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01&quot;&gt;21 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14259. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-26..2015-02-01&quot;&gt;28 pull requests merged into the website.&lt;/a&gt;
  14260. &lt;/li&gt;&lt;/ul&gt;
  14261.  
  14262. &lt;h2&gt;Major Changes&lt;/h2&gt;
  14263.  
  14264. &lt;p&gt; A &lt;a href=&quot;http://wiki.dlang.org/Vision/2015H1&quot;&gt;2015 H1 Vision&lt;/a&gt; was released by Walter and Andrei, laying out a longer term vision. The &lt;a href=&quot;http://forum.dlang.org/thread/majurl$2457$1@digitalmars.com&quot;&gt;announcement thread&lt;/a&gt; has some discussion, and another &lt;a href=&quot;http://forum.dlang.org/thread/khyopozjdkximzmczayz@forum.dlang.org&quot;&gt;concern was raised&lt;/a&gt; about incorporating bare metal programming needs into the vision.
  14265. &lt;/p&gt;
  14266.  
  14267. &lt;p&gt;A &lt;a href=&quot;http://forum.dlang.org/thread/mag5hp$105a$1@digitalmars.com&quot;&gt;relatively minor change&lt;/a&gt; was implemented, but possibly will be removed before the official release out of concern of making D too unstable or too full with a large quality of minor features. The debate is ongoing at this moment.&lt;/p&gt;
  14268.  
  14269. &lt;h2&gt;In the community&lt;/h2&gt;
  14270.  
  14271. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  14272.  
  14273. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/ma755q$9re$1@digitalmars.com&quot;&gt;Early bird registration is open!&lt;/a&gt; For $250 in February only, you can register to attend DConf 2015 which will be held May 27-29 at Utah Valley University in Orem, Utah, in the United States.&lt;/p&gt;
  14274.  
  14275. &lt;p&gt;The talk submission deadline is this month! If you have something to say about D at the conference, please &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;submit soon&lt;/a&gt;!&lt;/p&gt;
  14276.  
  14277. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14278.  
  14279. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14280.  
  14281. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/satkcwpjqogloqlrjvkw@forum.dlang.org&quot;&gt;NEW asm.dlang.org site&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uipzdootphzqtgwwowrs@forum.dlang.org&quot;&gt;New D tutorial found, with broken web compilation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/axlruepeznsokcpkgvyb@forum.dlang.org&quot;&gt;DCD 0.5.0 beta&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/hvoityjvecejejgwfvkq@forum.dlang.org&quot;&gt;DerelictAllegro5&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/uvzsudzzziqcmwngwtkp@forum.dlang.org&quot;&gt;painlessjson released, looking for improvement advice&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/annwneokyoevaselmher@forum.dlang.org&quot;&gt;Harbored-mod (doc generator) 0.2: Cross-referencing, methods/fields no longer in separate files&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qwburbwxybaenfanpgnl@forum.dlang.org&quot;&gt;dco can be used in vs.net and MonoD&lt;/a&gt;
  14282. &lt;/li&gt;&lt;/ul&gt;
  14283.  
  14284. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14285.  
  14286. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14287.  
  14288. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/kbtbgabpydtvvpxtxauq@forum.dlang.org&quot;&gt;dlang.org &amp;quot;Getting Started&amp;quot; page&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zycoewkuhbcqtuleeida@forum.dlang.org&quot;&gt;[website redesign] PR for the one with the big red menu bar&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/maksep$a94$92@digitalmars.com&quot;&gt;D, windows developement, frustration and fish&lt;/a&gt; is one user's frustration with the Windows DLL import library situation. There are solutions in today's D, but they are more trouble than they have to be, especially on 32 bit Windows. That thread lead to the &lt;a href=&quot;http://forum.dlang.org/thread/kksyjkgkwdfqfwhqwldb@forum.dlang.org&quot;&gt;extern(Windows, &amp;quot;user32.dll&amp;quot;)&lt;/a&gt; thread discussing a feature that may help make it easier, inspired by Delphi, and reminded me of a thread from last week that discussed &lt;a href=&quot;http://forum.dlang.org/thread/m9lhc3$1r1v$1@digitalmars.com&quot;&gt;the problem with coupling shared object symbol visibility with protection&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ma922d$2hau$1@digitalmars.com&quot;&gt;Window creation, for phobos?&lt;/a&gt; sparked a discussion of the pros and cons of GUI libraries in the standard library.
  14289. &lt;/li&gt;&lt;/ul&gt;
  14290.  
  14291. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14292.  
  14293. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14294. &lt;p&gt;This week, we'll learn a bit about &lt;b&gt;destructors&lt;/b&gt;. Destructors in D are sometimes run by the garbage collector, especially when present in classes (as opposed to structs), which means some care should be used with them. Namely, pretend the GC is a null pointer, so don't use any GC allocated child objects and do not attempt to allocate any new GC memory.&lt;/p&gt;
  14295.  
  14296. &lt;p&gt;If a destructor is called by the garbage collector, it happens as the object is being collected. Since D uses a mark and sweep collector, child objects are marked as dead at the same time as their parent, and may be swept up first. As a result, member variables that are references to garbage collected memory may be invalid.&lt;/p&gt;
  14297.  
  14298. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Foo {
  14299. string b;
  14300. ~&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {
  14301. &lt;font color=&quot;green&quot;&gt;// invalid reference to b
  14302. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// since it is a child object
  14303. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// that refers to GC memory,
  14304. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// b may already be freed by the
  14305. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// time this destructor is called
  14306. &lt;/font&gt; writeln(b);
  14307. }
  14308. }
  14309. &lt;/pre&gt;
  14310.  
  14311. &lt;p&gt;Moreover, trying to allocate garbage collected memory during a collection cycle will trigger the invalid memory operation error at runtime, killing the program.&lt;/p&gt;
  14312.  
  14313. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;class&lt;/font&gt; Foo {
  14314. ~&lt;font color=&quot;blue&quot;&gt;this&lt;/font&gt;() {
  14315. &lt;font color=&quot;green&quot;&gt;// invalid memory operation error:
  14316. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// to!string allocates a new string,
  14317. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// which cannot be done during a
  14318. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// collection cycle.
  14319. &lt;/font&gt; writeln(to!string(10));
  14320. }
  14321. }
  14322. &lt;/pre&gt;
  14323.  
  14324. &lt;p&gt;Class destructors have limited use and should be used with care. Decorating them with &lt;tt&gt;@nogc&lt;/tt&gt; will help you avoid allocations, but you are on your own about avoiding GC referenced memory.&lt;/p&gt;
  14325.  
  14326. &lt;p&gt;Best practice is to only use value type members in destructors. A practical, common example would be pointers to C memory or objects. For example, you may call free() on a pointer returned by malloc().&lt;/p&gt;
  14327.  
  14328. &lt;div class=&quot;pitfall&quot;&gt;Also, remember that destructors for GC objects may never run at all.&lt;/div&gt;
  14329.  
  14330.  
  14331. &lt;div class=&quot;tip&quot;&gt; &lt;p&gt;Destructors on stack allocated objects, typically structs, are a different story. Since they are run automatically (and deterministically) upon the object going out of scope instead of by the garbage collector, these restrictions do not apply.&lt;/p&gt;
  14332.  
  14333. &lt;p&gt;Bottom line, if you want to use destructors, put them in structs and declare them normally, without using pointers or &lt;tt&gt;new&lt;/tt&gt;. They will then work like in C++.&lt;/p&gt;
  14334. &lt;/div&gt;
  14335.  
  14336. &lt;hr /&gt;
  14337.  
  14338. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  14339.  
  14340. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14341.  
  14342. &lt;h2&gt;Project Spotlight&lt;/h2&gt;
  14343. &lt;p&gt;This week, I'm going to start spotlighting the components I've written that can be used for simple game development.&lt;/p&gt;
  14344.  
  14345. &lt;p&gt;The first module in the spotlight is &lt;b&gt;simpledisplay.d&lt;/b&gt;, which provides facilities to create a window in a cross-platform (Windows and X11 are actively maintained) manner. The window can be drawn inside with 2d primitives or OpenGL and will feed events to your program. You can create several windows as well, integrate with a generic event loop on Windows, and get access to the native handles for further use.&lt;/p&gt;
  14346.  
  14347. &lt;p&gt;simpledisplay.d has no dependencies outside of my own color.d, which itself doesn't even depend on Phobos. This means it can compile very quickly and make small executables - about 180 KB on Windows for a GUI program, statically linked with no DLL requirements.&lt;/p&gt;
  14348.  
  14349. &lt;p&gt;To get started, download &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/color.d&quot;&gt;color.d&lt;/a&gt; and &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/simpledisplay.d&quot;&gt;simpledisplay.d&lt;/a&gt; from my github.&lt;/p&gt;
  14350.  
  14351. &lt;p&gt;Then, in the same directory as those two files, create a file &lt;tt&gt;window.d&lt;/tt&gt; with these contents:&lt;/p&gt;
  14352.  
  14353. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; simpledisplay;
  14354. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14355. &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; width = 300;
  14356. &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; height = 300;
  14357. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; window = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; SimpleWindow(width, height);
  14358.  
  14359. window.eventLoop(0);
  14360. }
  14361. &lt;/pre&gt;
  14362.  
  14363. &lt;p&gt;Compile with: &lt;tt&gt;dmd window.d color.d simpledisplay.d&lt;/tt&gt; and run the program. You'll see a window pop up and you can close it with the normal GUI interface.&lt;/p&gt;
  14364.  
  14365. &lt;p&gt;Next, we'll add drawing and event handling:&lt;/p&gt;
  14366.  
  14367. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; simpledisplay;
  14368. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14369. &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; width = 300;
  14370. &lt;font color=&quot;blue&quot;&gt;enum&lt;/font&gt; height = 300;
  14371. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; window = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; SimpleWindow(width, height);
  14372.  
  14373. window.eventLoop(0,
  14374. (MouseEvent ev) {
  14375. &lt;font color=&quot;blue&quot;&gt;if&lt;/font&gt;(ev.type == MouseEventType.motion) {
  14376. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; painter = window.draw();
  14377. painter.clear();
  14378. painter.fillColor = Color.red;
  14379. painter.drawRectangle(Point(ev.x - 7, ev.y - 7), 15, 15);
  14380. }
  14381. }
  14382. );
  14383. }
  14384. &lt;/pre&gt;
  14385.  
  14386. &lt;p&gt;Compile and run the program, then move the mouse around in the window. A red square will be drawn under the mouse as you move it.&lt;/p&gt;
  14387.  
  14388. &lt;p&gt;Drawing in simpledisplay.d is done in one of three ways:&lt;/p&gt;
  14389.  
  14390. &lt;ul&gt;&lt;li&gt; &lt;tt&gt;window.draw&lt;/tt&gt;, which returns a painter struct with methods that call 2d routines from the operating system.&lt;/li&gt;&lt;li&gt; Or drawing directly to pixel images, then drawing the image on the window. Drawing the image can be done with a convenience function, &lt;tt&gt;drawImage&lt;/tt&gt;, or with methods on the painter, or with as OpenGL textures.&lt;/li&gt;&lt;li&gt; OpenGL functions.
  14391. &lt;/li&gt;&lt;/ul&gt;
  14392.  
  14393. &lt;p&gt;The object returned by &lt;tt&gt;window.draw&lt;/tt&gt; is a struct that automatically double buffers drawing routines. When the painter goes out of scope, its destructor will swap the active and drawing buffers, making your contents visible. When you draw, always make sure it is in a limited lifetime scope to see the results.&lt;/p&gt;
  14394.  
  14395. &lt;div class=&quot;tip&quot;&gt;Braces can be used to limit the lifetime of an object by introducing a nested scope:
  14396. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14397. &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a;
  14398. {
  14399. Struct s;
  14400. &lt;font color=&quot;green&quot;&gt;// a is still in scope and this
  14401. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// code is run in sequence - the {}
  14402. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// just introduces a lexical scope,
  14403. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// it doesn't define a new function.
  14404. &lt;/font&gt; } &lt;font color=&quot;green&quot;&gt;// s.dtor is called now
  14405. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// s is no longer in scope
  14406. &lt;/font&gt; }
  14407. &lt;/pre&gt;
  14408.  
  14409. This should not be confused with a delegate literal:
  14410.  
  14411. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14412. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; a = {
  14413. Struct s;
  14414. };
  14415. &lt;font color=&quot;green&quot;&gt;// a is a delegate now - the code inside those
  14416. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// braces is NOT automatically run
  14417. &lt;/font&gt;
  14418. a(); &lt;font color=&quot;green&quot;&gt;// but it is run now
  14419. &lt;/font&gt; }
  14420. &lt;/pre&gt;
  14421.  
  14422. The difference braces at the top level when the parser is looking for a statement introduces a new scope, whereas braces when the parser is looking for an expression introduces a delegate literal.
  14423. &lt;/div&gt;
  14424.  
  14425. &lt;p&gt;The &lt;tt&gt;eventLoop&lt;/tt&gt; function takes one or more arguments. The first argument is an integer which sets a timer pulse for that number of milliseconds. If passed 0, it never pulses on a timer, so it will wait forever for another GUI event. If passed some other value, it will call an event handler with zero arguments as much as it can, up to that point. This gives the foundation for animations and games.&lt;/p&gt;
  14426.  
  14427. &lt;p&gt;Each argument after the timeout are event handlers. Inspired by std.concurrency, it matches events to handlers by the type of arguments the handler receives.&lt;/p&gt;
  14428.  
  14429. &lt;div class=&quot;pitfall&quot;&gt;If you use the right argument but get a compilation failure saying it can't use that type, watch the message for the &lt;tt&gt;function&lt;/tt&gt; keyword. simpledisplay.d only works with delegates, not functions. While most handlers will naturally be delegates, there may be a need to specify the delegate keyword in the handler, right before the arguments list:
  14430. &lt;pre class=&quot;d_code&quot;&gt; window.eventLoop(500,
  14431. &lt;font color=&quot;green&quot;&gt;// without the delegate keyword, this would be a function
  14432. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// and fail to compile.
  14433. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;delegate&lt;/font&gt; () {
  14434. writeln(&lt;font color=&quot;red&quot;&gt;&amp;quot;pulse triggered.&amp;quot;&lt;/font&gt;);
  14435. });
  14436. &lt;/pre&gt;
  14437.  
  14438. The difference between a delegate and function is that a delegate has a context pointer. If a code literal doesn't need to access any enclosed variables, it will be automatically typed function. Specifying either &lt;tt&gt;function&lt;/tt&gt; or &lt;tt&gt;delegate&lt;/tt&gt; will force it to be one or the other.
  14439. &lt;/div&gt;
  14440.  
  14441. &lt;p&gt;Here, we add a handler for &lt;tt&gt;MouseEvent&lt;/tt&gt; and react to it by drawing. Other events we can watch for are &lt;tt&gt;()&lt;/tt&gt; - no arguments for timer pulse, &lt;tt&gt;KeyEvent&lt;/tt&gt; for key press and release events, or &lt;tt&gt;dchar&lt;/tt&gt; for higher-level a-character-was-typed events. It is also possible to handle window resize events and low-level native OS events with other functions. simpledisplay.d tries to get out of your way when you don't want it, so it helps to bootstrap a simple program without limiting you when you need more advanced capabilities.&lt;/p&gt;
  14442.  
  14443. &lt;p&gt;This is just the beginning of what simpledisplay.d can do. It also has functions for accessing the clipboard and other GUI features. &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/minigui.d&quot;&gt;minigui.d&lt;/a&gt; uses native Windows widgets or custom Xlib code on top of simpledisplay.d to start building multi-window GUIs. On Linux, it can integrate with &lt;a href=&quot;https://github.com/adamdruppe/arsd/blob/master/eventloop.d&quot;&gt;eventloop.d&lt;/a&gt; to merge events from several asynchronous sources. It also gives a foundation for writing 3D graphics and platform-specific applications like X Window managers.&lt;/p&gt;
  14444.  
  14445. &lt;p&gt;In the next installments in this series, we'll look at using OpenGL with simpledisplay.d, then we'll look at its sister modules, simpleaudio.d and joystick.d, to start building a simple game in D with minimum outside dependencies.&lt;/p&gt;
  14446.  
  14447. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14448.  
  14449. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  14450. &lt;/ul&gt;
  14451.  
  14452. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14453. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14454. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14455. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14456. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14457. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14458. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14459. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14460. &lt;/li&gt;&lt;/ul&gt;
  14461.  
  14462.  
  14463. &lt;/div&gt;
  14464. </description></item><item><title>Issue #3</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jan-25.html</link><guid>http://arsdnet.net/this-week-in-d/jan-25.html</guid><pubDate>Sun, 25 Jan 2015 12:00:00 GMT</pubDate><description>
  14465. &lt;div id=&quot;body-container&quot;&gt;
  14466. &lt;h1&gt;
  14467. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14468. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14469. &lt;span id=&quot;title-date&quot;&gt;January 25, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14470.  
  14471.  
  14472. &lt;div id=&quot;preface&quot;&gt;
  14473.  
  14474. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14475.  
  14476. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14477.  
  14478. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  14479.  
  14480. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14481.  
  14482. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is in the process of being hosted at dlang.org. Starting soon, you'll be able to find this publication there.&lt;/p&gt;
  14483. &lt;/div&gt;
  14484.  
  14485. &lt;h2&gt;Last Week's Events&lt;/h2&gt;
  14486.  
  14487. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m9u9jj$25f9$1@digitalmars.com&quot;&gt;Silicon Valley first meetup&lt;/a&gt; went well and others are planned.&lt;/p&gt;
  14488.  
  14489. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m8dfgb$qfv$1@digitalmars.com?page=2#post-m9s16v:242pbl:241:40digitalmars.com&quot;&gt;Walter Bright's talk at Microsoft&lt;/a&gt; was packed and had plenty of questions. &lt;a href=&quot;https://www.youtube.com/watch?v=IkwaV6k6BmM&quot;&gt;Video is available on YouTube&lt;/a&gt; and a &lt;a href=&quot;http://discuss.rust-lang.org/t/interfacing-d-to-legacy-c-code-a-summary-of-a-competing-languages-capabilities/1406&quot;&gt;summary was written on the Rust forums&lt;/a&gt;, indicating a great deal of interest in the topic: &amp;quot;This could be a killer feature for D&amp;quot;.&lt;/p&gt;
  14490.  
  14491. &lt;p&gt;Walter's talk also got some discussion on &lt;a href=&quot;http://www.reddit.com/r/programming/comments/2tdy5z/interfacing_d_to_legacy_c_code_by_walter_bright/&quot;&gt;Reddit&lt;/a&gt;.&lt;/p&gt;
  14492.  
  14493. &lt;p&gt;The &lt;a href=&quot;http://forum.dlang.org/thread/yyfeeqiuuepuzhjvkqcb@forum.dlang.org?page=3#post-engtykpinecatjcxerkf:40forum.dlang.org&quot;&gt;Berlin meetup&lt;/a&gt; happened and &amp;quot;was nice&amp;quot;. More information will be available later, and the event is expected to happen again.&lt;/p&gt;
  14494.  
  14495. &lt;h2&gt;Statistics&lt;/h2&gt;
  14496.  
  14497. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-01-19&amp;amp;chfieldto=2015-01-25&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;34 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14498. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-01-19&amp;amp;chfieldto=2015-01-25&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;25 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14499. 80 pull requests merged into the language:
  14500.  
  14501. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25&quot;&gt;30 into DMD&lt;/a&gt;,
  14502. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25&quot;&gt;32 into Phobos&lt;/a&gt;, and
  14503. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25&quot;&gt;18 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14504. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-19..2015-01-25&quot;&gt;52 pull requests merged into the website.&lt;/a&gt;
  14505. &lt;/li&gt;&lt;/ul&gt;
  14506.  
  14507. &lt;h2&gt;Major Changes&lt;/h2&gt;
  14508.  
  14509. &lt;ul&gt;&lt;li&gt; The &lt;a href=&quot;http://dlang.org/&quot;&gt;website&lt;/a&gt; got a style makeover and now features more dynamic content in the form of active forum threads on the sidebar.&lt;/li&gt;&lt;li&gt; Part of the style makeover was a number of tweaks to navigation and mobile responsiveness - try it from your mobile device!
  14510. &lt;/li&gt;&lt;/ul&gt;
  14511.  
  14512.  
  14513.  
  14514. &lt;h2&gt;In the community&lt;/h2&gt;
  14515.  
  14516. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  14517.  
  14518. &lt;p&gt;We're one month away from the talk submission deadline. If you have something to say about D at the conference, please &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;submit soon&lt;/a&gt;!&lt;/p&gt;
  14519.  
  14520. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14521.  
  14522. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14523.  
  14524. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/lwvtazxjscdafspgbalt@forum.dlang.org#post-emkixniquqbtllctmgui:40forum.dlang.org&quot;&gt;London D Programmer's meetup scheduled for Tuesday, the 3rd of February&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/umcdnxxuhmlkrjrvoqss@forum.dlang.org&quot;&gt;DerelictCEF: Chromium Emdedded Framework Binding&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/dzggzjwegumwqcaogaki@forum.dlang.org&quot;&gt;Coedit alpha 11 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9t9rc$10ot$1@digitalmars.com&quot;&gt;Interfacing D to existing C++ code&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
  14525.  
  14526. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14527.  
  14528. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14529.  
  14530. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/mailman.4996.1421777547.9932.digitalmars-d@puremagic.com&quot;&gt;forcing &amp;quot;@nogc&amp;quot; on class destructors&lt;/a&gt; - class destructors are one of the most common source of mistakes for people coming from C++; this thread has a proposal to help correct those mistakes at compile time&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9s4cd$2s1v$1@digitalmars.com&quot;&gt;Calypso and the future of D&lt;/a&gt; - Calypso is a ldc fork that focuses on C++ interoperability. This thread discusses how we can bring those capabilities in for wider use.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9u2mu$1rjd$1@digitalmars.com&quot;&gt;[WORK] groupBy is in! Next: aggregate&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/idnlkqfzzerhrfsqnkqk@forum.dlang.org&quot;&gt;Czech D community&lt;/a&gt;
  14531. &lt;/li&gt;&lt;/ul&gt;
  14532.  
  14533. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14534.  
  14535. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14536. &lt;p&gt;This week, we'll explore the &lt;b&gt;D module and import system&lt;/b&gt;. Specifically, facilities it offers to avoid symbol conflicts.&lt;/p&gt;
  14537.  
  14538. &lt;div class=&quot;tip&quot;&gt;The module and import system are documented under &lt;a href=&quot;http://dlang.org/module.html&quot;&gt;&amp;quot;modules&amp;quot;&lt;/a&gt; on the website.&lt;/div&gt;
  14539.  
  14540. &lt;p&gt;When you get a symbol conflict, it can be somewhat frustrating:&lt;/p&gt;
  14541.  
  14542. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; arsd.dom;
  14543. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.xml;
  14544.  
  14545. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14546. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Document();
  14547. }
  14548. &lt;/pre&gt;
  14549.  
  14550. &lt;p&gt;Results in: &lt;tt&gt;Error: arsd.dom.Document at dom.d(3389) conflicts with std.xml.Document at dmd2/linux/bin32/../../src/phobos/std/xml.d(538)&lt;/tt&gt;&lt;/p&gt;
  14551.  
  14552. &lt;p&gt;&lt;tt&gt;arsd.dom&lt;/tt&gt; and &lt;tt&gt;std.xml&lt;/tt&gt; are both libraries for dealing with XML and have a number of similar classes that share names. If you were to import just one, the &lt;tt&gt;main&lt;/tt&gt; function would compile without issue, but importing both libraries leads to ambiguous naming.&lt;/p&gt;
  14553.  
  14554. &lt;p&gt;To solve the problem, use the fully-qualified name at the usage site:&lt;/p&gt;
  14555.  
  14556. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; arsd.dom;
  14557. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.xml;
  14558.  
  14559. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14560. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; arsd.dom.Document();
  14561. }
  14562. &lt;/pre&gt;
  14563.  
  14564. &lt;p&gt;Then, the code will compile. Note that you only need to use the full name when a conflict occurs, which is typically on type instantiations or calls to free functions. You don't need to disambiguate class member calls because the type itself is already clear:&lt;/p&gt;
  14565.  
  14566. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14567. &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; arsd.dom.Document();
  14568. &lt;font color=&quot;green&quot;&gt;// since the compiler knows document is of type arsd.dom.Document,
  14569. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// this works even if std.xml's Document also has a text property
  14570. &lt;/font&gt; document.text = &lt;font color=&quot;red&quot;&gt;&amp;quot;foo&amp;quot;&lt;/font&gt;;
  14571. }
  14572. &lt;/pre&gt;
  14573.  
  14574. &lt;p&gt;While disambiguation is somewhat rare, using the fully-qualified name can get verbose. D offers two facilities to make it easier: &lt;b&gt;static imports&lt;/b&gt; and &lt;b&gt;renamed imports&lt;/b&gt;.&lt;/p&gt;
  14575.  
  14576. &lt;p&gt;A static import works like any other import except that it always requires its symbols to be fully qualified, which keeps them from conflicting:&lt;/p&gt;
  14577.  
  14578. &lt;pre class=&quot;d_code&quot;&gt;&lt;font color=&quot;blue&quot;&gt;static&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; arsd.dom;
  14579. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.xml;
  14580.  
  14581. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14582. &lt;font color=&quot;green&quot;&gt;// compiles without conflict - since arsd.dom is
  14583. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// statically imported, it's Document class must be
  14584. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// referred to as arsd.dom.Document, meaning plain
  14585. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// Document is unambiguously referring to std.xml.Document
  14586. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; Document();
  14587.  
  14588. &lt;font color=&quot;green&quot;&gt;// the fully-qualified names from arsd.dom are still available too:
  14589. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; other_document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; arsd.dom.Document();
  14590. }
  14591. &lt;/pre&gt;
  14592.  
  14593. &lt;p&gt;A renamed import lets you customize the fully-qualified name at the usage point. Otherwise, it works like any other import:&lt;/p&gt;
  14594.  
  14595. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; dom = arsd.dom; &lt;font color=&quot;green&quot;&gt;// syntax is yourname = original.name;
  14596. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; x = std.xml;
  14597.  
  14598. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14599. &lt;font color=&quot;green&quot;&gt;// loads arsd.dom.Document with a shorter, custom name
  14600. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; document = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; dom.Document();
  14601.  
  14602. &lt;font color=&quot;green&quot;&gt;// loads the std.xml document
  14603. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;auto&lt;/font&gt; d2 = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; x.Document();
  14604. }
  14605. &lt;/pre&gt;
  14606.  
  14607. &lt;p&gt;You may combine import features, in other words, you may write &lt;tt&gt;static import dom = arsd.dom;&lt;/tt&gt; and have a static renamed import which must be accessed by the full name, but you set the full name to be something you want.&lt;/p&gt;
  14608.  
  14609. &lt;div class=&quot;pitfall&quot;&gt;Another import-related issue people can have is that functions are not overloaded across module boundaries, even if the argument types are unambiguous, unless you alias both functions to the same name in your module explicitly. Learn more in the article about &lt;a href=&quot;http://dlang.org/hijack.html&quot;&gt;function hijacking&lt;/a&gt;.&lt;/div&gt;
  14610.  
  14611. &lt;p&gt;D's import system has more features too, including a list of symbols to import, public imports, and others. Read the &lt;a href=&quot;http://dlang.org/module.html&quot;&gt;documentation page&lt;/a&gt; and other resources on the website or D books to learn more.&lt;/p&gt;
  14612.  
  14613. &lt;hr /&gt;
  14614.  
  14615. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  14616.  
  14617. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14618.  
  14619.  
  14620. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14621.  
  14622. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  14623. &lt;/ul&gt;
  14624.  
  14625. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14626. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14627. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14628. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14629. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14630. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14631. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14632. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14633. &lt;/li&gt;&lt;/ul&gt;
  14634.  
  14635.  
  14636. &lt;/div&gt;
  14637. </description></item><item><title>Issue #2</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jan-12.html</link><guid>http://arsdnet.net/this-week-in-d/jan-12.html</guid><pubDate>Sun, 18 Jan 2015 12:00:00 GMT</pubDate><description>
  14638. &lt;div id=&quot;body-container&quot;&gt;
  14639. &lt;h1&gt;
  14640. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14641. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14642. &lt;span id=&quot;title-date&quot;&gt;January 18, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14643.  
  14644.  
  14645.  
  14646.  
  14647. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14648.  
  14649. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14650.  
  14651. &lt;p&gt;This is the first edition of &lt;i&gt;This Week in D&lt;/i&gt; and we're looking for help and feedback. Any suggestions for style, visual design, or content are welcome!&lt;/p&gt;
  14652.  
  14653. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14654.  
  14655. &lt;h2&gt;Statistics&lt;/h2&gt;
  14656.  
  14657. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?list_id=179422&amp;amp;resolution=FIXED&amp;amp;chfieldto=2015-01-11&amp;amp;chfield=bug_status&amp;amp;query_format=advanced&amp;amp;chfieldfrom=2015-01-04&amp;amp;chfieldvalue=RESOLVED&amp;amp;bug_status=RESOLVED&quot;&gt;22 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14658. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?list_id=179423&amp;amp;resolution=---&amp;amp;chfieldto=2015-01-11&amp;amp;chfield=[Bug%20creation]&amp;amp;query_format=advanced&amp;amp;chfieldfrom=2015-01-04&amp;amp;bug_status=NEW&quot;&gt;25 bugs added&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14659. 90 pull requests merged into the language:
  14660.  
  14661. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+updated%3A2015-01-04..2015-01-15&quot;&gt;41 into DMD&lt;/a&gt;,
  14662. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+updated%3A2015-01-04..2015-01-15&quot;&gt;31 into Phobos&lt;/a&gt;, and
  14663. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+updated%3A2015-01-04..2015-01-15&quot;&gt;18 into druntime &lt;/a&gt;.
  14664. &lt;/li&gt;&lt;/ul&gt;
  14665.  
  14666. &lt;h2&gt;Major Changes&lt;/h2&gt;
  14667.  
  14668. &lt;ul&gt;&lt;li&gt; DDoc in git master dmd now supports &lt;tt&gt;backticked inline code&lt;/tt&gt; with escaping.&lt;/li&gt;&lt;li&gt;
  14669. &lt;a href=&quot; https://github.com/D-Programming-Language/dlang.org/commit/1a0ee6b81aca5f768f78108b1b9300633bddf18f&quot;&gt; The garbage collector can now be configured through the command line, the environment or by options embedded into the executable.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14670. &lt;tt&gt;volatileLoad&lt;/tt&gt; and &lt;tt&gt;volatileStore&lt;/tt&gt; intrinsics were added.&lt;/li&gt;&lt;li&gt;
  14671. Built-in associative arrays now have a &lt;tt&gt;.byKeyValue&lt;/tt&gt; method that returns a forward range iterating over key/value pairs.
  14672. &lt;/li&gt;&lt;/ul&gt;
  14673. &lt;h2&gt;Project Spotlight&lt;/h2&gt;
  14674. &lt;p&gt;The spotlight this week is on this publication, &lt;a href=&quot;http://arsdnet.net/this-week-in-d/&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;&lt;/a&gt;.&lt;/p&gt;
  14675. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is written in &lt;a href=&quot;http://dlang.org/ddoc.html&quot;&gt;Ddoc&lt;/a&gt; and is about all things D, with the blessing of Walter Bright and Andrei Alexandrescu. It is a new project, and thus may still be a little rough around the edges - contributions are always welcome.&lt;/p&gt;
  14676.  
  14677. &lt;p&gt;It wants to be more than just a collection of statistics and links. &lt;i&gt;This Week in D&lt;/i&gt; should be an interesting read for casual observers and experienced D users alike, with a weekly tip column and project spotlight from me or the community to help get the word out about what you're working in on D.&lt;/p&gt;
  14678.  
  14679. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; keeps its reader appraised about what's going on in D's whole ecosystem!&lt;/p&gt;
  14680.  
  14681. &lt;p&gt;Want your project featured here? Prepare a link and write up a few paragraphs about it, then &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;contact me&lt;/a&gt;! Your project does not have to be complete to be featured - we like works-in-progress too.&lt;/p&gt;
  14682.  
  14683. &lt;h2&gt;In the community&lt;/h2&gt;
  14684.  
  14685. &lt;h3&gt;DConf 2015 announced!&lt;/h3&gt;
  14686.  
  14687. &lt;p&gt;&lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;DConf 2015&lt;/a&gt; will be held at Utah Valley University in Orem, Utah, from May 27, 2015 through May 29, 2015!&lt;/p&gt;
  14688.  
  14689. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m8pg3j$26ba$1@digitalmars.com&quot;&gt;UVU is sponsoring DConf 2015&lt;/a&gt; and the conference organizers are &lt;a href=&quot;http://dconf.org/2015/index.html&quot;&gt;looking for talk submissions now&lt;/a&gt;.&lt;/p&gt;
  14690.  
  14691. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14692.  
  14693. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14694.  
  14695. &lt;ul&gt;&lt;li&gt;
  14696. &lt;a href=&quot;http://forum.dlang.org/thread/weodkqwxrqetvolhbghb@forum.dlang.org&quot;&gt;GCCJIT Bindings for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14697. &lt;a href=&quot;http://forum.dlang.org/thread/ywtsrevlfecerpopjiig@forum.dlang.org&quot;&gt;Bindings for libmRSS: for parsing, writing and creating RSS/ATOM files or streams.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14698. &lt;a href=&quot;http://forum.dlang.org/thread/hapeegrotkazppwdnstk@forum.dlang.org&quot;&gt;DOtherSide: QML bindings for both D and Nim&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14699. &lt;a href=&quot;http://forum.dlang.org/thread/baffupjujyjremacoxky@forum.dlang.org&quot;&gt;Gource visualisations of various D repositories&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14700. &lt;a href=&quot;http://forum.dlang.org/thread/fhixatmgqeymkepvlior@forum.dlang.org&quot;&gt;D bindings and high level wrapper for systemd journal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14701. &lt;a href=&quot;http://forum.dlang.org/thread/m8bdul$1dke$1@digitalmars.com&quot;&gt;DMD's lexer available on code.dlang.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14702. &lt;a href=&quot;http://forum.dlang.org/thread/szqsscsvcbpjjeelkpve@forum.dlang.org&quot;&gt;DlangUI project update&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14703. &lt;a href=&quot;http://forum.dlang.org/thread/m8ibci$f8t$1@digitalmars.com&quot;&gt;Sargon library gets Ddoc macro processor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14704. &lt;a href=&quot;http://forum.dlang.org/thread/eycxjdxgsraxtobkeijt@forum.dlang.org&quot;&gt;We're looking for a Software Developer! (D language)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14705. &lt;a href=&quot;http://forum.dlang.org/thread/m84g13$ci1$1@digitalmars.com&quot;&gt;Visual D 0.3.40 released&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14706. &lt;a href=&quot;http://forum.dlang.org/thread/pzbudftwgbdptnseonmy@forum.dlang.org&quot;&gt;&amp;#8709;MQD 1.0.0-alpha released - now with full &amp;#8709;MQ 4.0 support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14707. &lt;a href=&quot;http://forum.dlang.org/thread/sqcqenpkxufgjxzraonp@forum.dlang.org&quot;&gt;We're looking for a Linux Systems Admin!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14708. &lt;a href=&quot;http://forum.dlang.org/thread/zbqcagfbicgsjgrfxcdx@forum.dlang.org&quot;&gt;D port of the Dynamic Window Manager (DWM)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14709. &lt;a href=&quot;http://forum.dlang.org/thread/avvtftyekvfrqsmdiuup@forum.dlang.org&quot;&gt;D idioms list&lt;/a&gt;
  14710.  
  14711. &lt;/li&gt;&lt;/ul&gt;
  14712.  
  14713. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14714.  
  14715. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14716.  
  14717. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/tqegmjcofcnwapqitrdo@forum.dlang.org&quot;&gt;For those ready to take the challenge&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14718. &lt;a href=&quot;http://forum.dlang.org/thread/m7ns90$16t1$1@digitalmars.com&quot;&gt;DIP25 - ref revamp proposal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14719. &lt;a href=&quot;http://forum.dlang.org/thread/mailman.3926.1420094321.9932.digitalmars-d@puremagic.com&quot;&gt;Phobos colour module?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14720. &lt;a href=&quot;http://forum.dlang.org/thread/mailman.4367.1420795702.9932.digitalmars-d@puremagic.com&quot;&gt;NaCl/Emscripten&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14721. &lt;a href=&quot;http://forum.dlang.org/thread/vlzwhhymkjgckgyoxlrq@forum.dlang.org&quot;&gt;@api: One attribute to rule them All&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14722. &lt;a href=&quot;http://forum.dlang.org/thread/piyaqxrqkajiylfzcxut@forum.dlang.org&quot;&gt;Game development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14723. &lt;a href=&quot;http://forum.dlang.org/thread/eeywxusjhcapltfswqxz@forum.dlang.org&quot;&gt;Is it possible to collect object usage information during compilation?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14724. &lt;a href=&quot;http://forum.dlang.org/thread/okuzksqzczprvuklpzaw@forum.dlang.org&quot;&gt;An idea for commercial support for D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14725. &lt;a href=&quot;http://forum.dlang.org/thread/m8hof1$2q4o$1@digitalmars.com&quot;&gt;Ready to make page-per-item ddocs the default?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14726. &lt;a href=&quot;http://forum.dlang.org/thread/wrlasjtoazqilqcygyww@forum.dlang.org&quot;&gt;GSOC - Holiday Edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14727. &lt;a href=&quot;http://forum.dlang.org/thread/m8s1dr$24lp$1@digitalmars.com&quot;&gt;Is anyone working on a D source code formatting tool?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14728. &lt;a href=&quot;http://forum.dlang.org/thread/dpweryxnhcrrpxmniwkm@forum.dlang.org&quot;&gt;Thoughts on replacement languages (Reddit + D)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14729. &lt;a href=&quot;http://forum.dlang.org/thread/m90s0u$1a2a$1@digitalmars.com&quot;&gt;Good post about out-of-the-box experience with D&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14730. &lt;a href=&quot;http://forum.dlang.org/thread/m8tkfm$ret$1@digitalmars.com&quot;&gt;Why exceptions for error handling is so important&lt;/a&gt;
  14731. &lt;/li&gt;&lt;/ul&gt;
  14732.  
  14733. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14734.  
  14735.  
  14736.  
  14737. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14738.  
  14739. &lt;p&gt;This week, we'll look at how to &lt;b&gt;use a custom class allocator at the call site&lt;/b&gt;.&lt;/p&gt;
  14740.  
  14741. &lt;p&gt;Class objects in D are typically allocated with the &lt;tt&gt;new&lt;/tt&gt; operator:&lt;/p&gt;
  14742.  
  14743. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;green&quot;&gt;// classes are reference types, so they must be
  14744. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// initialized. &amp;quot;MyClass c;&amp;quot;, unlike in C++, would
  14745. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// leave c as null, causing a segfault when you try
  14746. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// to use it.
  14747. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;//
  14748. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// The normal way to initialize a class is with new:
  14749. &lt;/font&gt; MyClass c = &lt;font color=&quot;blue&quot;&gt;new&lt;/font&gt; MyClass(args...);
  14750. &lt;/pre&gt;
  14751.  
  14752. &lt;p&gt;There are times when you won't want to do that, however, such as
  14753.    when you are avoiding the garbage collector or wanting to use
  14754.    a custom allocator.&lt;/p&gt;
  14755.  
  14756. &lt;div class=&quot;tip&quot;&gt;You can also avoid the garbage collector in your critical loop
  14757.      by pre-allocating your objects before entering the main loop of
  14758.      your program, then reusing those objects as needed. &lt;/div&gt;
  14759.  
  14760. &lt;p&gt;The alternative to &lt;tt&gt;new&lt;/tt&gt; is to do it yourself: allocate the memory
  14761.    yourself, then call &lt;tt&gt;std.conv.emplace&lt;/tt&gt; to perform a placement new
  14762.    in that memory. You can allocate the memory with &lt;tt&gt;malloc&lt;/tt&gt; for C
  14763.    style heap memory, or as a static array to place it on the stack:&lt;/p&gt;
  14764.  
  14765. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.conv : emplace;
  14766.  
  14767. &lt;font color=&quot;blue&quot;&gt;ubyte&lt;/font&gt;[&lt;font color=&quot;blue&quot;&gt;__traits&lt;/font&gt;(classInstanceSize, YourClass)] buffer;
  14768.  
  14769. YourClass obj = emplace!YourClass(buffer[], ctor args...);
  14770. &lt;font color=&quot;green&quot;&gt;// Destroy the object explicitly at scope exit, which will
  14771. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// call the destructor deterministically.
  14772. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;scope&lt;/font&gt;(exit) .destroy(obj);
  14773.  
  14774. &lt;font color=&quot;green&quot;&gt;// use obj normally here
  14775. &lt;/font&gt;&lt;/pre&gt;
  14776.  
  14777. &lt;p&gt;The &lt;tt&gt;__traits(classInstanceSize, YourClass)&lt;/tt&gt; portion is important: it tells you the size of a class object. &lt;tt&gt;YourClass.sizeof&lt;/tt&gt; won't work because classes are reference types. It will return the size of the underlying pointer instead of the object itself!&lt;/p&gt;
  14778.  
  14779. &lt;p&gt;Once your memory is allocated, you can place the class there then proceed to use it normally. The static array and scope guard will imitate C++'s class behavior in D - allocated on the stack and destroyed when it goes out of scope.&lt;/p&gt;
  14780.  
  14781. &lt;div class=&quot;pitfall&quot;&gt;Wrapping class references in structs for automatic management
  14782.  is possible, but difficult to get correct when faced with
  14783.  inheritance. Thus, you'll probably use regular class
  14784.  references. When passing them around, be sure not to store
  14785.  those references improperly. Without the garbage collector,
  14786.  you're back in the world of manual memory management, which
  14787.  means you are responsible to get it right yourself!&lt;/div&gt;
  14788.  
  14789. &lt;p&gt;Want to learn more about the library function? Check out the &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/blob/master/std/conv.d#L3907&quot;&gt;&lt;tt&gt;emplace&lt;/tt&gt; source code&lt;/a&gt;.&lt;/p&gt;
  14790.  
  14791. &lt;hr /&gt;
  14792.  
  14793. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination many D tricks.&lt;/p&gt;
  14794.  
  14795. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14796.  
  14797.  
  14798.  
  14799. &lt;h2&gt;New people and projects&lt;/h2&gt;
  14800.  
  14801. &lt;p&gt;Would you like to introduce yourself or your project? Let me know! Post to &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;the D announcements forum&lt;/a&gt; or &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me privately&lt;/a&gt;.&lt;/p&gt;
  14802.  
  14803. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14804.  
  14805. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m8dfgb$qfv$1@digitalmars.com&quot;&gt;Walter Bright will be presenting at NWCPP on Jan 21 at Microsoft&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14806. &lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, UT&lt;/a&gt;
  14807. &lt;/li&gt;&lt;/ul&gt;
  14808.  
  14809. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  14810. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  14811. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14812. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14813. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  14814. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  14815. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14816. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  14817. &lt;/li&gt;&lt;/ul&gt;
  14818.  
  14819.  
  14820. &lt;/div&gt;
  14821. </description></item><item><title>Issue #1</title><author>destructionator+dweek@gmail.com (Adam D. Ruppe)</author><link>http://arsdnet.net/this-week-in-d/jan-18.html</link><guid>http://arsdnet.net/this-week-in-d/jan-18.html</guid><pubDate>Sun, 18 Jan 2015 12:00:00 GMT</pubDate><description>
  14822. &lt;div id=&quot;body-container&quot;&gt;
  14823. &lt;h1&gt;
  14824. &lt;img class=&quot;d-logo&quot; src=&quot;http://dlang.org/images/dlogo.png&quot; /&gt;
  14825. &lt;span id=&quot;title-text&quot;&gt;This Week in D
  14826. &lt;span id=&quot;title-date&quot;&gt;January 18, 2015&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt;
  14827.  
  14828.  
  14829. &lt;div id=&quot;preface&quot;&gt;
  14830.  
  14831. &lt;p&gt;Welcome to &lt;i&gt;This Week in D&lt;/i&gt;! Each week, we'll summarize what's been going on in the D community and write brief advice columns to help you get the most out of the D Programming Language.&lt;/p&gt;
  14832.  
  14833. &lt;p&gt;&lt;a href=&quot;http://dlang.org/&quot;&gt;The D Programming Language&lt;/a&gt; is a general purpose programming language that offers modern convenience, modeling power, and native efficiency with a familiar C-style syntax.&lt;/p&gt;
  14834.  
  14835. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; has an &lt;a href=&quot;http://arsdnet.net/this-week-in-d/twid.rss&quot;&gt;RSS feed&lt;/a&gt;.&lt;/p&gt;
  14836.  
  14837. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is edited by &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;Adam D. Ruppe&lt;/a&gt;. Contact me with any questions, comments, or contributions.&lt;/p&gt;
  14838.  
  14839. &lt;p&gt;It hasn't been a full week since the last edition because it was late. From here on, we'll be shooting for a weekend write-up each week.&lt;/p&gt;
  14840.  
  14841. &lt;p&gt;&lt;i&gt;This Week in D&lt;/i&gt; is in the process of being hosted at dlang.org. Starting soon, you'll be able to find this publication there.&lt;/p&gt;
  14842. &lt;/div&gt;
  14843.  
  14844. &lt;h2&gt;Events happening in the coming week&lt;/h2&gt;
  14845.  
  14846. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m8dfgb$qfv$1@digitalmars.com&quot;&gt;Walter Bright will be presenting at NWCPP on Jan 21 at Microsoft&lt;/a&gt;!&lt;/p&gt;
  14847.  
  14848. &lt;p&gt;&lt;a href=&quot;http://www.meetup.com/D-Lang-Sillicon-Valley/events/219413448/&quot;&gt;D: What's Cooking in 2015 by Andrei Alexandrescu on Thursday, January 22&lt;/a&gt;&lt;/p&gt;
  14849.  
  14850. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/fmrbdctphazhgikjhoyc@forum.dlang.org&quot;&gt;Berlin Meetup: Friday the 23rd of January from 17:00 to 19:30 at the Melbourne Cantee&lt;/a&gt;&lt;/p&gt;
  14851.  
  14852.  
  14853. &lt;h2&gt;Statistics&lt;/h2&gt;
  14854.  
  14855. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=RESOLVED&amp;amp;chfield=bug_status&amp;amp;chfieldfrom=2015-01-12&amp;amp;chfieldto=2015-01-18&amp;amp;chfieldvalue=RESOLVED&amp;amp;list_id=179422&amp;amp;query_format=advanced&amp;amp;resolution=FIXED&quot;&gt;20 bugs fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14856. &lt;a href=&quot;https://issues.dlang.org/buglist.cgi?bug_status=NEW&amp;amp;chfield=%5BBug%20creation%5D&amp;amp;chfieldfrom=2015-01-12&amp;amp;chfieldto=2015-01-18&amp;amp;list_id=179423&amp;amp;query_format=advanced&amp;amp;resolution=---&quot;&gt;31 bugs and enhancement requests opened&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14857. 43 pull requests merged into the language:
  14858.  
  14859. &lt;a href=&quot;https://github.com/D-Programming-Language/dmd/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18&quot;&gt;26 into DMD&lt;/a&gt;,
  14860. &lt;a href=&quot;https://github.com/D-Programming-Language/phobos/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18&quot;&gt;7 into Phobos&lt;/a&gt;, and
  14861. &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18&quot;&gt;10 into druntime &lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  14862. &lt;a href=&quot;https://github.com/D-Programming-Language/dlang.org/pulls?q=is%3Apr+is%3Amerged+merged%3A2015-01-12..2015-01-18&quot;&gt;21 pull requests merged into the website.&lt;/a&gt;
  14863. &lt;/li&gt;&lt;/ul&gt;
  14864.  
  14865. &lt;h2&gt;Major Changes&lt;/h2&gt;
  14866.  
  14867. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;https://github.com/D-Programming-Language/druntime/pull/864&quot;&gt;The GC will now call destructors on heap allocated structs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14868. &lt;a href=&quot;http://forum.dlang.org/thread/m9c0i5$rva$1@digitalmars.com&quot;&gt;DIP25 (sealed references) has been preliminarily approved for 2.067&lt;/a&gt;&lt;/li&gt;&lt;li&gt; The website is currently undergoing an overhaul, cleaning up CSS to enable a new style, add responsiveness for mobile devices, and more.
  14869. &lt;/li&gt;&lt;/ul&gt;
  14870.  
  14871.  
  14872.  
  14873. &lt;h2&gt;In the community&lt;/h2&gt;
  14874.  
  14875. &lt;h3&gt;DConf 2015&lt;/h3&gt;
  14876.  
  14877. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m93sj6$19l1$1@digitalmars.com&quot;&gt;Chuck Allison to deliver keynote&lt;/a&gt;&lt;/p&gt;
  14878. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m8hqr3$2tmh$1@digitalmars.com&quot;&gt;Call for Submissions is still open!&lt;/a&gt;&lt;/p&gt;
  14879. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m96mts$19mf$1@digitalmars.com&quot;&gt;DConf 2015 discounted hotel rooms now available&lt;/a&gt;&lt;/p&gt;
  14880. &lt;p&gt;&lt;a href=&quot;http://forum.dlang.org/thread/m9h25q$2gdf$1@digitalmars.com&quot;&gt;Thanks to p0nce for a nicer DConf logo!&lt;/a&gt;&lt;/p&gt;
  14881.  
  14882. &lt;p&gt;Hope to see you there!&lt;/p&gt;
  14883.  
  14884. &lt;h3&gt;Community announcements&lt;/h3&gt;
  14885.  
  14886. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zpfomhmfezpnomvxnrex@forum.dlang.org&quot;&gt;Atmosphere GM - Statistical package&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/rvoqllpimfskvlabprot@forum.dlang.org&quot;&gt;Binutils 2.25 Released - New D demangling support&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/clhfgdcsjcsgpcwcajdt@forum.dlang.org&quot;&gt;Anyone interested in embedding a JVM in their D app?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/aakkjhuzubfwuyrdnruf@forum.dlang.org&quot;&gt;My LLVM talk @ FOSDEM'15&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/gtbgitgjnelylyfijcvc@forum.dlang.org&quot;&gt;trimcheck, dhcptest, RABCDAsm&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/ggykowbqwpiuxulpjacf@forum.dlang.org&quot;&gt;typescript plugin for vibe.d diet templates&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/qdydtnaylqrcrhnusgko@forum.dlang.org&quot;&gt;Heady House Hunting with D&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/efaasmuhbigqxnotzoqi@forum.dlang.org&quot;&gt;Deadcode: A code editor in D&lt;/a&gt;
  14887.  
  14888. &lt;/li&gt;&lt;/ul&gt;
  14889.  
  14890. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/group/digitalmars.D.announce&quot;&gt;digitalmars.D.announce&lt;/a&gt;.&lt;/p&gt;
  14891.  
  14892. &lt;h3&gt;Significant Forum Discussions&lt;/h3&gt;
  14893.  
  14894. &lt;p&gt;Since the last issue of &lt;i&gt;This Week in D&lt;/i&gt;, the forum has been dominated by discussions on website and associated process improvements.&lt;/p&gt;
  14895.  
  14896. &lt;p&gt;However, that wasn't everything - there were also discussions on new DIPs (D Improvement Proposals), targeting game consoles, and other items.&lt;/p&gt;
  14897.  
  14898. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/bqtcdpsopxmnfbjyrrzf@forum.dlang.org&quot;&gt;D Beginner Trying Manual Memory Management&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/zexuqeqdmawbqajrhbri@forum.dlang.org&quot;&gt;Can D get on XBone and PS4?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;
  14899. &lt;a href=&quot;http://forum.dlang.org/thread/m9497d$1pv2$1@digitalmars.com&quot;&gt;Common makefile (gasp) stuff&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9a3il$21k0$1@digitalmars.com&quot;&gt;10 Tips for Better Pull Requests&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9btie$pcl$1@digitalmars.com&quot;&gt;[WORK] Backtick dat code?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/pknqugxoxcvxkmdyvgzu@forum.dlang.org&quot;&gt;post qualifier and template constraint limitation, is there a reason ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9ahpj$2i3v$1@digitalmars.com&quot;&gt;dlang.org should do it in style&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9e6br$2sa5$1@digitalmars.com&quot;&gt;Eliminate comparison.html?&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9bien$dvv$1@digitalmars.com&quot;&gt;css minification&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/xjhvpmjrlwhhgeqyoipv@forum.dlang.org&quot;&gt;DIP71: 'noscope' and 'out!param' attributes&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/m9f558$lbb$1@digitalmars.com&quot;&gt;Please help me with improving dlang.org&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://forum.dlang.org/thread/fteqqezulxncraehycfv@forum.dlang.org&quot;&gt;Writing a small linux binary&lt;/a&gt;
  14900. &lt;/li&gt;&lt;/ul&gt;
  14901.  
  14902. &lt;p&gt;See more at &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forum.dlang.org&lt;/a&gt; and keep up with community blogs at &lt;a href=&quot;http://planet.dsource.org/&quot;&gt;Planet D&lt;/a&gt;.&lt;/p&gt;
  14903.  
  14904. &lt;h3&gt;From the past&lt;/h3&gt;
  14905. &lt;p&gt;In March 2014, Cybershadow wrote a post about &lt;a href=&quot;http://blog.thecybershadow.net/2014/03/21/functional-image-processing-in-d/&quot;&gt;Functional Image Processing in D&lt;/a&gt;. This post demonstrates how to use D's templates and other features to make efficient and elegant code for working with images of various color layouts.&lt;/p&gt;
  14906.  
  14907. &lt;h2&gt;FAQs&lt;/h2&gt;
  14908.  
  14909. &lt;p&gt;I wrote about &lt;a href=&quot;http://stackoverflow.com/a/27947350/1457000&quot;&gt;HTML parsing on Stack Overflow&lt;/a&gt; again this week, demonstrating how to use my dom.d library to do web scraping.&lt;/p&gt;
  14910.  
  14911. &lt;p&gt;The &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D Idioms List&lt;/a&gt; got new entries:&lt;/p&gt;
  14912. &lt;ul&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#Porting-from-C-gotchas&quot;&gt;Porting from C gotchas&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#Phobos-gems&quot;&gt;Phobos gems&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#Linking-with-C-gotchas&quot;&gt;Linking with C gotchas&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#if-embedded-declaration&quot;&gt;if embedded declarations&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#Falsey-values&quot;&gt;falsey values&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#Enumerate-fields-with-__traits%28allMembers%29&quot;&gt;Enumerate fields with __traits&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://p0nce.github.io/d-idioms/#assert%28false%29-is-special&quot;&gt;assert(false) is special&lt;/a&gt;
  14913. &lt;/li&gt;&lt;/ul&gt;
  14914.  
  14915. &lt;h2&gt;Tip of the week&lt;/h2&gt;
  14916.  
  14917. &lt;p&gt;This week, we'll look at &lt;b&gt;UFCS, &lt;a href=&quot;http://dlang.org/function.html#pseudo-member&quot;&gt;Uniform Function Call Syntax&lt;/a&gt;&lt;/b&gt; to write extension methods to types and &lt;a href=&quot;http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197&quot;&gt;help improve encapsulation&lt;/a&gt;.&lt;/p&gt;
  14918.  
  14919. &lt;p&gt;D, when encountering &lt;tt&gt;obj.func(args...)&lt;/tt&gt;, will first attempt a member lookup. Member lookup includes direct methods, inherited methods, &lt;tt&gt;alias this&lt;/tt&gt; members, and &lt;tt&gt;opDispatch&lt;/tt&gt;, and &lt;tt&gt;opDot&lt;/tt&gt; rewriting. If none of those succeed, the compiler will attempt to rewrite the expression into &lt;tt&gt;func(obj, args...)&lt;/tt&gt; and compile that.&lt;/p&gt;
  14920.  
  14921. &lt;div class=&quot;pitfall&quot;&gt; UFCS does &lt;i&gt;not&lt;/i&gt; look at nested functions:
  14922. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo() {
  14923. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; bar(Object obj) { }
  14924. obj.bar(); &lt;font color=&quot;green&quot;&gt;// won't work because bar is a local symbol
  14925. &lt;/font&gt; }
  14926. &lt;/pre&gt;
  14927.  
  14928. To use a function with UFCS, it must be defined at module scope:
  14929. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; bar(Object obj) {}
  14930. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; foo() {
  14931. obj.bar(); &lt;font color=&quot;green&quot;&gt;// will work
  14932. &lt;/font&gt; }
  14933. &lt;/pre&gt;
  14934. &lt;/div&gt;
  14935.  
  14936. &lt;p&gt;If the rewrite succeeds unambiguously, the code will compile. Any type may be extended in this fashion:&lt;/p&gt;
  14937.  
  14938. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;float&lt;/font&gt; divideBy(&lt;font color=&quot;blue&quot;&gt;float&lt;/font&gt; divisor, &lt;font color=&quot;blue&quot;&gt;float&lt;/font&gt; dividend) {
  14939. &lt;font color=&quot;blue&quot;&gt;return&lt;/font&gt; divisor / dividend;
  14940. }
  14941.  
  14942. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14943. &lt;font color=&quot;blue&quot;&gt;float&lt;/font&gt; a = 5.divideBy(2); &lt;font color=&quot;green&quot;&gt;// works on built-in types too!
  14944. &lt;/font&gt; &lt;font color=&quot;green&quot;&gt;// rewrites into a = divideBy(5, 2);
  14945. &lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;assert&lt;/font&gt;(a == 2.5);
  14946. }
  14947. &lt;/pre&gt;
  14948.  
  14949. &lt;p&gt;UFCS is used in D for three main reasons:&lt;/p&gt;
  14950. &lt;ul&gt;&lt;li&gt; Extending types you don't have direct access to, such as the &lt;tt&gt;divideBy&lt;/tt&gt; example above.
  14951. &lt;/li&gt;&lt;li&gt; Writing &lt;a href=&quot;http://www.drdobbs.com/architecture-and-design/component-programming-in-d/240008321&quot;&gt;pipeline style range code&lt;/a&gt;:
  14952. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; std.algorithm;
  14953. &lt;font color=&quot;blue&quot;&gt;void&lt;/font&gt; main() {
  14954. [1,2,3]
  14955. .filter!(isOdd)
  14956. .map!((a) =&amp;gt; a**2)
  14957. .writeln;
  14958. }
  14959. &lt;/pre&gt;
  14960.  
  14961. None of the functions there are members of the object, but thanks to UFCS, that will compile.
  14962. &lt;/li&gt;&lt;li&gt; Improving encapsulation by writing extension methods in different modules, similarly to &lt;a href=&quot;http://www.drdobbs.com/cpp/how-non-member-functions-improve-encapsu/184401197&quot;&gt;Scott Meyer's advice in C++&lt;/a&gt;. If you write methods that work on minimal interfaces, it will keep your access to the object's internals minimized, ensuring you do not depend on those details. Moreover, your extension methods will be &lt;tt&gt;final&lt;/tt&gt; - since they aren't members of the class, they are guaranteed to never be &lt;tt&gt;virtual&lt;/tt&gt;, potentially saving indirections.&lt;/li&gt;&lt;/ul&gt;
  14963.  
  14964. &lt;div class=&quot;tip&quot;&gt; &lt;tt&gt;private&lt;/tt&gt; in D means something slightly different than &lt;tt&gt;private&lt;/tt&gt; in C++: in D, protection
  14965. works at module (source file) boundaries. All functions inside a single module can see
  14966. all other symbols in that module, regardless of protection level, even if they are &lt;tt&gt;private&lt;/tt&gt;
  14967. members from different classes.
  14968.  
  14969. If you want a member to only be visible to a particular class in D, put that class in its
  14970. own file / module.
  14971.  
  14972. &lt;div class=&quot;tip&quot;&gt; D also supports the &lt;tt&gt;package&lt;/tt&gt; protection level, which allows sharing of
  14973. symbols in the same package - sharing the same name up until the last dot -
  14974. but not outside.
  14975.  
  14976. &lt;pre class=&quot;d_code&quot;&gt; &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; foo.bar;
  14977. &lt;font color=&quot;blue&quot;&gt;package&lt;/font&gt; &lt;font color=&quot;blue&quot;&gt;int&lt;/font&gt; a;
  14978.  
  14979. &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; foo.baz;
  14980. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; foo.bar;
  14981. &lt;font color=&quot;green&quot;&gt;// int a IS accessible
  14982. &lt;/font&gt;
  14983. &lt;font color=&quot;blue&quot;&gt;module&lt;/font&gt; something.&lt;font color=&quot;blue&quot;&gt;else&lt;/font&gt;;
  14984. &lt;font color=&quot;blue&quot;&gt;import&lt;/font&gt; foo.bar;
  14985. &lt;font color=&quot;green&quot;&gt;// int a is not accessible
  14986. &lt;/font&gt;&lt;/pre&gt;
  14987. &lt;/div&gt;
  14988. &lt;/div&gt;
  14989.  
  14990. &lt;hr /&gt;
  14991.  
  14992. &lt;p&gt;Find more D tips at the &lt;a href=&quot;http://p0nce.github.io/d-idioms/&quot;&gt;D idioms list&lt;/a&gt; or buy my &lt;a href=&quot;https://www.packtpub.com/application-development/d-cookbook&quot;&gt;D Cookbook&lt;/a&gt; for a more in-depth examination of many D tricks.&lt;/p&gt;
  14993.  
  14994. &lt;p&gt;If you'd like to submit a tip, &lt;a href=&quot;mailto:destructionator+dweek@gmail.com&quot;&gt;email me&lt;/a&gt;.&lt;/p&gt;
  14995.  
  14996.  
  14997. &lt;h2&gt;Upcoming events&lt;/h2&gt;
  14998.  
  14999. &lt;ul&gt; &lt;li&gt;&lt;a href=&quot;http://dconf.org/&quot;&gt;DConf 2015 will be starting on May 27 in Orem, Utah, United States&lt;/a&gt;&lt;/li&gt;
  15000. &lt;/ul&gt;
  15001.  
  15002. &lt;h2&gt;Learn more about D&lt;/h2&gt;
  15003. &lt;p&gt;To learn more about D and what's happening in D:&lt;/p&gt;
  15004. &lt;ul&gt;&lt;li&gt; Read &lt;a href=&quot;http://dlang.org&quot;&gt;http://dlang.org&lt;/a&gt; and the &lt;a href=&quot;http://wiki.dlang.org&quot;&gt;D wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  15005. Want in-depth material? Check out the &lt;a href=&quot;http://wiki.dlang.org/Books&quot;&gt;Books on D&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  15006. Join us on IRC: channel #d on irc.freenode.net.&lt;/li&gt;&lt;li&gt;
  15007. Check out the &lt;a href=&quot;http://forum.dlang.org/&quot;&gt;forums&lt;/a&gt; (TIP - check out the NNTP and mailing list links under &amp;quot;Also via&amp;quot; on the forum to subscribe to email updates or access the forum with a newsgroup client!)&lt;/li&gt;&lt;li&gt;
  15008. Follow &lt;a href=&quot;https://twitter.com/D_Programming&quot;&gt;D Programming &lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;search for &lt;a href=&quot;https://twitter.com/search?q=%23dlang&amp;amp;src=typd&quot;&gt;#dlang&lt;/a&gt; on Twitter&lt;/li&gt;&lt;li&gt;and/or follow &lt;a href=&quot;https://twitter.com/adamdruppe&quot;&gt;&lt;i&gt;This Week in D&lt;/i&gt;'s editor on Twitter&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;
  15009. Check out the &lt;a href=&quot;http://stackoverflow.com/questions/tagged/d&quot;&gt;D tag on Stack Overflow&lt;/a&gt;
  15010. &lt;/li&gt;&lt;/ul&gt;
  15011.  
  15012.  
  15013. &lt;/div&gt;
  15014. </description></item></channel></rss>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//arsdnet.net/this-week-in-d/twid.rss

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda