Quantcast
Channel: Bartek's coding blog
Viewing all articles
Browse latest Browse all 325

C++ Status at the end of 2016

$
0
0

C++ Status at the end of 2016

Another year and another C++ Status! It’s hard to believe, but it’s my fifth time I am writing this summary. And, as usually, C++ language is very alive. The biggest news for the year?

Of course, it must be: the final draft for C++17!.

What else have happened? See my full report below.

Other reports: 2016, 2015, 2014, 2013, 2012.

Timeline

  • January 14, Alex Stephanov is retiring.
  • February 29 - March 5: ISO meeting in Jacksonville, FL, USA
  • March 9, Clang 3.8 released
  • April 19-23, - ACCU Conference
  • April 1, Intel Compiler v17.0
  • April 27, GCC 6.1 Released
  • June 6-10, NDC Oslo
  • June 20-25, ISO meeting in Oulu, Finland
  • June 27, VS Update 3
  • August 22, GCC 6.2 released
  • Sep 2, Clang 3.9 released
  • September 17 - 23, CppCon 2016
  • November 7 - 12: ISO meeting Issaquah, WA, USA
  • November 16, VS 2017 RC available!
  • November 15 & 16, code::dive conference in Wroclaw, PL
  • November 18 & 19 MeetingCpp, Berlin

C++11/14 compiler status

Before we dive into newest stuff, let’s recall what’s the status of C++11 and C++14 implementation.

Just for the reference Clang (since 3.4 ), GCC (since 5.0) and Intel (version 15.0) already have full support for C++11/14.

Visual Studio (as of current VS 15.0 RC) lacks some features: Expression SFINAE (Partial), Two-phase name lookup, C99 preprocessor (Partial). See this VS blog post for more information. Still, I don’t see that situation as a blocker.

C++17

Let’s now focus on the main topic from this year.

During the ISO meeting in Oulu (June), the Committee accepted the draft for C++17. This is definitely not a minor release since a lot of features were added!

Here’s what we’ll get in the version:

Language features

FeaturePaper
New auto rules for direct-list-initializationN3922
static_assert with no messageN3928
typename in a template template parameterN4051
Removing trigraphsN4086
Nested namespace definitionN4230
Attributes for namespaces and enumeratorsN4266
u8 character literalsN4267
Allow constant evaluation for all non-type template argumentsN4268
Remove Deprecated Use of the register KeywordP0001R1
Remove Deprecated operator++(bool)P0002R1
Removing Deprecated Exception Specifications from C++17P0003R5
Make exception specifications part of the type systemP0012R1
Aggregate initialization of classes with base classesP0017R1
Lambda capture of *thisP0018R3
Using attribute namespaces without repetitionP0028R4
Dynamic memory allocation for over-aligned dataP0035R4
Unary fold expressions and empty parameter packsP0036R0
Template argument deduction for class templatesP0091R3
Non-type template parameters with auto typeP0127R2
Guaranteed copy elisionP0135R1
New specification for inheriting constructors (DR1941 et al)P0136R1
Direct-list-initialization of enumerationsP0138R2
Stricter expression evaluation orderP0145R3
constexpr lambda expressionsP0170R1
Differing begin and end types in range-based forP0184R0
Pack expansions in using-declarationsP0195R2
Structured BindingsP0217R3
Hexadecimal floating-point literalsP0245R1
Ignore unknown attributesP0283R2
init-statements for if and switchP0305R1
Inline variablesP0386R2
DR: Matching of template template-arguments excludes compatible templatesP0522R0
Improving std::pair and std::tupleN4387
constexpr if-statementsP0292R2

Library features

  • Merged: The Parallelism TS, a.k.a. “Parallel STL.”, P0024R2
  • Merged: The Library Fundamentals 1 TS (most parts), P0220R1
  • Merged: File System TS, P0218R1
  • Merged: The Mathematical Special Functions IS, PDF - WG21 P0226R1

Resources:

While the above features look quite ok, we could see during the year that people were not entirely satisfied with the standard. As you might recall, last year I posted a survey on the preferred features for C++17 (number of votes for a feature, multiple selections were accepted), over 650 participants:

preferred features for C++17

And this is what went into the standard:

