C++ Annotated: Fall 2015
Fall is nearing its end, winter is coming, and we are ready to bring our next compilation of C++ news.
C++ Annotated: Fall 2015
In this edition:
CppCon 2015 was the most remarkable event this Fall in the C++ world. It was a great week in Bellevue, full of fantastic talks, meetings, and even a first ever CppCon exhibition running during the conference days. This year, CppCon was held under the banner of code quality and code analysis. It was all started by Bjarne Stroustrup presenting C++ Core Guidelines, a collaborative effort intended to formalize some rules for writing good C++ code and encourage effective use of Modern C++. Moreover, Bjarne was talking about the “need for tools”, because the initial idea is also to make these rules machine-checkable.
The topic was later fleshed out by many other speakers, including some great examples of static analysis checks from Neil MacIntosh in his two talks (“Static Analysis and C++: More Than Lint” and “Evolving array_view and string_view for safe C++ code”). Microsoft presented their Guidelines Support Library, which contains types and functions to comply with C++ Core Guidelines presented.
The playlist of all recorded talks is available on the official CppCon YouTube channel, in addition to all the lightning talks playlist, which by the way includes two C++ IDE presentations: Emacs as a C++ IDE by Atila Neves, and CLion Tips & Tricks by Dmitri Nesteruk.
And, incidentally, the dates for CppCon 2016 have already been announced: September 18th through 23rd, 2016.
While CppCon 2015 has already passed, another great C++ event is coming: Meeting C++ 2015, in Berlin, 4-5th December. The conference will be opened by Chandler Carruth from Google talking about Understanding Compiler Optimization. The schedule is also full of great names like James McNellis, Michael Wong, Lars Knoll and many others. Dmitri Nesteruk, our developer advocate, is going to give a talk on Rapid Prototyping in C++, demonstrating how one can beat the (relatively slow) C++ compiler in order to write and test code more efficiently. And in case you are a happy owner of a Meeting C++ 2015 ticket, we’ll be delighted to meet you at the JetBrains booth for a chat, QA and demos!
If you are involved in any kind of software development in the audio tech industry (or just doing audio software as a hobby), you may have heard about JUCE, a C++ cross-platform framework that has plenty of options for audio management while working with audio files, and at the same time provides instruments for building UI (similar to Qt; iOS developers can find some parallels with Reveal app). CppCon 2015 participants had a chance to learn about JUCE during the lightning talk by Julian Storer, and CppCast listeners may remember a recent episode with him.
In November, the JUCE Summit was held in London, covering some interesting topics around audio software development. These included workshops and training around Producer, the tool behind JUCE; questions about mixing JUCE and native APIs for developing for both iOS and Android; pure C++ language related topics; and some general software development topics during the guest talks. We look forward to a recording of the talks appearing soon!
News & Stories
First off, congratulations are in order on two important birthdays:
CMake Celebrates 15 Years
CMake turned 15 in the last days of summer. Congratulations to a great cross-platform solution that lets people manage builds in effective and flexible ways on many platforms!
To prove that the growth is not slowing down, CMake 3.4 was released on November 12, including several great features like the ability to honor *.manifest source files with MSVC tools, some initial and basic support for Apple .swift source files, many new commands, and other changes.
30th Anniversary of Cfront
Yes, 30 years have passed since CFront 1.0 was announced at the ACM conference by Bjarne Stroustrup! Do any of our readers remember that year? In the interview Bjarne said, “It was a big day for me, but the only thing I remember is getting the first copy of my 1st edition” (meaning the first edition of The C++ Programming Language).
That was 30 years ago. Now C++ is used by millions of developers across the world, an impressive family of C++ compilers and the C++17 standard is under discussion by the committee—a great story for the language, and we hope it continues for many more years!
News from the Visual C++ Team
In September, the Visual C++ team posted a survey in order to understand how many people use GCC- and LLVM-based compilers targeting either Windows or Linux. It offered eleven different questions about language, compiler, debugger, IDE and platform used for development, cross-platform options, and debugging procedures. Have you participated?
In the beginning of November, the team also introduced a couple of experimental editor tools through the new “Experimental” mechanism. It allows you to play with the new features and participate in its evolution, and lets you disable any of the features should you find them not to your liking. The list of new experimental features includes automatic replacement of ‘.’ with ‘->’ when applicable, Extract Function and Change Signature refactorings, and more.
The Visual C++ Team also announced a separate package with standalone C++ tools, not including Visual Studio IDE, but with compiler, header files, libraries and more.
Clang 3.7 Released
Clang, the LLVM front-end, saw another release too. New things included initial support of __try/__catch__finally SEH language constructs, improved support for OpenMP (including OpenMP 4.0 omp simd directive), and an implementation of control flow integrity, a security related mechanism. Clang also saw some improved diagnostics, including range loop analysis, inspections related to move operations, and detection of infinite recursion.
And, speaking of Clang/LLVM, check out the videos from the 2015 LLVM Developers’ Meeting which took place in late October in San Jose, California. The playlist has many interesting talks covering LLVM, OpenMP, GPU support and many other topics.
CppCast Episodes with Scott Meyers, Andrei Alexandrescu and Other Great Guests
CppCast, a podcast by C++ developers for C++ developers, hosted by Rob Irving and Jason Turner, has presented several fantastic speakers this fall. It started with an appearance by Scott Meyers in September, who spoke about the “Effective C++” series of books and gave advice to those who have valuable C++ knowledge to share: pay attention to modern video formats, not only books.
Another episode has Andrei Alexandrescu talking about C++ and D, and reasons why programming languages succeed or fail. Kate Gregory, this year’s Open Content Chair for CppCon, talks about the proper way of teaching C++. Dmitri Nesteruk, a JetBrains developer advocate, speaks on his favorite High Performance Computing topics.
Arduino Support in CLion
There is a very popular request in our tracker about built-in Arduino support in CLion. However, since the team is currently quite busy with other things, our users try to find workaround and other possible solutions. First, there is a project on github joining Arduino and CMake, which makes it possible to open Arduino projects in CLion. This project became a foundation for the CLion plugin, which you can find in the repository.
Another tool worth mentioning here is PlatformIO. In a nutshell, it is a cross-platform open source code builder that recently became quite popular for embedded development. It currently provides support for a range of platforms, including Arduino. The IDE integrations list looks quite impressive, and includes many famous names like Atom, Qt Creator, Visual Studio and CLion. Speaking of latest, we can’t miss a short but very useful post about using PlatformIO to get started with Arduino in CLion IDE.
Living with Microsoft C++ Compiler Bugs and Ambiguities
The ReSharper C++ team came out with a blog post covering some examples of nonstandard behavior of the Microsoft C++ compiler that they faced while working on the ReSharper C++ extension to Visual Studio.
There are plenty of interesting cases, from generating comments with macros to the binding of rvalues to lvalue references via an extension, problems with 2-phase look-up for templates and more. Digging into the C++ standard, Dmitri Nesteruk describes cases that are compiled successfully with MSVC, but not with GCC or Clang. The post was warmly welcomed in the community and Herb Sutter responded in the comments, explaining when and what is planned to be fixed.
Applying Genetic Algorithms to Automatic Code Formatting
Another story came from the CLion team and is dedicated to the topic of extracting a set of code formatting options from actual formatted code.
This originated as a project in our traditional JetBrains Hackathon this summer, but quickly made it into the product as it brings real value. This technique helped us extract several famous code styles and build them into CLion, including code styles by Google, GNU, Qt and Stroustrup, and braces rules by Allman, Whitesmiths, and K&R. If you’re wondering why or how exactly genetic algorithms helped accomplish this, check out the blog post and learn about genotypes, fitness functions and the way these optimizations function in real life.
New Versions of CLion and ReSharper C++ Released in November
This fall brought a day of big release to JetBrains and its customers. November 2nd was a day when we updated the entire JetBrains Toolbox that includes all of our desktop tools, and also launched our new subscription-based licensing model for these products. This also included an update for our C++ tools.
On the CLion side, the biggest feature was Google Test support integration. That means CLion’s users can now benefit from the built-in test runner with a lot of capabilities for browsing results and restarting tests, together with the smart code generation feature. And that’s not all!
As for ReSharper C++, it has extended its support for the C language, and now provides better support for C99, including designated initializers. It also works with all C11 features that are supported in Visual Studio. C++11 and C++14 support was also improved, together with many other changes.
In other news:
- Agustín “K-ballo” Bergé highlights the efficient way of using parameter pack and variadic templates.
- Meeting C++ shares great tips on starting and running a User Group.
- Bjarne Stroustrup and Herb Sutter published detailed reports about Fall 2015 ISO C++ standards meeting.
In case you missed recent JetBrains webinars, you’ll be glad to know all the recordings are available.
First was Generative Art in C++, which discussed an algorithm using nested smooth functions to create artwork of arbitrary complexity and size. Not only that, it is also a good overview of the hottest parallelization topics from C++: OpenMP and Threading Building Blocks, Intel’s Math Kernel Library, Message Passing Interface and some more.
The second webinar was for Visual Studio users, covering many of the available extensions to this great platform like NuGet, GhostDoc, C++ Debugger Visualizers, IncrediBuild, ReSharper, and many more. Watch the recording to learn ‘who is who’ here in that list and how you can benefit from each of the tools.
That’s all, folks.
We hope you enjoyed this edition of JetBrains C++ Annotated. Do let us know what you think!