- Meeting C++ links
- Day 1 (Thursday)
- Day 2
- Day 3 (Saturday)
- Lightning talks
- The hidden rules of world-class C++ code
- Extra lightning talks
- Closing keynote: What can C++ do for embedded and what can embedded do for C++?
Meeting C++ 2017 took place at Andels Hotel in Berlin at 9th to 11th November. The conference is organized by Jens Weller. I think it has around 600 participants and it has been around since 2012.
I listened to all three keynotes, 8 talks and 12 lightning talks (including the bonus ones at the end). I also participated in the discussion session for user group organizers on the Friday and in the discussion session for embedded on the Saturday.
As I noticed already last year a lot of the talks I listened to involved template metaprogramming in one way or another. As someone coming from pure C and embedded this can feel tricky to say the least. I’m eager to put in some more learning time into this and see how I can make use of it.
Guy Davidson held a lightning talk about diversity and inclusion before the end keynote on the Saturday. I liked that he brought up this topic and I will try to follow his advice and also continously evaluate my own behaviour in order to support this issue.
A big thanks to Jens Weller and all the speakers for making this conference possible!
Below is a list of the talks I listened to.
- Homepage: http://meetingcpp.com
- Twitter: https://twitter.com/meetingcpp
- YouTube: https://www.youtube.com/user/MeetingCPP
The opening keynote of the conference was delivered by Sean Parent. Sean currently works on Photoshop at Adobe. Sean talked aboth the relationship between a good human interface and good code.
Jason Turner talked about what new features in C++17 he has found most valuable for his project ChaiScript. ChaiScript is scripting language for C++. It was nice to listen to Jason in person since I have heard him talking on http://cppcast.com/ many times.
Jason first listed a numbered a features he has used in ChaiScript and then ranked them based on readability, performance impact and such. I think I got the list written down correctly. He also made the presentation at ccpcon 2017 so you can double check there.
- class template deduction guides
- fold expressions
- structured bindings
- class template argument deduction
- nested namespaces
- if init
noexpectin the type system
Jonathan Boccara talked about one possible way to implement strong types in C++.
The purpose of strong types is to carry meaning through names. Strong types also allow the programmer to create expressive code.
Phil Nash talked about the testing framework Catch2. Catch2 is a header only test framwork.
Catch2 works well with the following mock frameworks:
Gábor Horváth talked about tools that can help you as a programmer:
- clang format
- clang tidy
- clang static analyzer
- source based coverage
- fuzz testing
- profile guided optimization
- strict analysis
The opening keynote of day 2 was held by Kate Gregory. She talked about her relationship with C++. She talked about the value of knowing the whole language: syntax, idioms and patterns to be able to the find the most fitting design for a certain scenario. Knowing also allows us to write more simple code by selecting a certain idiom or pattern. She discussed some principles of simplicity:
- move and hide complexity
- eliminate complexity altogether when possible
- readability matters
- good names
- use well recognized idioms
Kate went on to discuss the C++ core guidelines. She discussed the value of a short and general guidelines such as “don’t use exceptions” versus more complicated guidelines found in the core guidelines. She argued that the guidelines needs to be a bit complicated to guide us correctly in a complex world.
Her key take aways was:
- try to really learn the whole language
- use the core guidelines
- value simplicity
- never stop learning
Milosz Warzecha introduced template metaprogramming to the audience.
Template metaprogramming is about doing things in compile time rather than in run time. Too much use of metaprogramming can afftect the compile time. Metaprogramming bugs can also be difficult to track down.
Milosz went on to tell us about how template metaprogramming started in the early 90ths by mistake. Erwin Unruh created a C++ program that calculated prime numbers during compile time and printed the output in compiler error messages. So the program could not actually compile be still produced the result.
Milosz discussed a number of programming techniques used to perform template metaprogramming:
- type traits, e.g.
- meta functioncs, e.g
- member detection trick
- predicate - a function that return true or false
- also use SFINAE
- containers for types
- variadic templates
- std::transform but at compile time
Kris Jusiak started the talk by telling us a little bit about the history of Concepts in C++. He specifically told us about a ISO C++ meeting in Frankfurt 2009. At that meeting Concepts was voted out of the standard. Kris Jusiaks understanding of the situation as that the committe did not want further delays in C++0X (later renamed to C++11) and Concepts was a complex addition that did not feel mature enough to include at the time:
- the syntax was considered only expert friendly
- the compile time was affected in an inacceptable way
- could not scale down
Bjarne Stroustrup wrote a paper already in 1987 what requirements he had on templates:
- zero overhead
- well specified interfaces
The top two items (1 & 2) were achieved when templates were originally introduced into C++ but not the last, due to the lack of Concepts.
There are mainly two motiviations behind concepts:
- to be able to put requirements on template type arguments
- to provide better compiler diagnostic messages when templates are used with incorrect types
Concepts are currently included in the C++ draft. Bjarne Strostrup and Andrew Stutton are very much involved in the work regarding getting Concepts into the standard.
Kevlin Henney talked about a declarative approach to programming.
Subtle state changes is a problem with imperative style.
Quite long discussion, missed last talk session.
Vittorio Romeo gave a lightning talk about a paper he wrote where a proposes the addition of a so called
function_ref to the standard library.
Björn Fahller gave a lightning talk with the title “A variant of recursive descent parsing”.
Arvid Gerstmann gave a lightning talk with the title “A very quick view into a compiler”.
Cem Bossay gave a lightning talk with the title “Multi dimensional array in C++”.
Andreas Rein gave a lightning talk with the title “A hort story about configuration file formats”.
Boris Schäling talked about two alternative ways to design code to setup socket connections:
- traditional way using inheritance
- alternative way using
- free functions
Boris advocated the second alternative.
Goal of design:
- delegation of object creation
- code reuse
- decouple init of factories from creating connection
Boris likes language features that solve specific use case locally in the code.
Sean Parent gave a lightning talk with the title “Polymorphic tasks template in ten (minutes)”.
Kate Gregory gave a lightning talk with the title “5 things I figured out while I was supposed to be dying”.
Guy Davidsson gave a lightning talk about diversity and inclusion on the C++ community.
Rainer Grimm gave a lightning talk but I don’t have a title unfortunately.
Phil Nash gave a lightning talk with the title “Composable command line parser in Catch2”.
Jens Weller gave a ligttning talk about programming in a different domain.
Wouter van Ooijen gave the closing keynote with the title “What can C++ do for embedded and what can embedded do for C++?”.