What went into the standard

Note:array_view, string_view were renamed into span and string_span see this info, and here.

Not much to be honest… Fortunately, most of the really desired features are close to being standardized, so it’s good sign for C++20.

Also, you can see those slides from Michael Wang:
PDF: Michael Wong – C++17, is it great or just OK…

Still, other people aren’t such harsh for C++, Phil Nash: C++17 - Why it’s better than you might think.

I think that C++17 is a decent release. We could always have more, but the committee did a good job this year anyway.

If you’re unhappy about not having concept, ranges, modules in the standard… you can still play with their experimental versions!

What’s your opinion?

ISO C++ meetings

There were three committee meetings this year.

February 29 - March 5: Jacksonville, FL, USA

June 20-25, Oulu, Finland

The most important meeting this year, they voted the C++17 draft!

November 7-12: Issaquah, WA, USA

Compiler Notes

Current versions, updates

The best resource to stay up to date with all the features and compiler releases is probably: cppreference.com/C++ compiler support.

Visual Studio

Current version VS 2015 update 3 (27th June 2016)

But you can check out the recent RC candidate for VS 2017: Visual Studio 2017 Release Candidate.

There are also various libraries available from Microsoft:

GCC

On Windows you can use the latest MinGW distro from nuwen.net (Stephan T. Lavavej): Nuwen MinGW distro updated with GCC 6.3 and Boost 1.63.

Clang

Clang has its implementation of modules; you can play with it here.

Intel compiler

Conferences

As usually, we had two main C++ conferences - CppCon and Meeting C++, but I’d like to mention another one where C++ was the core topic - code::dive from Wroclaw, PL. Plus, there’s NDC Oslo with a good set of talks as well.

CppCon

Trip reports:

Meeting C++

Schedule.

This year Bjarne Stroustrup gave the opening keynote (“What C++ is and what it will become”). The closing keynote was presented by Louis Dionne (“C++ metaprogramming: evolution and future directions”).

Meeting C++ 2016 Playlist

Code::Dive in Wroclaw, PL

November 15th & 16th, code::dive

At last a really awesome C++ conference in Poland! :)

This year the conference took two days, and it included a lot of talks about C++ and native development.

code::dive is non-profit, annual conference for C++ enthusiasts
sponsored by NOKIA. The main idea behind the conference is to share the
knowledge beyond cutting edge technologies and build networking
between the people.

Some of the presenters: Scott Meyers, Venkat Subramaniam, Andrei Alexandrescu, Dan Sacks, Ulrich Drepper, Michael Wong, Chandler Carruth, Sean Parent, and much more!

code::dive 2016 playlist

NDC Oslo 2016

NDC Oslo 2016, 6th-10th June 2016

Videos from the conference

Speakers: Andrei Alexandrescu, Anthony Williams, Dan Saks, Detlef Vollmann, Mark Isaacson, and more.

BTW: The main problem with the conferences: how to watch all of those valuable talks! :) One tip is to watch it at bigger speed (1.5x, 2.0x, …) in the player, but still, it requires a lot of time!

Books

Some of the books released this year worth seeing:

I am still waiting for Large-Scale C++ Volume I, John Lakos, but its release date is moving later and later…

Summary

I think that C++ developers were looking for much more with C++17. In 2015 we got a lot of promises, ideas about the new standard, so people started to dream too much. The reality appeared a bit different, a lot of those impressive features were not accepted or put on hold.

Still, we shouldn’t complain. C++ 17 will be a really decent release, and a lot of teams and companies are not even near accepting/using C++11. The adaptation is also an important factor when looking at the language use. It’s much better to have reliable, verified, checked features than something fragile that might change. I’d like to have concepts, ranges, modules soon… but C++20 is not that far. And yet I can play with those features using their quite stable experimental versions.

I’m glad to see that the committee is working consistently, and also quite transparently. You can feel the enormous community behind the language. So, all in all I think 2017 will be a good year for C++.

  • What do you think about C++ in 2016?
  • What was the most important event/news for you?
  • Did I miss something? Let me know in comments!

The poll below: what's your favourite C++17 feature?


Viewing all articles
Browse latest Browse all 325

Trending Articles