In addition to the C++14 standard, the Committee is working on a number of follow-up documents called Technical Specifications (TS), which carry less weight than the standard, but indicate an intention to standardize a new library or language feature in a future standard:
* Concepts Lite TS (my favourite) Concepts are a mechanism for constraining template parameters. Today we often write code like this: template <typename Container> void sort(Container& c); Our intention is that the type used as a template argument for 'Container' be a container type, but the compiler doesn't enforce this - it will accept any type there, and then give cryptic errors from deep within the template's implementation when it tries to use the argument as a container. Concepts allows us to define a concept called 'Container' which expresses what we mean by a 'container type', and then write the template like this instead: template <typename C> requires Container<C> void sort(C& c); Or as a short form: template <Container C> void sort(C& c); When calling this function, the compiler checks at the call site whether the template argument satisfies the Container concept, and give a much friendlier error if it doesn't. It's also possible to check the definition of a template to make sure it doesn't do anything with the template arguments that's not specified by the concepts to which they conform. A 'full' concepts feature would include both directions of checking (checking the call sites and the definitions). The committee tried standardizing full concepts for C++11, but ran into a lot of complexity. It is now resurrecting the feature in a 'lite' form that only includes checking of the call sites. The details of Concepts Lite can be found here [1]. * Array Extensions TS Support for arrays whose size isn't known at compile time. C calls these Variable-Lengths Arrays (VLAs). C++ stubbornly refuses to call them VLAs, and calls them Arrays of Runtime Bound (ARBs) instead (there are some minor differences between the two flavours, for example you can call sizeof() on a VLA (and it will be evaluated at runtime), but not on an ARB). The TS will also include a library that wraps ARBs into a nicer interface, much like how std::array wraps regular arrays into a nicer interface. These were originally going to be in C++14, but were moved into a TS because the library interface isn't fully fleshed out yet. * Library Fundamentals TS This will contain the new <optional> library (originally headed for C++14 but the committee felt it was safer to put it into a TS instead) and possibly some other utilities. * Networking TS There will actually be a series of Networking TS's. The first will specify URIs and IP addresses. The second will specify byte-order conversions. Future ones may deal with higher-level functionality like sockets. * Filesystem TS [2] There may also be a follow-up TS to this that provides additional features e.g. for enterprise filesystems. * Transactional Memory TS A synchronization primitive built into the language. The proposal can be found here [3]. * Parallelism Extensions TS Parallel versions of standard library algorithms. This is in a relatively early stage, but it will possibly be based on [4]. * Concurrency Extensions TS Language features that make it easier to write asynchronous/concurrent code. Also in an early stage, proposals being considered include [5] and [6]. I believe that most of these are planned for publication in 2014, though probably not the last two, nor the follow-ups to the Networking and Filesystem TS's. Botond [1] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3701.pdf [2] http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3693.html [3] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3718.pdf [4] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3724.pdf [5] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3731.pdf [6] http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3721.pdf _______________________________________________ dev-platform mailing list dev-platform@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-platform