{"id":1619,"date":"2019-08-12T23:10:29","date_gmt":"2019-08-13T06:10:29","guid":{"rendered":"http:\/\/www.elbeno.com\/blog\/?p=1619"},"modified":"2021-09-15T05:58:53","modified_gmt":"2021-09-15T12:58:53","slug":"remember-the-vasa-or-plus-ca-change-plus-cest-la-meme-chose","status":"publish","type":"post","link":"https:\/\/www.elbeno.com\/blog\/?p=1619","title":{"rendered":"Remember the Vasa! or, plus  \u00e7a change, plus c&#8217;est la m\u00eame chose"},"content":{"rendered":"\n<p>I&#8217;ve been programming in C++ for almost a quarter of a century now. I grew up, professionally, with C++, and in many ways, it grew up along with me.<\/p>\n\n\n\n<p>For someone who is used to C++, even used to recently-standardised C++, it&#8217;s hard not to feel apprehension when looking at C++20. Modules, coroutines, ranges, concepts &#8212; these are all massive features that I don&#8217;t have real experience with yet and that offer completely new ways of doing things. There are also several medium-sized features which could turn out to have large impacts; for example the spaceship operator, or the further expansion of <code>constexpr<\/code> capabilities.<\/p>\n\n\n\n<p>It&#8217;s very easy to react to all this by thinking, &#8220;It&#8217;s too much; it&#8217;s not baked yet; C++ is collapsing under its own weight.&#8221; And it&#8217;s natural not to trust something new, especially when I already know how to solve my current problems using current technology.<\/p>\n\n\n\n<p>What I try to remember is: <em>this isn&#8217;t a new situation, and this isn&#8217;t a new feeling<\/em>. It&#8217;s not new to me, and it&#8217;s not new to the world. Many people have felt this way about different technologies over the decades, and very seldom has actual catastrophe been the result.<\/p>\n\n\n\n<p>We felt this way about C, when we programmed games mostly in assembler. We felt this way about object-oriented C++ once we started trusting C. We felt this way about generic C++ and the STL after we&#8217;d gotten used to object-oriented C++. Some of us currently feel this way about C++11 and beyond.<\/p>\n\n\n\n<p>Often this feeling is based on seeing new tech not (currently) performing quite as well as old tech for certain use cases. This is also not a new concern. People even thought the same about assembly language, preferring actual machine code! In her HOPL keynote (1978), Grace Hopper said:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>In the early years of programming languages, the most frequent phrase we heard was that the only way to program a computer was in octal. [&#8230;] the entire establishment was firmly convinced that the only way to write an efficient program was in octal.<\/p><\/blockquote>\n\n\n\n<p>It&#8217;s not wrong to feel this way because feelings aren&#8217;t wrong. But it&#8217;s also worth remembering that we&#8217;re <em>always<\/em> on the edge of technology that is in the process of proving &#8212; and improving &#8212; itself. Some things don&#8217;t stick around, but many do, and they get better, usually surpassing older tech in all sorts of ways, performance included.<\/p>\n\n\n\n<p>We&#8217;re always learning how to do more. Betting against progress is seldom a good bet.<\/p>\n\n\n\n<p>Much has been made of Bjarne&#8217;s 2018 paper, &#8220;<a href=\"http:\/\/www.open-std.org\/jtc1\/sc22\/wg21\/docs\/papers\/2018\/p0977r0.pdf\">Remember the Vasa<\/a>&#8220;, and it might seem to validate these feelings of distrust for the new. But even that paper provides some historical context, recalling:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>During the early days of WG21 the story of the Vasa was popular as warning against overelaboration (from 1992):<\/p><p>Please also understand that there are dozens of reasonable extensions and changes being proposed. If every extension that is reasonably well-defined, clean and general, and would make life easier for a couple of hundred or couple of thousand C++ programmers were accepted, the language would more than double in size. We do not think this would be an advantage to the C++ community.<\/p><\/blockquote>\n\n\n\n<p>In fact, that&#8217;s exactly what <em>has<\/em> happened, maybe several times over since 1992, and yet the C++ community is thriving more than ever with conferences, podcasts, a healthy social networking scene, growing standards participation, and more.<\/p>\n\n\n\n<p>In <em><a href=\"https:\/\/smile.amazon.com\/Design-Evolution-C-Bjarne-Stroustrup\/dp\/0201543303\">The Design and Evolution of C++<\/a><\/em>, section 6.4, Bjarne mentions that &#8220;Remember the Vasa&#8221; became a popular cautionary tale at the Lund meeting (of June 1991). But he also says, in section 9.2.2.2,<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>[C++] was designed to provide a toolset for professionals, and complaining that there are too many features is like the &#8220;layman&#8221; looking into an upholsterer&#8217;s tool chest and complaining that there couldn&#8217;t possibly be a need for all those little hammers.<\/p><\/blockquote>\n\n\n\n<p>C++ is growing. Change can be daunting, but I think we&#8217;re going to be fine. And when one day a specific little hammer is just the right tool for the task at hand, I&#8217;ll be thankful that someone added that hammer to my toolbox.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;ve been programming in C++ for almost a quarter of a century now. I grew up, professionally, with C++, and in many ways, it grew up along with me. For someone who is used to C++, even used to recently-standardised C++, it&#8217;s hard not to feel apprehension when looking at&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-1619","post","type-post","status-publish","format-standard","hentry","category-cpp"],"_links":{"self":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1619","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1619"}],"version-history":[{"count":4,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1619\/revisions"}],"predecessor-version":[{"id":1679,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1619\/revisions\/1679"}],"wp:attachment":[{"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.elbeno.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}