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

Reply via email to