<story><title>C++17 – better than you might think</title><url>http://www.levelofindirection.com/journal/2016/12/28/c17-why-its-better-than-you-might-think.html</url></story><parent_chain><item><author>koja86</author><text>You might find this project kind of interesting:&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;isocpp&amp;#x2F;CppCoreGuidelines&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;CppCoreGuidelines.md&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;isocpp&amp;#x2F;CppCoreGuidelines&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;CppC...&lt;/a&gt;&lt;p&gt;As a day-to-day C++ practitioner I like it.&lt;p&gt;...Yet I am not fully convinced that the general idea of language evolution implemented as ruleset outside of the language itself is the way to go. Seems more like band-aid to me and made me start to think about concept of programming language&amp;#x27;s life cycle in context of Darwinian evolution - once either legacy compatibility burden is too big or that particular biotope of specific problems the language solves better than others vanishes&amp;#x2F;changes the language dies out.&lt;p&gt;My particular issue with C++ is that it&amp;#x27;s complexity, longevity and evolution made possible for widespread bad-practices as not every C++ developer evolved as much as the language itself and it&amp;#x27;s general public understanding. (Some current best-practices were simply not always widely known or accepted.) I would even go as far to say that most of existing C++ code is crap (at least from standpoint of today &amp;quot;modern&amp;quot; C++).&lt;p&gt;And that&amp;#x27;s why I am both eagerly looking to &amp;quot;next generation&amp;quot; being shaped up by people who has (hopefully) learnt from past mistakes and used by people who care (itching to give Rust a ride once it stabilizes just a bit more) and also occasionally digging in the history for possible gems that I might not able to see without my current experience (platonic weekends-only relationship with Haskell, Lisp being right there at top of my TODO list).&lt;p&gt;EDIT: Removed the sir.</text></item><item><author>ktRolster</author><text>&lt;i&gt;What about static analysis to enforce a particular subset of features deemed idiomatic or otherwise best practice?&lt;/i&gt;&lt;p&gt;I like that idea.</text></item><item><author>rl3</author><text>&amp;gt;&lt;i&gt;More features, more libraries, but is there a working group that looks back at C++98 and tries to reduce complexity by removing mistakes from the language?&lt;/i&gt;&lt;p&gt;Then you break backwards compatibility. What about static analysis to enforce a particular subset of features deemed idiomatic or otherwise best practice?&lt;p&gt;Granted, reducing complexity does make the job of future compiler authors far less miserable.</text></item><item><author>gurkendoktor</author><text>More features, more libraries, but is there a working group that looks back at C++98 and tries to reduce complexity by removing mistakes from the language?&lt;p&gt;My pet peeve is Argument-Dependent Lookup. It&amp;#x27;s a hack that breaks the encapsulation of namespaces, increases compile times and still makes it harder to write code - try swap()ing two values of type T in a template function. But like any of C++&amp;#x27;s warts, it will be with us forever.</text></item></parent_chain><comment><author>Koshkin</author><text>&amp;gt; &lt;i&gt;I am not fully convinced that the general idea of language evolution implemented as ruleset outside of the language itself is the way to go&lt;/i&gt;&lt;p&gt;I think you are right - as far as &amp;#x27;the&amp;#x27; language is concerned. The complexity (and the slowness) of a C++ compiler now is mostly due to the complexity - and the slowness - of the built-in interpreter of the template meta-language. There are other, saner languages, such as Common Lisp, where the meta-language is indistinguishable from the language itself, which, in addition to its greater simplicity, greatly contributes to the reasonable compile times. In the C&amp;#x2F;C++ land, it might have been possible to use a similar approach instead of introducing a separate macro&amp;#x2F;template syntax, a good example being the approach taken in the design of ASP (active server pages), PHP, and the like.</text></comment>
<story><title>C++17 – better than you might think</title><url>http://www.levelofindirection.com/journal/2016/12/28/c17-why-its-better-than-you-might-think.html</url></story><parent_chain><item><author>koja86</author><text>You might find this project kind of interesting:&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;isocpp&amp;#x2F;CppCoreGuidelines&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;CppCoreGuidelines.md&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;isocpp&amp;#x2F;CppCoreGuidelines&amp;#x2F;blob&amp;#x2F;master&amp;#x2F;CppC...&lt;/a&gt;&lt;p&gt;As a day-to-day C++ practitioner I like it.&lt;p&gt;...Yet I am not fully convinced that the general idea of language evolution implemented as ruleset outside of the language itself is the way to go. Seems more like band-aid to me and made me start to think about concept of programming language&amp;#x27;s life cycle in context of Darwinian evolution - once either legacy compatibility burden is too big or that particular biotope of specific problems the language solves better than others vanishes&amp;#x2F;changes the language dies out.&lt;p&gt;My particular issue with C++ is that it&amp;#x27;s complexity, longevity and evolution made possible for widespread bad-practices as not every C++ developer evolved as much as the language itself and it&amp;#x27;s general public understanding. (Some current best-practices were simply not always widely known or accepted.) I would even go as far to say that most of existing C++ code is crap (at least from standpoint of today &amp;quot;modern&amp;quot; C++).&lt;p&gt;And that&amp;#x27;s why I am both eagerly looking to &amp;quot;next generation&amp;quot; being shaped up by people who has (hopefully) learnt from past mistakes and used by people who care (itching to give Rust a ride once it stabilizes just a bit more) and also occasionally digging in the history for possible gems that I might not able to see without my current experience (platonic weekends-only relationship with Haskell, Lisp being right there at top of my TODO list).&lt;p&gt;EDIT: Removed the sir.</text></item><item><author>ktRolster</author><text>&lt;i&gt;What about static analysis to enforce a particular subset of features deemed idiomatic or otherwise best practice?&lt;/i&gt;&lt;p&gt;I like that idea.</text></item><item><author>rl3</author><text>&amp;gt;&lt;i&gt;More features, more libraries, but is there a working group that looks back at C++98 and tries to reduce complexity by removing mistakes from the language?&lt;/i&gt;&lt;p&gt;Then you break backwards compatibility. What about static analysis to enforce a particular subset of features deemed idiomatic or otherwise best practice?&lt;p&gt;Granted, reducing complexity does make the job of future compiler authors far less miserable.</text></item><item><author>gurkendoktor</author><text>More features, more libraries, but is there a working group that looks back at C++98 and tries to reduce complexity by removing mistakes from the language?&lt;p&gt;My pet peeve is Argument-Dependent Lookup. It&amp;#x27;s a hack that breaks the encapsulation of namespaces, increases compile times and still makes it harder to write code - try swap()ing two values of type T in a template function. But like any of C++&amp;#x27;s warts, it will be with us forever.</text></item></parent_chain><comment><author>SomeStupidPoint</author><text>Just to point out: biological evolution uses changes in the base features utilized (epigenetics) to speed adaptability to changing environments (or new environments).&lt;p&gt;There&amp;#x27;s every reason to think that evolving human systems should use similar masks on features of a technology to make it more suitable for a particular domain and serve as a signal to drive the base evolution.&lt;p&gt;The restricted C subset used for safety critical systems I think is a good example of this -- the restriction allows for usage in a domain where the full set of features is a disadvantage.</text></comment>