July 2016

Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Core Language--Jason Merrill

C++ continues to evolve:

Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Core Language

by Jason Merrill

From the article:

It was quite a trek to get to Oulu, Finland for the June 2016 C++ Standards Committee meeting, but we were warmly received and the meeting went well once we arrived. We had very pleasant weather most of the week, and it was fun to experience the midnight sun, even though it played havoc with my sleep schedule.

Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Parallelism and Concurrency--Torvald Rie

C++ continues to evolve:

Red Hat at the ISO C++ Standards Meeting (June 2016, Oulu): Parallelism and Concurrency

by Torvald Riegel

From the article:

Several Red Hat engineers recently attended the JTC1/SC22/WG21 C++ Standards Committee meetings in Oulu, Finland.  This post focuses on the sessions of SG1 (the standards committee sub-group 1 – for concurrency and parallelism) as well as on coroutines-related sessions. Jason already gave an overview of the meeting in his post.

Quick Q: How to express constness of a forwarding reference?

Quick A: To express constness, a const reference is what is needed.

Recently on SO:

How to express constness of a forwarding reference?

How can I express that f does not modify its parameter?

If the function doesn't modify its parameter then there is no benefit to using a forwarding reference. You use a forwarding reference when you want to forward the parameter on to some other function which cares whether the argument is an lvalue or an rvalue (because maybe there are separate overloads for lvalues and rvalues, and the rvalue one can be more efficient).

If your function doesn't modify the argument then it shouldn't need to care whether it has an lvalue or rvalue, so it can just take const T& unconditionally. That can bind to both lvalues and rvalues, and promises not to modify the parameter.

template<typename T>
void f(const T& t) { ... }

CppCon 2015 Large Scale C++ with Modules: What You Should Know--Gabriel Dos Reis

Have you registered for CppCon 2016 in September? Don’t delay – Registration is open now.

While we wait for this year’s event, we’re featuring videos of some of the 100+ talks from CppCon 2015 for you to enjoy. Here is today’s feature:

Large Scale C++ with Modules: What You Should Know

by Gabriel Dos Reis

(watch on YouTube) (watch on Channel 9)

Summary of the talk:

“Modules” are a frequently requested and long-awaited feature by C++ programmers. In a nutshell, the idea is to have a direct language support for (a) expressing the boundaries and dependencies of a program component; (b) isolating source codes from macro vagaries; (c) scaling compile time, especially for large projects, given the ubiquity of “headers-only” template libraries; (d) spur innovation and deployment of semantics-aware developer tools.

This presentation will focus on three major points: (1) the design of the module proposal currently being considered by the C++ standards committee (design goals, properties, constraints); (2) implementations currently under way; and (3) early user experience and migration.

Modules directly address a problem (scalability) listed as one of the three major areas where C++17 is expected to significantly improve daily experience of the working C++ programmer. Naturally, this feature is also on the top ten list of C++17 functionalities Bjarne Stroustrup put forward in his “Thought on C++17.”

HPX version 0.9.99 released -- STE||AR Group

The STE||AR Group has released V0.9.99 of HPX -- A general purpose parallel C++ runtime system for applications of any scale.

HPX V0.9.99 Released

The newest version of HPX (V0.9.99) 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/C++14/C++17 standards, extended and applied to distributed and heterogeneous computing, and aligned with the ongoing standardization discussions.

From the announcement:

  • Version 1.0 approaches! This release is significant as HPX is nearly feature complete. Over the next several months we will continue to test and polish HPX’s API and documentation. The feedback and experience gained from the community’s utilization of this release will provide guidance on where to add the finishing touches for V1.0.
  • We have put a lot of effort into improving the overall performance and stability of the library. Applications written using HPX have shown to outperform equivalent applications which are based on more conventional parallelization methods.
  • In this release we finished the implementation of transparent migration of components to another locality (e.g. physical compute-node). It is now possible to trigger a migration operation without ‘stopping the world’ for the object to migrate. HPX will make sure that no work is being executed on the object while it is moved and that all subsequently scheduled work for the migrated object will be transparently forwarded to the new locality. The global address of the migrated object does not change, thus the application will not have to be changed in any way to support this new functionality.

 

