Deeply Embedded C++ - John Hinke - Meeting C++ 2015
A new video from Meeting C++ 2015:
Deeply Embedded C++
by John Hinke
February 10-15, Hagenberg, Austria
March 19-21, Madrid, Spain
April 1-4, Bristol, UK
June 16-21, Sofia, Bulgaria
By Meeting C++ | Jan 19, 2016 06:36 AM | Tags: intermediate experimental embedded basics advanced
A new video from Meeting C++ 2015:
Deeply Embedded C++
by John Hinke
By Meeting C++ | Jan 15, 2016 01:20 PM | Tags: libraries intermediate experimental boost advanced
A new video from Meeting C++ 2015:
C++ on GPUs done right?
by Peter Steinbach
The video:
By Adrien Hamelin | Dec 16, 2015 02:41 PM | Tags: intermediate experimental
Everything is in the title:
Fun with folds
by Nick Athanasiou
From the article:
A fold is a higher order function (a function that has one or more function parameters and/or returns a function) that is recursively applied over a data structure...
By Adrien Hamelin | Dec 7, 2015 01:31 AM | Tags: intermediate experimental
Coding well in C++ is becoming easier:
C++ Core Guidelines Checkers available for VS 2015 Update 1
by Andrew Pardoe and Neil MacIntosh
From the article:
Back in September at CppCon 2015 Neil announced that we would be shipping new code analysis tools for C++ that would enforce some of the rules in the C++ Core Guidelines. (A video of the talk is available here: https://www.youtube.com/watch?v=rKlHvAw1z50 and slides are available on the ISOCpp GitHub repo.)
By Adrien Hamelin | Dec 4, 2015 01:34 AM | Tags: experimental community
Here are the last news in the C++ standard world:
GoingNative 44: ISOC++ @Kona Debriefing
by Gabriel Ha
About the video:
Get another inside scoop on the up and coming in C++ as we debrief STL and Gaby on their most recent Standards meeting in sunny Kona, Hawaii!
By Adrien Hamelin | Dec 4, 2015 01:30 AM | Tags: experimental advanced
The basics of creating and using a module:
Getting Started with Modules in C++
by Kenny Kerr
From the article:
Visual Studio 2015 Update 1 shipped with experimental support for a module system for C++. You can learn about it from this talk given by Gabriel Dos Reis at CppCon. Creating and consuming modules is very simple, but getting started with the compiler is not that obvious. At least it wasn’t very obvious to me, so here’s a quick introduction to get you started.
By Adrien Hamelin | Dec 4, 2015 01:27 AM | Tags: experimental advanced
Modules in Visual:
C++ Modules in VS 2015 Update 1
by Gabriel Dos Reis and Andrew Pardoe
From the article:
The VC++ team is excited to preview a new feature in VS 2015 Update 1: The first experimental implementation of A Module System for C++, proposed for C++17. That proposal was approved by the C++ standards Evolution Working Group for a C++17 Technical Specification at the Fall 2015 meeting in Kona, Hawai’i. The draft wording for the Technical Specification is under review by the C++ Standards Core Working Group.
By Hartmut Kaiser | Nov 13, 2015 05:32 AM | Tags: performance parallelism experimental distributed computing c++14 c++11
The STE||AR Group has released V0.9.11 of HPX -- A general purpose parallel C++ runtime system for applications of any scale.
HPX V0.9.11 Released
The newest version of HPX (V0.9.11) is now available for download! Please see here for the release notes.
HPX exposes an API fully conforming to the concurrency related parts of the C++11 and C++14 standards, extended and applied to distributed computing.
From the announcement:
By Adrien Hamelin | Nov 11, 2015 03:24 AM | Tags: experimental community
Another trip report of the last meeting in Kona:
Trip Report: C++ Standards Meeting in Kona, October 2015
by Botond Ballo
From the article:
Last week I attended a meeting of the ISO C++ Standards Committee in Kona, Hawaii. This was the second committee meeting in 2015; you can find my reports on the past few meetings here (June 2014, Rapperswil), here (November 2014, Urbana-Champaign), and here (May 2015, Lenexa). These reports, particularly the Lenexa one, provide useful context for this post.
The focus of this meeting was primarily C++17. There are many ambitious features underway for standardization, and the time has come to start deciding what which of them will make C++17 and which of them won’t. The ones that won’t will target a future standard, or a Technical Specification (which can eventually also be merged into a future standard). In addition, there are a number of existing Technical Specifications in various stages of completion...
By Axel | Nov 6, 2015 04:32 PM | Tags: intermediate experimental efficiency
Variant is like a union, only it tells you what it currently contains, and it will barf if you try to get something out of it that is does not currently contain. It's the type safe sibling of the union:
variant<double, string> v = 42.; double d = get<double>(v);
I had proposed a variant many moons ago (N4218). After many discussions it seemed that the committee cannot agree on what the ideal C++ variant would look like. I will resolve this cliffhanger -- but before doing that let me introduce you to some of the key discussion points.
An ideal variant will always contain one of its alternative types. But look at this code snippet:
variant<string, MyClass> v = "ABC"; v = MyClass();
The second line will destroy the old value contained in the variant and construct the new value of a different type. Now suppose that the MyClass construction threw: what will the variant contain? What happens when you call get<1>(v)
? What happens when the variant gets destroyed?
We either provide the strong exception guarantee (the variant would still contain the string) -- but this requires double buffering, as for instance boost::variant
does. Or we could restrict the alternative types to only those that are nothrow_move_constructible
. Or we make this a new state -- "invalid, because the variant has been derailed due to an exception thrown during type changing assignment". Or we say "you shouldn't write code that behaves like this; if you do you're on your own", i.e. undefined behavior. The committee was discussing what to do, and so was The Internet. There are other design decisions -- default construction, visitation etc -- but they are all insignificant compared to how to deal with the throwing, type-changing assignment.
I have tried to present the options and their pros and cons in P0086. In short: it's incredibly difficult and fragile to predict whether a type is_nothrow_move_constructible
. And double buffering -- required for a strong exception guarantee -- kills the quest for an efficient variant. But efficiency is one of the main motivations for using a discriminated union.
After the second Library Evolution Working Group (LEWG) review in Lenexa, we got P0088R0: a design that was making this invalid state extremely rare. But if it happened, access to the value would result in undefined behavior. This caused a vivid reaction from the committee members. And from The Internet. Hundreds of emails on the committee email lists. Many many smart and convincing blog posts.
In the end, different parts of the committee strongly supported different designs -- and vetoing other designs. Massive disagreement. So when we came to our C++ Standards Meeting in Kona, it was immediately clear that we needed to expose this to the full committee (and not just LEWG). The expectation was that we would declare variant dead, and keep it locked away for the next five years. At least. (An I would have time to water my fishes again.)
So back to the cliffhanger. On the full committee, Monday evening stage in Kona were David Sankel and I. We presented (and represented) the different design options. While we were discussing with the committee members, live and uncut and on stage, David and I realized that we could make it happen. "The Kona Kompromise": similar to P0088R0, but instead of undefined behavior when extracting the value of such a zombie variant it would just throw!
The Kona Kompromise means that we don't pay any efficiency for the extremely rare case of a throwing move. The interface stays nice and clean. A variant of n alternatives is a "mostly" an n-state type. It offers the basic exception guarantee at no relevant performance loss. It is a safe vocabulary type for every-day use, also for novices. The vast majority of the committee was convinced by this idea. Almost everyone in the room was happy!
Do we have a std::variant
now? Not yet. But we are a giant leap closer: variant is now under wording review with the Library Working Group (LWG); I will publish a new revision in the Kona post-mailing (P0088R1). This will get re-reviewed in Jacksonville, first week of March. Once LWG gives the green light, the full committee can vote variant into a Technical Specification (TS) as std::experimental::variant
. Now that a large fraction of the committee has expressed its consent (happiness, even!), I expect that this will be in the TS called Library Fundamentals, v3. It might or might not make it into C++17 -- that depends mostly on how quickly I manage to bring P0088 into an acceptable state, and how quickly we will gain use experience with variant.
So there is one thing I'd really appreciate your help with: std::experimental::variant
will show up in library implementations near you, likely in their first releases next year. It would be fantastic if you could try it out, and as importantly: give feedback, on the public forums or by contacting me directly ([email protected]). Your feedback will tell us whether the design decisions we took are the right ones, for instance regarding default construction, visitation, performance, and especially converting construction and assignment. As they say here: Mahalo!
Axel Naumann, CERN ([email protected])