2016-07 Post-Oulu mailing available

The 2016-07 mailing of new standards papers is now available.

NOTE: A number of these papers have already been publicized on this blog. This is the complete list including ones not previously publicized.

 

2016-07 post-Oulu
WG21 Number Title Author Document Date Mailing Date Previous Version Subgroup Disposition
N4595 WG21 2016-06-10 Telecon Minutes Jonathan Wakely 2016-06-15 2016-07      
N4596 PL22.16 Jacksonville Minutes (revised) Jonathan Wakely 2016-04-01 2016-07      
N4597 WG21 2016-06 Oulu Minutes Jonathan Wakely 2016-07-11 2016-07      
N4598 PL22.16 2016-06 Oulu Minutes Jonathan Wakely 2016-07-10 2016-07      
N4599 2016-08 LWG Meeting Robert Douglas 2016-07-02 2016-07      
N4600 Working Draft, C++ Extensions for Library Fundamentals, Version 2 Geoffrey Romer 2016-07-01 2016-07      
N4601 Editor's Report for the Library Fundamentals TS Geoffrey Romer 2016-07-01 2016-07      
N4602 WG21 telecon minutes - pre-Oulu (revised) Jonathan Wakely 2016-07-10 2016-07      
N4603 Editor's Report -- Committee Draft, Standard for Programming Language C++ Richard Smith 2016-07-12 2016-07      
N4604 C++17 CD Ballot Document Richard Smith 2016-07-12 2016-07      
N4605       missing      
N4606 Working Draft, Standard for Programming Language C++ Richard Smith 2016-07-12 2016-07      
P0003R3 Removing Deprecated Exception Specifications from C++17 Alisdair Meredith 2016-06-23 2016-07 P0003R2 Core  
P0003R4 Removing Deprecated Exception Specifications from C++17 Alisdair Meredith 2016-06-25 2016-07 P0003R3 Core  
P0028R4 Using attribute namespaces without repetition J. Daniel Garcia, Daveed Vandevoorde 2016-06-22 2016-07 P0028R3 Core Adopted 2016-06
P0032R3 Homogeneous interface for variant, any and optional (Revision 3) Vicente J. Botet Escriba 2016-05-24 2016-07 P0032R2 Library Evolution Adopted 2016-06
P0035R4 Dynamic memory allocation for over-aligned data Clark Nelson 2016-06-21 2016-07 P0035R3 Core, Library Evolution Adopted 2016-06
P0040R3 Extending memory management tools Brent Friedman 2016-06-24 2016-07 P0040R2 Library Evolution, SG14 Adopted 2016-06
P0053R1 C++ Synchronized Buffered Ostream Lawrence Crowl, Peter Sommerlad, Nicolia Josuttis 2015-10-24 2016-07 P0053R0 Library evolution, Concurrency, Library  
P0053R2 C++ Synchronized Buffered Ostream Lawrence Crowl, Peter Sommerlad, Nicolia Josuttis 2016-07-05 2016-07 P0053R1 Library evolution, Concurrency, Library  
P0057R5 Wording for Coroutines Gor Nishanov 2016-07-10 2016-07 P0057R4 Core, Library  
P0063R3 C++17 should refer to C11 instead of C99 Clark Nelson, Hans Boehm 2016-06-23 2016-07 P0063R2 Library Evolution Adopted 2016-06
P0067R3 Elementary string conversions, revision 2 Jens Maurer 2016-06-23 2016-07 P0067R2 Library Adopted 2016-06
P0067R4 Elementary string conversions, revision 4 Jens Maurer 2016-07-11 2016-07 P0067R3 Library  
P0076R3 Vector and Wavefront Policies Arch Robison, Pablo Halpern, Robert Geva, Clark Nelson, Jens Maurer 2016-07-07 2016-07 P0076R2 Library Evolution  
P0083R3 Splicing Maps and Sets (Revision 5) Alan Talbot, Jonathan Wakely, Howard Hinnant, James Dennett 2016-06-24 2016-07 P0083R2 Library Evolution Adopted 2016-06
P0084R2 Emplace Return Type (Revision 1) Alan Talbot 2016-06-23 2016-07 P0084R1 Library Evolution, Library Adopted 2016-06
P0088R3 Variant: a type-safe union for C++17 (v8) Axel Naumann 2016-06-23 2016-07 P0088R2 Library Adopted 2016-06
P0091R3 Template argument deduction for class templates (Rev. 6) Mike Spertus, Faisal Vali, Richard Smith 2016-06-24 2016-07 P0091R2 Core Adopted 2016-06
P0122R3 span: bounds-safe views for sequences of objects Neil MacIntosh 2016-07-10 2016-07 P0122R2 Library Evolution  
P0124R2 Linux-Kernel Memory Model Paul E. McKenney, Ulrich Weigand, Andrea Parri, Boqun Feng 2016-06-26 2016-07 P0124R1 Concurrency  
P0127R2 Declaring non-type template arguments with auto James Touton, Mike Spertus 2016-06-23 2016-07 P0127R1 Evolution Adopted 2016-06
P0135R1 Wording for guaranteed copy elision through simplified value categories Richard Smith 2016-06-20 2016-07 P0135R0   Adopted 2016-06
P0137R1 Core Issue 1776: Replacement of class objects containing reference members Richard Smith 2016-06-23 2016-07 P0137R0 Core Adopted 2016-06
P0145R3 Refining Expression Evaluation Order for Idiomatic C++ Gabriel Dos Reis, Herb Sutter, Jonathan Caves 2016-06-23 2016-07 P0145R2 Core Adopted 2016-06
P0174R2 Deprecating Vestigial Library Parts in C++17 Alisdair Meredith 2016-06-23 2016-07 P0174R1 Library Evolution Adopted 2016-06
P0175R1 Synopses for the C library Thomas Koeppe, Richard Smith 2016-06-24 2016-07 P0175R0 Library Adopted 2016-06
P0180R2 Reserve a New Library Namespace Future Standardization Alisdair Meredith 2016-06-23 2016-07 P0180R1 Library Evolution Adopted 2016-06
P0181R1 Ordered By Default Alisdair Meredith 2016-06-23 2016-07 P0181R0 Library Evolution Adopted 2016-06
P0192R1 Adding a Fundamental Type for Short Float Boris Fomitchev, Sergei Nikolaev, Olivier Giroux, Lawrence Crowl 2016-02-14 2016-07 P0192R0 Evolution  
P0209R2 make_from_tuple: apply for construction Pablo Halpern 2016-06-23 2016-07 P0209R1 Library Adopted 2016-06
P0217R3 Proposed wording for structured bindings Jens Maurer 2016-06-24 2016-07 P0217R2 Evolution, Library Evolution Adopted 2016-06
P0219R1 Relative Paths for Filesystem Beman Dawes 2016-06-24 2016-07 P0219R0 Library, File System Adopted 2016-06
P0221R2 Proposed wording for default comparisons, revision 4 Jens Maurer 2016-06-23 2016-07 P0221R1 Evolution, Core  
P0237R2 Wording for fundamental bit manipulation utilities Vincent Reverdy, Robert J. Brunner, Nathan Myers 2016-07-11 2016-07 P0237R1 Library Evolution, SG14, Numerics  
P0250R2 Wording improvements for initialization and thread ids (CWG 2046, 1784) Hans Boehm 2016-07-10 2016-07 P0250R1 Concurrency, Core  
P0254R2 Integrating std::string_view and std::string Marshall Clow 2016-06-24 2016-07 P0254R1 Library Evolution Adopted 2016-06
P0258R2 has_unique_object_representations - wording Michael Spencer 2016-06-24 2016-07 P0258R1 Library Adopted 2016-06
P0266R1 Removing Restrictions on requires-Expressions Walter E. Brown 2016-07-10 2016-07 P0266R0 Core  
P0267R2 A Proposal to Add 2D Graphics Rendering and Display to C++, Michael McLaughlin, Herb Sutter, Jason Zink 2016-06-22 2016-07 P0267R1 Library Evolution  
P0270R1 Removing C dependencies from signal handler wording Hans Boehm 2016-07-10 2016-07 P0270R0 Library  
P0283R2 Standard and non-standard attributes J. Daniel Garcia 2016-06-22 2016-07 P0283R1 Core Adopted 2016-06
P0292R2 constexpr if: A slightly different syntax Jens Maurer 2016-06-20 2016-07 P0292R1 Core Adopted 2016-06
P0296R2 Forward progress guarantees: Base definitions Torvald Riegel 2016-06-21 2016-07 P0296R1 Core Adopted 2016-06
P0298R1 A byte type definition Neil MacIntosh 2016-07-10 2016-07 P0298R0 Library Evolution  
P0299R1 Forward progress guarantees for the Parallelism TS features Torvald Riegel 2016-06-24 2016-07 P0299R0 Library Adopted 2016-06
P0302R1 Removing Allocator Support in std::function (rev 1) Jonathan Wakely 2016-06-23 2016-07 P0302R0 Library Adopted 2016-06
P0304R1 C++ Standard Library Issues Resolved Directly In Oulu Marshall Clow 2016-06-24 2016-07 P0304R0 Library Adopted 2016-06
P0305R1 Selection statements with initializer Thomas Koeppe 2016-06-24 2016-07 P0305R0 Evolution, Core Adopted 2016-06
P0307R2 Making Optional Greater Equal Again Tony Van Eerd 2016-03-15 2016-07 P0307R1 Library Evolution, Library Adopted 2016-06
P0314R0 Querying the alignment of an object Robert Haberlach 2016-03-28 2016-07   Evolution  
P0325R1 Propose to adopt make_array into the IS Zhihao Yuan 2016-06-29 2016-07 P0325R0 Library  
P0336R1 Better Names for Parallel Execution Policies in C++17 Pablo Halpern 2016-06-23 2016-07 P0336R0 Concurrency, Library Evolution Adopted 2016-06
P0346R1 A <random> Nomenclature Tweak Walter E. Brown 2016-06-21 2016-07 P0346R0 Library Adopted 2016-06
P0358R1 Fixes for not_fn Tomasz Kamiński 2016-06-22 2016-07 P0358R0 Library Evolution Adopted 2016-06
P0370R1 Ranges TS Design Updates Omnibus Casey Carter, Eric Niebler 2016-07-05 2016-07 P0370R0 Library Evolution  
P0371R1 Temporarily discourage memory_order_consume Hans Boehm 2016-06-23 2016-07 P0371R0 Library, Core Adopted 2016-06
P0380R1 A Contract Design G. Dos Reis, J. D. Garcia, J. Lakos, A. Meredith, N. Myers, B. Stroustrup 2016-07-11 2016-07 P0380R0 Evolution  
P0386R2 Inline Variables Hal Finkel, Richard Smith 2016-06-24 2016-07 P0386R1   Adopted 2016-06
P0387R0 Memory Model Issues for Concurrent Data Structures Hans Boehm 2016-07-11 2016-07   Concurrency  
P0388R0 Permit conversions to arrays of unknown bound Robert Haberlach 2016-06-28 2016-07   Evolution  
P0389R0 template keyword in unqualified-ids Robert Haberlach 2016-06-28 2016-07   Evolution  
P0390R0 A Proposal to Add Pointer Cast Functions with Move Semantics to the Standard Library Nickolas Pokhylets 2016-06-04 2016-07   Library Evolution, Library  
P0391R0 Introducing the term "templated entity" Jens Maurer 2016-06-21 2016-07   Core Adopted 2016-06
P0392R0 Adapting string_view by filesystem paths Nicolai Josuttis 2016-06-23 2016-07   Library Adopted 2016-06
P0393R3 Making Variant Greater Equal Tony Van Eerd 2016-06-21 2016-07 P0393R2 Library Adopted 2016-06
P0394R4 Hotel Parallelifornia: terminate() for Parallel Algorithms Exception Handling JF Bastien, Bryce Adelstein Lelbach 2016-06-23 2016-07 P0394R3 Concurrency Adopted 2016-06
P0396R0 C++ Concepts Active Issues List (Snapshot of Revision 4) Andrew Sutton 2016-06-24 2016-07   Core Adopted 2016-06
P0397R0 C++ Standard Library Priority 1 Issues Resolved Directly In Oulu Alisdair Meredith 2016-06-24 2016-07   Library Adopted 2016-06
P0398R0 Core issue 1518: Explicit default constructors and copy-list-initialization Jens Maurer 2016-06-24 2016-07   Core Adopted 2016-06
P0400R0 Wording for Order of Evaluation of Function Arguments William M. Miller 2016-06-25 2016-07   WG21  
P0401R0 Extensions to the Allocator interface Jonathan Wakely 2016-07-08 2016-07   Library Evolution  
P0404R0 Matching Types: 404 Syntax Not found Hubert Tong, James Touton 2016-07-11 2016-07   Evolution  
P0405R0 Wording for Networking TS changes from Kona Jonathan Wakely 2016-06-28 2016-07   Library  
P0407R0 Allocator-aware basic stringbuf Peter Sommerlad 2016-07-05 2016-07   Library Evolution, Library  
P0408R0 Efficient Access to basic stringbuf's Buffer Peter Sommerlad 2016-07-01 2016-07   Library Evolution, Library  
P0409R0 Allow lambda capture [=, this] Thomas Koeppe 2016-06-27 2016-07   Evolution  
P0411R0 Separating Library Requirements and Preconditions Jonathan Wakely 2016-07-07 2016-07   Library Evolution, Library  
P0413R0 Updating Parallel Execution Policy Names in the Parallelism TS Pablo Halpern 2016-07-07 2016-07   Concurrency, Library Evolution  
P0414R0 Merging shared_ptr changes from Library Fundamentals to C++17 Jonathan Wakely 2016-07-07 2016-07   Library  
P0416R0 Operator Dot (R3) Bjarne Stroustrup, Gabriel Dos Reis 2016-07-10 2016-07 N4477 Evolution, Core  
P0417R0 C++17 should refer to ISO/IEC 10646 2014 instead of 1994 Beman Dawes 2016-07-13 2016-07   Core, Library  

 

CppCon 2016 Program Preview: Concurrency, Modules and Finance

We have more CppCon 2016 program previews today! A selection of talks on concurrency, modules and finance, including talks by Hans Boehm, Anthony Williams and Richard Smith.

Program Preview: Concurrency, Modules, Finance

From the article:

Speaking for the first time in the US, Anthony Williams, the maintainer of Boost.Thread and the author of C++ Concurrency in Action will be joining us this year at CppCon! His talk, The Continuing Future of Concurrency in C++, will provide overview of the additions to the standard C++ concurrency libraries in the Technical Specifications for Concurrency and Parallelism and the C++14 and C++17 standards. ... [and much more]

CppCast Episode 63: IncludeOS with Alfred Bratterud

Episode 63 of CppCast the only podcast for C++ developers by C++ developers. In this episode Rob and Jason are joined by Alfred Bratterud, CEO of IncludeOS to discuss Microservice applications with the IncludeOS platform.

CppCast Episode 63: IncludeOS with Alfred Bratterud

by Rob Irving and Jason Turner

About the interviewee:

Alfred has been doing research towards IncludeOS since 2013, and got a PhD scholarship based on the early work in 2014. The IEEE CloudCom paper introducing the IncludeOS prototype was published in 2015 and he spun out a startup around IncludeOS in 2016, in collaboration with Oslo and Akershus university college (the largest institution for engineering education in Norway). He's currently focusing 100% on developing IncludeOS from research experiment to a production ready platform for cloud services.

Alfred holds BSc and MSc in computer science, with focus on logic and computability, from the university of Oslo. He has 10+ years of industrial programming experience, mostly in web services. He's been working at Oslo university college since 2011, teaching various subjects ranging from operating systems, sysadmin and firewalls to web development. He started learning C++ when he took over a C++ course at the college in 2011. A very good year to start C++.