Loading…
View analytic

Log in to bookmark your favorites and sync them to your phone or calendar.

Saturday, September 23
 

9:00am

Concurrent Thinking in C++: Part I
"Concurrent Thinking in C++" is a two day training course taught by Anthony Williams of Just Software Solutions Ltd. This course is for students that have a good knowledge of C++, but no prior knowledge of concurrency or multithreading is assumed. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Saturday September 23, 2017 9:00am - 5:00pm
Meydenbauer TBA #3 Meydenbauer Center

9:00am

Modern C++ Template Programming: Part I
“Modern C++ Template Programming” is a two-day training course with programming exercises taught by Steve Dewhurst. It is offered at the Meydenbauer Conference Center from 9AM to 5PM on Saturday and Sunday, September 23rd and 24th (immediately prior to the conference). Attendees should be experienced software developers with basic knowledge of C++ templates. Lunch is included. Course and instructor details are available here.

Speakers
SD

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-a... Read More →


Saturday September 23, 2017 9:00am - 5:00pm
Meydenbauer TBA #5 Meydenbauer Center

9:00am

Modernizing Your C++: Part I
"Modernizing Your C++" is a two day training course taught by Michael Caisse of Ciere Consulting. This course is for students that are comfortable with classic C++, but want to come up to speed with C++11/14. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →


Saturday September 23, 2017 9:00am - 5:00pm
Meydenbauer TBA #1 Meydenbauer Center

9:00am

Programming with Qt/Widgets: Part I
"Programming with Qt/Widgets" is a two day training course taught by Giuseppe D'Angelo of KDAB. This course is for students that have a good knowledge of C++, but no prior knowledge of Qt is assumed. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Giuseppe D'Angelo

Giuseppe D'Angelo

Senior Software Engineer, KDAB
Giuseppe (peppe) is a long time contributor to Qt, having used Qt since 2000, and an Approver in the Qt Project. In KDAB, Giuseppe is a Senior Software Engineer and a Trainer, working on a number of C++ and QML projects, most of them requiring OpenGL knowledge. Giuseppe also lead... Read More →


Saturday September 23, 2017 9:00am - 5:00pm
Meydenbauer TBA #2 Meydenbauer Center

9:00am

The Standard Library from Scratch: Part I
“The Standard Library from Scratch” is a two-day training course with programming exercises taught by Arthur O’Dwyer. It is offered at the Meydenbauer Conference Center from 9AM to 5PM on Saturday and Sunday, September 23rd and 24th (immediately prior to the conference). Students are expected to have a good working knowledge of C++11. A working knowledge of classes, virtual functions, templates, exception-handling, C++11 lambdas, and move semantics will be assumed. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Core Engineering, Nominum
Arthur O'Dwyer worked for many years at Green Hills Software, making the world's most optimizing C and C++ compilers. Now he works at Nominum in San Francisco. Arthur is the showrunner of the Bay Area C++ meetup, which meets practically every week these days.


Saturday September 23, 2017 9:00am - 5:00pm
Meydenbauer TBA #4 Meydenbauer Center
 
Sunday, September 24
 

9:00am

Concurrent Thinking in C++: Part II
"Concurrent Thinking in C++" is a two day training course taught by Anthony Williams of Just Software Solutions Ltd. This course is for students that have a good knowledge of C++, but no prior knowledge of concurrency or multithreading is assumed. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #3 Meydenbauer Center

9:00am

Modern C++ Template Programming: Part II
“Modern C++ Template Programming” is a two-day training course with programming exercises taught by Steve Dewhurst. It is offered at the Meydenbauer Conference Center from 9AM to 5PM on Saturday and Sunday, September 23rd and 24th (immediately prior to the conference). Attendees should be experienced software developers with basic knowledge of C++ templates. Lunch is included. Course and instructor details are available here.

Speakers
SD

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-a... Read More →


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #5 Meydenbauer Center

9:00am

Modernizing Your C++: Part II
"Modernizing Your C++" is a two day training course taught by Michael Caisse of Ciere Consulting. This course is for students that are comfortable with classic C++, but want to come up to speed with C++11/14. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #1 Meydenbauer Center

9:00am

Moving to C++17: The New Language and Library Features
“Moving to C++17: The New Language and Library Features” is a one-day training course taught by Nicolai Josuttis, author of "The C++ Standard Library" and "C++ Templates". It is offered at the Meydenbauer from 9AM to 5PM on Sunday, September 24th (immediately prior to the conference). Participants should have a basic knowledge of C++ including C++11. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries. He is well known in the programming community because he not only speaks and writes with authority (being the (co-)author of the world-wide best sellers The C++ Standard Library... Read More →


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #6 Meydenbauer Center

9:00am

Programming with Qt/Widgets: Part II
"Programming with Qt/Widgets" is a two day training course taught by Giuseppe D'Angelo of KDAB. This course is for students that have a good knowledge of C++, but no prior knowledge of Qt is assumed. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
avatar for Giuseppe D'Angelo

Giuseppe D'Angelo

Senior Software Engineer, KDAB
Giuseppe (peppe) is a long time contributor to Qt, having used Qt since 2000, and an Approver in the Qt Project. In KDAB, Giuseppe is a Senior Software Engineer and a Trainer, working on a number of C++ and QML projects, most of them requiring OpenGL knowledge. Giuseppe also lead... Read More →


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #2 Meydenbauer Center

9:00am

The Standard Library from Scratch: Part II
“The Standard Library from Scratch” is a two-day training course with programming exercises taught by Arthur O’Dwyer. It is offered at the Meydenbauer Conference Center from 9AM to 5PM on Saturday and Sunday, September 23rd and 24th (immediately prior to the conference). Students are expected to have a good working knowledge of C++11. A working knowledge of classes, virtual functions, templates, exception-handling, C++11 lambdas, and move semantics will be assumed. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Core Engineering, Nominum
Arthur O'Dwyer worked for many years at Green Hills Software, making the world's most optimizing C and C++ compilers. Now he works at Nominum in San Francisco. Arthur is the showrunner of the Bay Area C++ meetup, which meets practically every week these days.


Sunday September 24, 2017 9:00am - 5:00pm
Meydenbauer TBA #4 Meydenbauer Center

10:30am

Boeing Future of Flight Field Trip
This year's field trip is to the Boeing plant in Everett. Details are available here.

Trip leaves by bus at 10:30 am and will return around 15:00.

You must register separately.

Sunday September 24, 2017 10:30am - 3:00pm
Leaving from Meydenbauer 11100 NE 6th St, Bellevue, WA 98004

11:30am

Boeing Future of Flight Field Trip
This year's field trip is to the Boeing plant in Everett. Details are available here.

Trip leaves by bus at 11:30 am and will return around 16:00.

You must register separately.

Sunday September 24, 2017 11:30am - 4:00pm
Leaving from Meydenbauer 11100 NE 6th St, Bellevue, WA 98004

8:00pm

Registration / Reception
Come for the registration and stay for the reception.

Get your badge, your registration package, and, if you ordered one, your shirt.

Stick around and get acquainted with new friends and reacquainted with old friends.

Sunday September 24, 2017 8:00pm - 10:00pm
Meydenbauer TBA #8 Meydenbauer Center
 
Monday, September 25
 

8:00am

Registration
Welcome! Let's get the paperwork out of the way.

Monday September 25, 2017 8:00am - 9:00am
Meydenbauer TBA #8 Meydenbauer Center

9:00am

Learning and Teaching Modern C++

We – attendees at CppCon – are all teachers. Some teach for a living; many occasionally teach a course or give a lecture; essentially all give advice about how to learn C++ or how to use C++. The communities we address are incredibly diverse.

What do we teach, and why? Who do we teach, and how? What is “modern C++”? How do we avoid pushing our own mistakes onto innocent learners?

Teaching C++ implies a view of what C++ is; there is no value-neutral teaching. What teaching tools and support do we need? Consider libraries, compiler support, and tools for learners. This talk asks a lot of questions and offers a few answers. Its aim is to start a discussion, so the Q&A will be relatively long.


Speakers
avatar for Bjarne Stroustrup

Bjarne Stroustrup

Managing Director,, Morgan Stanley
C++: history, design, use, standardization, future; performance, reliability; software developer education; | distributed systems


Monday September 25, 2017 9:00am - 10:30am
Meydenbauer TBA #8 Meydenbauer Center

11:00am

constexpr ALL the Things!
constexpr: in C++11, a curiosity; in C++14, viable for more uses; now with added power, in C++17 will it become an important tool in the programmer's toolkit?

In this talk we will examine the possibilities and power of constexpr and explore what can (and what should) be done at compile-time with C++17. We'll present techniques for building constexpr data structures and algorithms, and look at what the standard provides and where it can improve. We'll also explore constexpr use of user defined literals for expressive compile-time abstractions.

Compile-time computation offers perhaps the ultimate zero-cost abstraction, and this talk attempts to gauge the power available with C++17 constexpr.

Speakers
avatar for Ben Deane

Ben Deane

Principal Software Engineer, Blizzard Entertainment
Ben has been writing games for almost 20 years, and in C++ for most of that. He is currently a Principal Engineer at Blizzard Entertainment where he works on the Battle.net team. He's always looking for useful new techniques in C++, and he likes functional programming.
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #1 Meydenbauer Center

11:00am

Coroutines: What can't they do?
Coroutines are coming. They're coming for your asynchronous operations. They're coming for your lazy generators. This much we know. But once they're here, will they be satisfied with these offerings? They will not. They will require feeding, lest they devour our very souls. We present some fun ways to keep their incessant hunger at bay. I, for one, welcome our new coroutine overlords.

The Coroutines Technical Specification is an experimental extension to the C++ language that allows functions to be suspended and resumed, with the primary aim of simplifying code that invokes asynchronous operations. We present a short introduction to Coroutines followed by some possibly non-obvious ways they can help to simplify your code.

Have you ever wanted to elegantly compose operations that might fail? Coroutines can help. Have you ever wished for a zero-overhead type-erased function wrapper? Coroutines can help. We show you how and more.

Speakers
avatar for Toby Allsopp

Toby Allsopp

Senior Software Engineer, WhereScape Software Limited
Toby Allsopp is a programmer mostly using C++ at the moment but with interests in functional programming. He live in Auckland, New Zealand. He organizes the Auckland C++ Meetup.
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

Software Engineer, Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers and scientists, he develops and analyzes new parallel programming models for exascale and post-Moor... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #2 Meydenbauer Center

11:00am

C++ Constraints: Background, Utility, and Gotchas
Compile-time constraints will likely soon become part of our routine C++ programming vocabulary. Why? Such constraints are induced by new core language features (requires-clauses and requires-expressions) that are on the horizon for C++. What are these all about?

Almost every function imposes requirements on its users; violating those requirements typically leads to incorrect programs. Historically, such requirements had to be expressed in comments or other documentation, as there was little machinery to express them in code. Soon we will be able to express more requirements in code, thus allowing compilers to detect and address more violations.

This talk aims to prepare both new and veteran C++ programmers with the necessary background, tutorial information, and advice to exploit this powerful new supplement to function declarations. A case study, illustrating an unexpected gotcha, will conclude the presentation.

Speakers
avatar for Walter E. Brown

Walter E. Brown

retired, none
With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a C++ programmer for over thirty-five years, joining the C++ standards effort in 2000. Among numerous other contributions, he is responsible for introducing such now-standard C... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #6 Meydenbauer Center

11:00am

The Quiet Little Gem in Modern C++: <system_error>
Amongst the loud fanfare of C++11 arrived this quiet little gem of <system_error>, with std::error_code and std::error_condition born from the heart of boost::asio. With Committee input they evolved for inclusion into the C++11 Standard, providing consistent and extensible ways for applications to expose platform-specific error-codes, platform-independent error-conditions, and rely upon an open-ended design that permits future extensibility for message reporting; and even internationalization of logs and user-facing events and conditions.

More than half a decade later, we most unhappily find that the motivation and intended use model for std::error_code and std::error_condition are still not well understood; even in circles eagerly embracing features and idioms encouraged by the latest C++ Standard revisions. This may be somewhat expected, as all things “error” tend to permeate system-wide design-decisions and influence the processing metaphor; how algorithms compose conditional success-or-failure branching; and create consistency challenges across APIs (both internally, and for interoperation with third-party libraries).

We discuss the features and design of <system_error> and its intended use; make recommendations regarding API design; and propose possible extension mechanisms for module-specific concerns, instance-specific messages (with embedded value-reporting), and internationalization.

Speakers
avatar for Charles Bay

Charles Bay

Senior Software Engineer, F5 Networks Inc.
Software developer with 25+ years experience in large-scale and distributed systems in performance-sensitive environments including real-time processing, performance visualization, embedded systems, time-sensitive processing of large data sets, hardware status-and-control, an... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #5 Meydenbauer Center

11:00am

Modern C++ Interfaces: Complexity, Emergent Simplicity, SFINAE, and Second Order Properties of Types
We examine how the increasing complexity of language features related to interfaces in modern C++ has somewhat surprisingly produced increasing simplicity in the interfaces themselves.

One of the major reasons for this emergent simplicity is common use of “substitution failure is not an error” or SFINAE in interface design. Appropriate use of SFINAE allows the production of “do what I mean” or DWIM interfaces that allow experienced designers to embed their judgement in interfaces.

Most of the presentation will consist in examination of practical examples of SFINAE in interface design and development of a simple toolkit that automates construction of compile time template predicates. Abstract syntax trees are evaluated at compile time to enforce complex constraints on types in the SFINAE context.

Speakers
SD

Stephen Dewhurst

President, Semantics Consulting, Inc.
Steve Dewhurst is the co-founder and president of Semantics Consulting, Inc. Steve is the author of numerous technical articles on C++ programming techniques and compiler design, is the author of the critically acclaimed books C++ Common Knowledge and C++ Gotchas, and is the co-a... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #3 Meydenbauer Center

11:00am

Debugging Tools and Techniques for Commercial-Scale Software
We’ve all heard horror stories about bugs that were near-impossible to root-cause, and many of us have at least a few stories of our own. Corrupted or uninitialized memory. Resource leaks. API misuse and race conditions. Occasional and inconsistent crashes where all you have to go on are a series of unhelpful crash dumps. These kinds of problems are often time-consuming and tedious to debug, and can be both draining and infuriating.

In this session, we will demonstrate tools and techniques used at Microsoft to root-cause such problems in very large, complex software products (namely Windows and Office). We’ll show how these tools can make it easier to grapple with failures within your code as well as the code you interact with. This talk will be very interactive and hands-on, and will include examples how we’ve diagnosed real bugs using these tools. We’re certain there will be something new and useful for everyone!

Speakers
avatar for James McNellis

James McNellis

Senior Software Engineer, Microsoft
James is a senior engineer on the Windows Debugger team at Microsoft, where he works on the development of new and innovative debugging technologies. Prior to joining the Debuggers team in 2016, he was a member of the Visual C++ team, where he was responsible for the Microsoft C... Read More →
JM

Jordi Mola

PRINCIPAL SOFTWARE ENG LEAD, Mircosoft Corp.
Jordi is a Principal Software Engineer Lead at Microsoft Corporation that has a passion for engineering productivity and efficiency. Except for a couple of years working on the Windows 8 copy UI, Jordi has spent his entire Microsoft career working on productivity tools, many of w... Read More →
KS

Ken Sykes

Principal Software Development Engineer, Microsoft
Ken is a Principal Software Developer at Microsoft Corporation and has worked on every consumer version of Windows since Windows 3.0. He recently joined the Windows Debugger team to help developers everywhere become more productive and maybe even make debugging a little bit fun... Read More →


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #7 Meydenbauer Center

11:00am

EA’s Secret Weapon: Packages and Modules
A lot of people hate build systems. What if using a library was just as easy as header-only libraries?

EA has had a Secret Weapon called “packages” for over 14 years. EA's Packages are like Ruby’s Gems or Perl’s CPAN or Rust’s cargo. If you build a package from the package server it will download all of its dependencies.

This talk will be about what we have learned about packages and versioning while building our large AAA games over the last 10+ years. Finally, what do we see for the future, like how will C++ modules fit in?

In detail I will talk about:
-Package layout
-Package server
-Versioning control and packages
-Libraries teams and platform fragmentation
-Packages' effect on large scale architecture
-C++ Modules TS prototypes

Speakers
avatar for Scott Wardle

Scott Wardle

Senior Software Engineer, Electronic Arts
Hey Everyone, I am Scott Wardle, I have been in games over 20 years. Much of that in EA Vancouver. I like to solve hard problems I am known for SE workflows at EA and trying to turn my problems into solutions that everyone can use.


Monday September 25, 2017 11:00am - 12:00pm
Meydenbauer TBA #4 Meydenbauer Center

12:30pm

Open Content Sessions: TBA
Monday September 25, 2017 12:30pm - 1:30pm
Meydenbauer TBA #8 Meydenbauer Center

2:00pm

C++17 Features (part 1 of 2)
The feature set for the C++17 release is set, and the release of the standard is just around the corner. In this session, we'll discuss all the new C++ features in C++17 and how they'll change the way we write C++ software. We'll explore the new standard in breath, not width, covering a cornucopia of core language and library features and fixes:

Language Changes (part 1):
  • Structured bindings
  • Selection statements with initializers
  • Compile-time conditional statments
  • Fold expressions
  • Class template deduction
  • auto non-type template parameters
  • inline variables
  • constexpr lambdas
  • Unary static_assert
  • Guaranteed copy elision
  • Nested namespace definitions
  • Preprocessor predicate for header testing

Library Changes (part 2):
  • string_view
  • optional
  • variant
  • any
  • Parallel algorithms
  • Filesystem support
  • Polymorphic allocators and memory resources
  • Aligned new
  • Improved insertion and splicing for associative containers
  • Math special functions
  • Variable templates for metafunctions
  • Boolean logic metafunctions


Speakers
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

Software Engineer, Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers and scientists, he develops and analyzes new parallel programming models for exascale and post-Moor... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #1 Meydenbauer Center
  • Level Beginner, Intermediate, Advanced
  • Tags C++17

2:00pm

The landscape of parallel programming models: is it still hard or just OK? (part 1 of 2)
Most embedded devices are multicore, and we see concurrency becoming ubiquitous for machine learning, machine vision, and self-driving cars. Thus the age of concurrency is upon us, so whether you like it or not, concurrency is now just part of the job. It is therefore time to stop being concurrency cowards and start on the path towards producing high-quality high-performance highly scalable concurrent software artifacts. After all, there was a time when sequential programming was considered mind-crushingly hard: In fact, in the late 1970s, Paul attended a talk where none other than Edsger Dijkstra argued, and not without reason, that programmers could not be trusted to correctly code simple sequential loops. However, these long-past perilous programming pitfalls are now easily avoided with improved programming models, heuristics, and tools. We firmly believe that concurrent and parallel programming will make this same transition. This talk will help you do just that.

Besides, after more than a decade since the end of the hardware "free lunch", why should parallel programming still be hard?

Speakers
avatar for Paul E. McKenney

Paul E. McKenney

Distinguished Engineer, IBM Linux Technology Center
Paul E. McKenney has been coding for almost four decades, more than half of that on parallel hardware, where his work has earned him a reputation among some as a flaming heretic. Over the past decade, Paul has been an IBM Distinguished Engineer at the IBM Linux Technology Center... Read More →
avatar for Maged Michael

Maged Michael

Engineer, Facebook
Maged Michael is a software engineer at Facebook. He is the inventor of hazard pointers, lock-free malloc and several algorithms for concurrent data structures. His work is included in several IBM products where he was a Research Staff Member at the IBM T.J. Watson Research Cente... Read More →
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #3 Meydenbauer Center

2:00pm

Unicode Strings: Why the Implementation Matters
We will provide a brief overview including an explanation of what Unicode is, string terminology, and how Unicode supports non US languages.

We will cover the pros and cons of various String formats and encodings including UTF-8, UTF-16, UCS-4, etc. A time line of Unicode development will be shown and how other languages have handled string processing over the last twenty years.

We will provide a brief overview of where strings are used, what can go wrong with strings, why string encoding is important, and how the CsString library solves a major problem with string handling.

We will explain how the CsString library has changed our CopperSpice Gui libraries and improved string processing in DoxyPress.

No prior knowledge of Unicode, CopperSpice, or DoxyPress is required.

Speakers
avatar for Barbara Geller

Barbara Geller

Co Founder, CopperSpice
I am an independent consultant with over twenty-five years of experience as a programmer and software developer. I have worked with numerous smaller companies developing in-house applications. I have also designed and developed Windows applications for several vertical markets in... Read More →
AS

Ansel Sermersheim

Co Founder, CopperSpice
I have been working as a programmer for nearly twenty years. My degree is in Computer Science from Cal Poly San Luis  Obispo. | | I have transitioned to independent consulting and I am currently working on a project for RealtyShares in San Francisco. | | Co-founder of CopperSpice, a C++ GUI library. Co-founder of DoxyPress, a C++ application for generating documentation. Developer of the open source libraries: libGuarded, CsSignal and CsString. | I have programmed in C++, C, Lisp, Java, and Perl, with extensive knowledge in TCP/IP and mutilthreaded design. I am... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #2 Meydenbauer Center

2:00pm

Almost Unlimited Modern C++ in Kernel-Mode Applications
Rian Quinn's "Making C++ and the STL Work in the Linux/Windows Kernels" from CppCon 2016 showed the difficulty of making C++ code work correctly in kernel mode. For some real-time systems, though, developing C++ applications that run in kernel mode "just works" as most of the necessary runtime support for Modern C++ is already available. Platform limitations, though, can offset the development gains that come with easy access to hardware.

This talk will present a variety of issues — such as limited filesystem functionality, missing memory protection, limited debugging and performance monitoring tools, and constrained resources — that impact usage of standard C++ functionality and require additional due diligence on the part of the developer. Topics will include testing in user mode; kernel-mode exceptions; and programming the Intel performance monitoring hardware.

Speakers
avatar for Billy Baker

Billy Baker

Senior Staff Software Engineer, FlightSafety International
Billy Baker has developed deterministic real-time flight simulation software using C++ for FlightSafety International, Evans and Sutherland and Boeing since 1997. At C++ committee meetings, he can most likely be found in LWG. He received his B.S. and M.S in Applied Mathematics from the University of Tulsa and is currently working on a Ph.D. in Computer Science. If asked, he will tell stories from his research semester at NCSA when web browsers did not yet have forms support.Website... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #5 Meydenbauer Center

2:00pm

When a Microsecond Is an Eternity: High Performance Trading Systems in C++
Automated trading involves submitting electronic orders rapidly when opportunities arise. But it’s harder than it seems: either your system is the fastest and you make the trade, or you get nothing.

This is a considerable challenge for any C++ developer - the critical path is only a fraction of the total codebase, it is invoked infrequently and unpredictably, yet must execute quickly and without delay. Unfortunately we can’t rely on the help of compilers, operating systems and standard hardware, as they typically aim for maximum throughput and fairness across all processes.

This talk describes how successful low latency trading systems can be developed in C++, demonstrating common coding techniques used to reduce execution times. While automated trading is used as the motivation for this talk, the topics discussed are equally valid to other domains such as game development and soft real-time processing.

Speakers
avatar for Carl Cook

Carl Cook

Software Engineer, Optiver
Carl has a Ph.D. from the University of Canterbury, New Zealand, graduating in 2006. He currently works for Optiver, a global electronic market maker, where he is tasked with adding new trading features into the execution stack while continually reducing latencies. Carl is also... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #7 Meydenbauer Center

2:00pm

Which Machine Am I Coding To?
When writing a C++ program, we tend to think of the strengths and weaknesses of our computer, just as we think of our algorithms, data structures, and probably of language features we want to use (or we want to avoid), and we code accordingly.

To some, it might be surprising to learn that C++ is actually specified in terms of an abstract machine, with its own characteristics. If this is indeed a surprise for you, then you might be interested in knowing more about this machine. It's been there for a long time, and it influences the way we program as well as the way the language was, and is.

The aim of this talk is to provide a practical overview of what the C++ abstract machine is, how it affects the way we program and how it affects language design itself. It will probably most interesting to intermediate audiences who would like a closer look to some of the abstract underpinnings of the language.


Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke / Collège Lionel-Groulx
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 20 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #6 Meydenbauer Center

2:00pm

New standards to the rescue: the view through an IDE’s glasses
We often talk about how new language features can help developers to write more accurate and concise code. There is another type of discussion to be had on how tools help leverage language issues and support developers. How about quite a third perspective? Which is about how language can help tools to do better.

As C++ tools vendors, we use to share our experience with C++ language trickiness and peculiarities, including preprocessor and non-trivial parsing. It’s time now to talk about the view on the upcoming language changes through the IDE’s glasses.

In this talk I’ll identify the most important issues with the language from the IDE’s perspective and will show how new language standards, as well as other initiatives like C++ Core Guidelines, are helpful and beneficial to the IDEs. I’ll cover a variety of features from if constexpr to Concepts and Modules, as well as std2 and some other initiatives that are no more than proposals at this point. Come and see the language from our perspective.

Speakers
AK

Anastasia Kazakova

Product Marketing Manager, JetBrains
A C/C++ fan since university, Anastasia has been creating real-time *nix-based systems and pushing them to production for 8 years. She has a passion for networking algorithms (especially congestion problems and network management protocols) and embedded programming, and believes... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Meydenbauer TBA #4 Meydenbauer Center

3:15pm

A modern formatting library for C++
Come learn about the intricacies of C++ formatting, from stdio to iostream to the new standard proposal P0645R0: Text Formatting. The new proposal combines variadic templates with a Python-like format string syntax and is designed for performance, extensibility, and safety. It is based on the popular fmt library that has been successfully used in numerous projects in such diverse areas as gaming, mathematical optimization, autonomous vehicles, databases, logging libraries and more.

Speakers
avatar for Victor Zverovich

Victor Zverovich

Software Engineer, Facebook
Victor Zverovich is a software engineer at Facebook working on reactive systems. Before joining Facebook in 2016, he was working for several years on modeling systems for mathematical optimization. He is an active contributor to open-source projects and an author of a popular for... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #6 Meydenbauer Center

3:15pm

C++17 Features (part 2 of 2)
The feature set for the C++17 release is set, and the release of the standard is just around the corner. In this session, we'll discuss all the new C++ features in C++17 and how they'll change the way we write C++ software. We'll explore the new standard in breath, not width, covering a cornucopia of core language and library features and fixes:

Language Changes (part 1):
  • Structured bindings
  • Selection statements with initializers
  • Compile-time conditional statments
  • Fold expressions
  • Class template deduction
  • auto non-type template parameters
  • inline variables
  • constexpr lambdas
  • Unary static_assert
  • Guaranteed copy elision
  • Nested namespace definitions
  • Preprocessor predicate for header testing

Library Changes (part 2):
  • string_view
  • optional
  • variant
  • any
  • Parallel algorithms
  • Filesystem support
  • Polymorphic allocators and memory resources
  • Aligned new
  • Improved insertion and splicing for associative containers
  • Math special functions
  • Variable templates for metafunctions
  • Boolean logic metafunctions


Speakers
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

Software Engineer, Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers and scientists, he develops and analyzes new parallel programming models for exascale and post-Moor... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #1 Meydenbauer Center
  • Level Beginner, Intermediate, Advanced
  • Tags C++17

3:15pm

The landscape of parallel programming models: is it still hard or just OK? (part 2 of 2)
Most embedded devices are multicore, and we see concurrency becoming ubiquitous for machine learning, machine vision, and self-driving cars. Thus the age of concurrency is upon us, so whether you like it or not, concurrency is now just part of the job. It is therefore time to stop being concurrency cowards and start on the path towards producing high-quality high-performance highly scalable concurrent software artifacts. After all, there was a time when sequential programming was considered mind-crushingly hard: In fact, in the late 1970s, Paul attended a talk where none other than Edsger Dijkstra argued, and not without reason, that programmers could not be trusted to correctly code simple sequential loops. However, these long-past perilous programming pitfalls are now easily avoided with improved programming models, heuristics, and tools. We firmly believe that concurrent and parallel programming will make this same transition. This talk will help you do just that.

Besides, after more than a decade since the end of the hardware "free lunch", why should parallel programming still be hard?

Speakers
avatar for Paul E. McKenney

Paul E. McKenney

Distinguished Engineer, IBM Linux Technology Center
Paul E. McKenney has been coding for almost four decades, more than half of that on parallel hardware, where his work has earned him a reputation among some as a flaming heretic. Over the past decade, Paul has been an IBM Distinguished Engineer at the IBM Linux Technology Center... Read More →
avatar for Maged Michael

Maged Michael

Engineer, Facebook
Maged Michael is a software engineer at Facebook. He is the inventor of hazard pointers, lock-free malloc and several algorithms for concurrent data structures. His work is included in several IBM products where he was a Research Staff Member at the IBM T.J. Watson Research Cente... Read More →
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #3 Meydenbauer Center

3:15pm

An allocator model for std2
C++17 reserves the namespace std2 (and others) for future iterations of the standard library that may not be 100% compatible in design with the current namespace std. This session will suggest a much simpler allocator model that might be useful for that new library.

What is an allocator model, and why should we care? There are a variety of experiments and benchmarks around now demonstrating the benefits that a well-chosen allocator can bring to performance-sensitive code. We would like to bring those benefits to any new standard library, but without the complexity that plagues the specification of allocators in the current standard library. An allocator model is a set of rules for writing and supplying allocators to typed and objects, and the set of rules those types should follow when using a custom allocator. Following the principle that you should not pay for what you do not use, we will look into creating a model with minimal impact on code and complexity on users — in fact we will demonstrate (in theory) a model that will typically involve writing no code for users to support custom allocators in their type, and a runtime cost that can be entirely eliminated in programs that never choose a custom allocator!

This presentation is a thought experiment in a possible future direction, and still a year or so away from becoming a proposal for standardization — in particular it will rely on creating a new language feature that we should demonstrate in a practical compiler. It offers a vision of a possible future for the language, and some of the problems that we would like to solve.

Speakers
avatar for Alisdair Meredith

Alisdair Meredith

Bloomberg LP
Alisdair Meredith is a software developer at BloombergLP in New York, and the C++ Standard Committee Library Working Group chair. | | He has been an active member of the C++ committee for just over a decade, and by a lucky co-incidence his first meeting was the kick-off meeting... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #2 Meydenbauer Center

3:15pm

Deconstructing the OS: the Devil’s In the Side Effects
IncludeOS is a library operating system, where your C++ application pulls in exactly what it needs and turns it into a bootable binary. But once you have your standalone program with standard libraries, what do you really need from an operating system? In this talk we’ll show you some exciting developments in unikernel OS- and hypervisor design, ranging from a single-function do-it-all hardware interface for everything needed to run a web server, to a full on object-oriented ecosystem giving your C++ application total control over everything from devices, drivers and plugins, to every protocol in an internet enabled host. We’re running a full IP stack on platforms ranging from full blown server hardware to inside a single unit test in userspace and we still want more. We’ll discuss how minimal can be combined with maximal - giving you lots of modern abstractions while keeping the final binary as lean and mean as possible.

Speakers
avatar for Alfred Bratterud

Alfred Bratterud

CTO, IncludeOS
Alfred Bratterud is the creator of IncludeOS, the C++ unikernel. The work on IncludeOS started as a PhD research project but has since evolved into a full time venture for the IncludeOS developer team. Alfred holds BSc and MSc in computer science from the University of Oslo, wi... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #5 Meydenbauer Center

3:15pm

C++ Development with Visual Studio Code
Free, open-source and runs everywhere.

If you’re looking for a fast and lightweight code editor, Visual Studio Code has you covered. Come get an overview of Visual Studio Code along with the C++ extension that enables editing, building, and debugging your C++ code across Windows, Mac, and Linux.

Speakers
avatar for Rong Lu

Rong Lu

Senior Program Manager, Microsoft


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #7 Meydenbauer Center

3:15pm

What's New and Upcoming in Visual Studio 2017 Updates
Visual Studio 2017 was released this year and brings all sort of new functionality for C++ developers on any platform, not just Windows. In this talk, we'll cover many of the new features of the latest update of Visual Studio 2017 and give you a preview of new features coming in a major update later in 2017 that we've never shared before since you came to visit our hometown! We'll cover the ongoing evolution of our compiler and libraries, giving you an update on our conformance work as well as performance, and build throughput. We'll talk about the new enhancements to our Linux targeting. We'll talk about brand new unit testing capabilities for major test frameworks. We'll talk about improved support for CMake and our Open Folder experience for getting full Visual Studio IDE support for code that doesn't have a project or solution file. We'll also walk you through some cool new productivity and debugger features.

Speakers
avatar for Steve Carroll

Steve Carroll

Visual C++ Development Manager, Microsoft Corporation
Steve Carroll is the dev manager for the Visual C++ team and previously the dev manager for the Visual Studio debuggers and profilers.
avatar for Daniel Moth

Daniel Moth

Group Program Manager, Microsoft
Visual Studio


Monday September 25, 2017 3:15pm - 4:15pm
Meydenbauer TBA #4 Meydenbauer Center

4:45pm

From security to performance to GPU programming: exploring modern allocators
Want to make fast linked lists? Want to store sensitive data in memory? Want to place std::unordered_map in thread-local memory? Shared memory? How about GPU memory? You can do that in today’s C++ with allocators, the secret components of every STL container. Allocators went through a quiet revolution in C++11 and a major expansion in C++17. What did that give us? We'll look at the allocators available today in C++17, boost, TBB, and other popular libraries, and demonstrate some of the amazing things that can be achieved by taking the step beyond the stack and the heap.
This talk is not about allocator implementation, but is a showcase of the things that can be done with off-the-shelf allocators available now and with C++17.

Speakers
avatar for Sergey Zubkov

Sergey Zubkov

Morgan Stanley
Sergey is a former biochemistry researcher and OS developer, who now works in finance and spends his free time editing cppreference.com and helping out with the C++ Core Guidelines.


Monday September 25, 2017 4:45pm - 5:15pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

Building Better Worlds: Developing a Procedural City Tool for Alien: Covenant
When MPC was asked to create a massive CG city for the film Alien: Covenant, they looked to leverage procedural generation as a means for iterating on the overall shape and structure of the city, in place of a prohibitively large team of environment artists. After evaluating all the practical third party options, it was ultimately decided that the best option was to build a custom tool to procedurally assist artists' city-building skills. This allowed for rapid iteration on the overall look of the city by striking a balance between manual and procedural techniques.

The core algorithms were written in C++ for speed. The user interface was written in Python to accommodate quick feature changes, and a dash of Fabric Engine's KL helped with model import and rendering. This multi-language approach allowed the consistent application of the "best tool for the job" rule, which is a common pattern at MPC, allowing flexible teams with experts in a variety of skillsets.

This talk will detail the history and development of MPC's city building tool, "Machi". Alan Bucior, Lead Developer of Machi, reviews the algorithms for city layout and building placement, discusses how to implement algorithms in an artist-driven manner, and shares various insights gleaned through the development process and discussion with stakeholders.

Speakers
avatar for Alan Bucior

Alan Bucior

Lead Software Developer, MPC Film
Alan Bucior is a lead software developer at MPC, with over 20 years of experience developing software in the entertainment industry.


Monday September 25, 2017 4:45pm - 5:15pm
Meydenbauer TBA #7 Meydenbauer Center

4:45pm

Migrating a C++03 library to C++11 case study: Wt 4
In this talk, we will describe the effort of migrating the API of a reasonably large open source library to C++11. During the migration we wanted to benefit from as many new C++ features as possible, while preserving the semantics and features of the library. We will present various trade-offs in choosing a smart pointer strategy that was compatible with the existing object ownership model. The signal/slot mechanism, formerly based on boost.signals, was simplified and replaced by an implementation relying on lambdas, std::function and std::bind. Many smaller helper classes such as Boost.Any, Boost.Date_Time, and others were replaced by their standard counterparts.

The minimum requirements of Wt 4 are C++11, but we will describe how C++14/17 are used if the compiler supports them.

The main benefit of this transition is that the Wt API became more self-explaining, compilation times have been reduced, run-time performance improved, and the library's user requires less knowledge of boost. We will also discuss secondary consequences of the transition, such as simpler stack traces and the impact on compiler errors.

Wt is an open source widget-based web GUI library, first released in 2006. Before C++11 came around, Wt could be considered to be written in a modern style C++, relying as much as possible on the standard library and using boost libraries for missing C++ features. Wt 4 is the next major release of the library, fully embracing C++11.

Wt 4 is currently available at github, as a branch of our wt repository: https://github.com/emweb/wt/tree/wt4

Speakers
avatar for Roel Standaert

Roel Standaert

Emweb
Roel is a software developer at Emweb, the company that markets Wt, the C++ web toolkit. Roel holds a Master's degree in computer science from the University of Leuven.


Monday September 25, 2017 4:45pm - 5:15pm
Meydenbauer TBA #6 Meydenbauer Center

4:45pm

Enhanced Support for Value Semantics in C++17
Value semantics has been promoted in the C++ community for a long time, for reasons such as referential transparency, avoidance of memory management issues, and even efficiency in some cases. Move semantics in C++11 was a big step in language-level support for value semantics. In this talk, we’ll cover steps taken in C++17 for enhanced library-support for value semantics. Specifically, we’ll focus on `std::optional`, `std::variant`, and `std::any`.

We’ll discuss what they are, their motivating use cases, and most importantly, identify existing patterns that can be improved by replacing it with one of these utilities. We’ll also cover some of the details such as: `std::monostate`, `std::variant`’s `valueless_by_exception` state, subtle difference in behavior between `std::optional<T>` and `std::variant<std::monostate, T>`, etc.

The goal of the talk is to inform you of new library features in C++17, and to convince you of their usefulness and ultimately to add them to your toolbox.

Speakers
avatar for Michael Park

Michael Park

Software Engineer, Mesosphere
I’m a committer for the Apache Mesos project, and work as a Distributed Systems Engineer at Mesosphere. Within the realm of computer science, I’m very much intrigued by language design, compiler construction, and distributed systems. I’m also an active member of the ISO C... Read More →


Monday September 25, 2017 4:45pm - 5:45pm
Meydenbauer TBA #1 Meydenbauer Center

4:45pm

C++ atomics, from basic to advanced - what do they do and what do they really do?
C++11 introduced atomic operations. They allowed C++ programmers to express a lot of control over how memory is used in concurrent programs and made portable lock-free concurrency possible. They also allowed programmers to ask a lot of questions about how memory is used in concurrent programs and made a lot of subtle bugs possible.

This talk analyzes C++ atomic features from two distinct points of view: what do they allow the programmer to express? what do they really do? The programmer always has two audiences: the people who will read the code, and the compilers and machines which will execute it. This distinction is, unfortunately, often missed. For lock-free programming, the difference between the two viewpoints is of particular importance: every time an explicit atomic operation is present, the programmer is saying to the reader of the program "pay attention, something very unusual is going on here." Do we have the tools in the language to precisely describe what is going on and in what way it is unusual? At the same time, the programmer is saying to the compiler and the hardware "this needs to be done exactly as I say, and with maximum efficiency since I went to all this trouble."

This talk starts from the basics, inasmuch as this term can be applied to lock-free programming. We then explore how the C++ lock-free constructs are used to express programmer's intent clearly (and when they get in the way of clarity). Of course, there will be code to look at and to be confused by. At the same time, we never lose track of the fact that the atomics are one of the last resorts of efficiency, and the question of what happens in hardware and how fast does it happen is of paramount importance. Of course, the first rule of performance — "never guess about performance!" — applies, and any claim about speed must be supported by benchmarks.

If you never used C++ atomics but want to learn, this is the talk for you. If you think you know C++ atomics but are unclear on few details, come to fill these few gaps in your knowledge. If you really do know C++ atomics, come to feel good (or to be surprised, and then feel even better).

Speakers
avatar for Fedor Pikus

Fedor Pikus

Chief Scientist, Mentor Graphics - Siemens business
Fedor G Pikus is a Chief Engineering Scientist in the Design to Silicon division of Mentor Graphics Corp. His earlier positions included a Senior Software Engineer at Google and a Chief Software Architect for Calibre PERC, LVS, DFM at Mentor Graphics. He joined Mentor Graphics in... Read More →


Monday September 25, 2017 4:45pm - 5:45pm
Meydenbauer TBA #3 Meydenbauer Center

4:45pm

Esoteric Data Structures and Where to Find Them
We already have array, vector, and unordered_map, what other data structures could we possibly need?

As it turns out, there are a lot of them and they come from all areas of software! Curious to learn the latest method of representing a pathfinding search space in detailed 3D environments? Does efficiently detecting if a website could be malicious sound like an interesting problem to you? Perhaps understanding how AAA games store and track their entities so efficiently is more your speed?

All these things and more can be yours in exchange for just one hour of your time! Using that hour we will delve into some of the unique challenges faced by C++ developers in a variety of domains, and learn the inner workings of the creative solutions devised to solve them.

Speakers
avatar for Allan Deutsch

Allan Deutsch

Student, DigiPen Institute of Technology
Allan Deutsch is a BSCS student at DigiPen Institute of Technology. | He has a passion for performance, an interest perfectly paired to C++ and game development. Allan completed a software engineering internship at Microsoft in 2016 and will be returning as a program manager in... Read More →


Monday September 25, 2017 4:45pm - 5:45pm
Meydenbauer TBA #2 Meydenbauer Center

4:45pm

Faster Delivery of Large C/C++ Projects with Conan Package Manager and Efficient Continuous Integration
Dependency information together with the smart management of binaries and binary compatibility of Conan package manager can be used to implement a modularized, fast and efficient Continuous Integration (CI) process for large C and C++ projects. This CI system knows what needs to be rebuilt, what can be built in parallel, and how to transparently manage build dependencies as testing frameworks or toolchains (such as cross-compilation to Android).

This talk will present a CI system, implemented for Jenkins (but which could be implemented in other CI systems too), that using the dependency graph provided by the package manager, is able to trigger dependent packages' build jobs, and only those transitively affected by the change, in the correct build order. Furthermore, the build jobs are arranged in concurrency levels, by the degree/ordering in the graph, but also for different configurations, so optimal build parallelism can be achieved. Also such dependent packages can define custom rules to decide to build themselves or not, depending on configuration or versioning criteria. Everything will be fully demonstrated in practical examples.

We will also present advanced CI techniques, such as how to create packages for tools, like testing frameworks, to lately inject them as build-requirements to other libraries. Moreover, the process can also automate the installation and transparent usage of complete toolchains, like cross compiling C/C++ to Android with the Android NDK toolchain, to achieve a process that is convenient for developers and highly repeatable.

Speakers
LM

Luis Martinez de Bartolome

Luis is a full stack software engineer with more than 13 years of experience. He has spent the last 5 years mitigating the pains of C/C++ development flows & dependency management. Co-founder of Conan and a proudly Frog
avatar for Diego Rodriguez-Losada Gonzalez

Diego Rodriguez-Losada Gonzalez

SW Engineer, JFrog
Diego's passions are robotics and SW engineering and development. He has developed many years in C and C++ in the Industrial, Robotics and AI fields. Diego was also a University (tenure track) professor and robotics researcher for 8 years, till 2012, when he quit academia to try... Read More →


Monday September 25, 2017 4:45pm - 5:45pm
Meydenbauer TBA #4 Meydenbauer Center

5:20pm

folly::Function: A Non-copyable Alternative to std::function
We have often found it limiting that std::function cannot store callable objects if they are not copyable, so we developed and open-sourced folly::Function, a function wrapper that can store move-only callable objects. This presentation outlines the design decisions behind folly::Function and illustrates their consequences and our experiences after 18 months of wide production use at Facebook.

We find folly::Function is more appropriate than std::function for typical use cases, such as storing callback functions and submitting tasks for asynchronous execution. Other features of folly::Function include that it is noexcept-movable, and it avoids some known issues regarding const-correctness in std::function, which allows to invoke non-const operations on a const reference. Instead, folly::Function lets you declare whether a callable may or may not mutate its state (e.g. folly::Function<void() const>).

Speakers
avatar for Sven Over

Sven Over

Software Engineer, Facebook
Sven completed a PhD in astro-particle physics before he turned full time software engineer. He worked on C++ data services at Last.fm, and is now at Facebook London.


Monday September 25, 2017 5:20pm - 5:50pm
Meydenbauer TBA #6 Meydenbauer Center

5:20pm

Just Enough x86 Assembly to Be Dangerous
This tutorial is an introduction to x86 assembly language aimed at C++ programmers of all levels who are interested in what the compiler does with their source code.

C++ is a programming language that cares about performance. As with any technology, a deep understanding of C++ is helped by knowledge of the layer below, and this means knowledge of assembly language. Knowing what the compiler does with your source code and the limitations under which it operates can inform how you design and write your C++.

We learn how to generate, inspect and interpret the assembly language for your C++ functions and programs. We take a short tour of common assembly instructions and constructs, and discover why extreme caution should be exercised if we are trying to infer performance characteristics from a simple inspection of assembly code.

Starting with a simple `operator+` for a user-defined class, we take a look at how interface and implementation choices affect the generated assembly code and observe the effect of copy elisions and related optimizations that compilers commonly perform.

Speakers
CB

Charles Bailey

Software Engineer, Bloomberg LP
Charles Bailey is a software developer at Bloomberg LP. He works in Developer Experience Engineering London, where he consults and advises on all aspects of software development. His previous experience in software development has included roles in many areas, including business... Read More →


Monday September 25, 2017 5:20pm - 5:50pm
Meydenbauer TBA #5 Meydenbauer Center

5:20pm

Fuzz or lose: why and how to make fuzzing a standard practice for C++
Fuzzing is a family of testing techniques in which test inputs are generated semi-randomly. The memory unsafety of C++ has made fuzzing a popular tool among security researchers. Fuzzing also helps with stability, performance, and equivalence testing; and it’s a great addition to everyone’s CI.

Our team has launched OSS-Fuzz, the Google's continuous fuzzing service for open source software, and a similar service for our internal C++ developers. Over 1000 C++ APIs are being fuzzed automatically 24/7, and thousands of bugs have been found and fixed.

Now we want to share this experience with the wider C++ community and make fuzzing a part of everyone’s toolbox, alongside unit tests. We will demonstrate how you can fuzz your C++ library with minimal effort, discuss fuzzing of highly structured inputs, and speculate on potential fuzzing-related improvements to C++.

Speakers
avatar for Kostya Serebryany

Kostya Serebryany

Software Engineer, Google
Konstantin (Kostya) Serebryany is a Software Engineer at Google. His team develops and deploys dynamic testing tools, such as AddressSanitizer and ThreadSanitizer. Prior to joining Google in 2007, Konstantin spent 4 years at Elbrus/MCST working for Sun compiler lab and then 3 years at Intel Compiler Lab. Konstantin holds a PhD from mesi.ru and a Master from msu.ru. Twitter handle... Read More →


Monday September 25, 2017 5:20pm - 5:50pm
Meydenbauer TBA #7 Meydenbauer Center

8:30pm

Open Content Sessions: TBA
Monday September 25, 2017 8:30pm - 10:00pm
Meydenbauer TBA #8 Meydenbauer Center

8:30pm

Grill the Committee
What would you like to know about the C++ standard?

Join us for a panel discussion with the leaders of the C++ standards committee where the audience asks the questions.

Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, CppCon
Jon Kalb is a freelance C++ instructor and chairs CppCon, C++ Now, and the Boost Steering Committee. He has been programming in C++ for over 25 years and has written C++ for Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun, and Yahoo!

Monday September 25, 2017 8:30pm - 10:00pm
Meydenbauer TBA #1 Meydenbauer Center
 
Tuesday, September 26
 

8:00am

Open Content Sessions: TBA
Tuesday September 26, 2017 8:00am - 8:45am
Meydenbauer TBA #8 Meydenbauer Center

9:00am

C++17 ParallelSTL: A Standardization Experience Report for CPU and GPU on SYCL
The most significant improvement in C++17 will be Parallel Algorithms in the STL. But it is meant only for CPUs, as C++ does not define heterogeneous devices yet (though SG14 is working on that). How would you like to learn how to run Parallel STL algorithms on both CPU and GPU?

Parallel STL is an implementation of the Technical Specification for C++ Extensions for Parallelism for both CPU and GPU with SYCL Heterogeneous C++ language. This technical specification describes a set of requirements for implementations of an interface that C++ programs may use to invoke algorithms with parallel execution. In practice, this specification allows users to specify execution policies to traditional STL algorithms which will enable the execution of those algorithms in parallel. The various policies can specify different kinds of parallel execution. For example,

std::vector<int> v = ...
// Traditional sequential sort:
std::sort(vec.begin(), vec.end());
// Explicit sequential sort:
std::sort(seq, vec.begin(), vec.end());
// Explicit parallel sort if possible:
std::sort(par, vec.begin(), vec.end());
// Explicit parallel and vectorized sort if possible:
std::sort(par_unseq, vec.begin(), vec.end());

So how does a Technical Specification become a Standard? As it turns out, in this case, not without harrowing twists and turns worthy of an Agatha Christie novel. This talk will also be the story behind the C++17 standardization process of the Parallelism TS and why we made so many changes. While it started life as a Technical Specification (TS), did you know all the changes we made to it before we added it to C++17 and why? For example, we changed the names of the execution policies, removed exception handling support, disabled dynamic execution, unified some of the numeric algorithm names, allowed copying arguments to function objects given to parallel algorithms, and addressed complexity and iterator concerns as we lived through it as a member of SG1 and the editor of several TSes.

The implementation is available here: https://github.com/KhronosGroup/SyclParallelSTL/blob/master/README.md

Speakers
avatar for Gordon  Brown

Gordon Brown

Staff Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a senior software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →
RR

Ruyman Reyes

Ruyman Reyes Ruyman Reyes works at Codeplay Software as Senior Software Engineer for ComputeCpp, Codeplay's SYCL implementation. He contributes to the C++ and SYCL specifications and leads ComputeCpp (Codeplay's SYCL implementation) and coordinates the efforts in the Khronos Para... Read More →
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #7 Meydenbauer Center

9:00am

Function default arguments: Slingshot or Shotgun?
On the surface, function parameter default arguments seem like a very simple feature of the C++ language. This session explores how (not) true that is. If you like the dark corners of C++, you will come away with a new appreciation for this innocent looking syntactic sugar. Otherwise, you will have at least informed yourself on how not to blow your foot off with what looks like a slingshot.

Speakers
avatar for Michael Price

Michael Price

Senior Software Engineer, Synopsys, Inc.
Michael Price has developed and taught C++ for more than a decade and has been an active participant in WG21 since 2014, allocating most of his committee-time to EWG and the Reflection Study Group. He professes interest in making C++ "safer" to use through language and library de... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #4 Meydenbauer Center

9:00am

Mocking Frameworks considered harmful
Software development without test automation can no longer be considered professional.
However, you might have existing code bases or want to rely on external libraries that may make writing effective and fast unit tests hard or even near to impossible. A typical work-around for these situations is to introduce test stubs for such external dependencies to make your code testable.

Some propose to use mocking frameworks, such as GoogleMock, together with unit testing frameworks to ease the specification of the replacement objects. These mocking frameworks often come with their own domain-specific language (DSL) to describe the behavior and expected usage of the mock object. In addition to a learning curve, the DSLs often do not help much, when things do not work. The current lack of standardized reflection in addition requires macro trickery making fixing problems even harder. A second issue, is that existing code often must be prepared to suite the mocking frameworks interception mechanism to allow to inject the mock objects. Last but not least test-driven-development (TDD) together with the use of a mocking framework can lead to high coupling, that TDD usually strives to reduce.


This talk demonstrates "classical" mocking frameworks, shows the problems and demonstrates how Cevelop's Mockator approach can help refactoring existing code to get it under test and how a very simple plain C++ solution can be used instead of complicated mocking framework for unit tests with dependent code replaced by test stubs or mocks.

Outline:
* Introduction
** Fowler's Whisky Warehouse - classic example for Mocking Frameworks in C++
* Feathers' Seams: Dependency Injection
** Refactoring to Object Seams
** Refactoring to Template Seams
** Linker Seams
** Preprocessor Seams as a last resort
* Problem with "classic" Mocking Frameworks
* Simpler Mocking with Mockator
* Why and when you should not Mock

With a longer slot, more of the underlying test automation theory, based on xunitpatterns.com can be given.

Speakers
avatar for Peter Sommerlad

Peter Sommerlad

Professor, IFS Institute for Software
Prof. Peter Sommerlad is director of IFS Institute for Software at FHO HSR Rapperswil where he inspired the C++ IDE Cevelop. Peter is co-author of the books POSA Vol.1 and Security Patterns. His goal is to make software simpler by Decremental Development: Refactoring software dow... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #5 Meydenbauer Center

9:00am

Design Patterns for Low-Level Real-Time Rendering
In recent years, the GPU graphics community has seen the introduction of many new GPU programming APIs like Khronos' Vulkan, Microsoft's Direct3D 12, and Apple's Metal. These APIs present much more control of GPU hardware, but bring with them a great increase in complexity. We need to rethink the way we do graphics programming to take advantage of new features, while also keeping complexity under control.

This talk presents solutions to recurring programming problems with these new GPU graphics APIs. These solutions are intended to simplify the complexity of the API by an order of magnitude, while simultaneously improving overall performance. This talk aims to discuss some key techniques for other developers to create their own GPU rendering engine.

Topics covered include using a ring buffer to stream data and descriptors from CPU to GPU, scheduling GPU memory and work from the CPU, designing a multi-pass real-time GPU renderer, and using fork/join parallelism to increase the performance of the CPU code that submits GPU work.

Speakers
avatar for Nicolas Guillemot

Nicolas Guillemot

MSc Student, University of Victoria
Nicolas is a master's student at the University of Victoria, where he searches for solutions to the game industry's real-time rendering problems at the intersection of software and hardware. In the past, Nicolas has worked at Electronic Arts, and in Intel's Visual and Parallel Co... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #3 Meydenbauer Center

9:00am

Cross-Platform Apps with Dropbox’s Djinni: In-Production Architecture Examples
Djinni is a tool developed by Dropbox for cross-platform C++ development. This session will give details on in-production architecture of several common app features including Google Analytics, SQLite Databases, and platform-specific features such as in-app purchases and motion detection.

This session will also highlight the positives and negatives of utilizing a pure C++ library as opposed to 3rd party tools such as PhoneGap, React Native, or Xamarin.

Speakers
SS

Stephen Spann

Owner/Developer, demic apps LLC


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #2 Meydenbauer Center

9:00am

The Nightmare of Move Semantics for Trivial Classes
Assume, we implement a very simple class having just multiple string members. Even ordinary application programmer prefer to make it simple and fast.

You think you know how to do it? Well beware! It can become a lot harder than you initially might assume.

So, let’s look at a trivial class with multiple string members and use live coding to see the effect using different implementation approaches (using constructors passing by value, by reference, by perfect forwarding, or doing more sophisticated tricks).

Sooner than later we will fall into the deep darkness of universal/forwarding references, enable_if, type traits, and concepts.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries. He is well known in the programming community because he not only speaks and writes with authority (being the (co-)author of the world-wide best sellers The C++ Standard Library... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #6 Meydenbauer Center

9:00am

Everything You Ever Wanted to Know about DLLs
If you build software for Windows, you use DLLs, and it’s likely that you may build DLLs of your own. DLLs are the primary mechanism for packaging and encapsulating code on the Windows platform. But have you ever stopped to think about how DLLs work? What goes into a DLL when you build it, what happens when you link your program with a DLL, or how do DLLs get located and loaded at runtime? Many of us build and use DLLs without fully understanding them. In this session, we’ll give an in-depth introduction to DLLs and how they work.

We’ll begin by looking at what’s in a DLL—the kinds of things a DLL can contain and the basic data structures that are used—and the benefits and drawbacks of packaging code in a DLL. We’ll look at how DLLs are loaded, including the details of how the loader locates DLLs and maps them into the process; how dependencies are resolved among DLLs; and DLL lifetime and how DLLs get unloaded. We’ll also look at how DLLs get built, including what makes DLLs “special,” what goes into an import library, and how the linker uses import libraries. Finally, we’ll look at several other miscellaneous topics, including how DLLs interact with threads and thread-local storage, and mechanisms for solving or mitigating the dreaded “DLL hell.”

Speakers
avatar for James McNellis

James McNellis

Senior Software Engineer, Microsoft
James is a senior engineer on the Windows Debugger team at Microsoft, where he works on the development of new and innovative debugging technologies. Prior to joining the Debuggers team in 2016, he was a member of the Visual C++ team, where he was responsible for the Microsoft C... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Meydenbauer TBA #1 Meydenbauer Center

10:30am

C++ as a "Live at Head" Language
Engineering is programming integrated over time. That is to say, as much as it can be difficult to get your code to build and run correctly, it is manifestly harder to keep it working in the face of changing assumptions and requirements. This is true no matter the scale, from a small program to a shared library. Only two solutions have been shown to be theoretically sound: never change or provide no compatibility guarantees. What if there were a third option? What if we took the question of maintenance out of the realm of theory and moved it to practice? This talk discusses the approach we've used at Google and how that intersects with other languages, package management, API and ABI compatibility, and a host of other software engineering practices. The particulars of C++ as a language and an ecosystem make it well positioned for a different approach: Live at Head.

Speakers
avatar for Titus Winters

Titus Winters

C++ Codebase Cultivator, Google
Titus Winters has spent the past 6 years working on Google's core C++ libraries. He's particularly interested in issues of large scale software engineer and codebase maintenance: how do we keep a codebase of over 100M lines of code consistent and flexible for the next decade? Alo... Read More →


Tuesday September 26, 2017 10:30am - 12:00pm
Meydenbauer TBA #8 Meydenbauer Center

12:30pm

Open Content Sessions: TBA
Tuesday September 26, 2017 12:30pm - 1:30pm
Meydenbauer TBA #8 Meydenbauer Center

2:00pm

Practical C++17
C++17 adds many new features: structured bindings, deduction guides, if-init expressions, fold expressions, if constexpr, and enhanced constexpr support in the standard library. Each of these features are interesting, but what will be their cumulative effect on real code? We'll explore how each feature may (or may not) help in real code for enhanced readability, compile time performance and runtime performance.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #3 Meydenbauer Center

2:00pm

Multithreading is the answer. What is the question? (part 1 of 2)
** Part I

This session will cover the various kinds of problems which can be solved by using multithreaded concepts or techniques. I will discuss the challenges involved with designing and implementing a multithreaded application.

I will provide a brief introduction to multithreading terminology and an overview of the libGuarded library.

The discussion will include C++11 multithreading, C++17 concurrency TS, and new abstractions wecan build on top of these features. Basic familiarity with the C++11 threading library will be helpful but is not required.

** Part II

The main focus of this talk will be about the importance of lockless containers and RCU technology. The value of this approach will be explained and why it was added to libGuarded. I will also cover recent changes made to the RCU containers.

I will explain the importance of libGuarded and how it was used in the CsSignal library to prevent deadlocks.

Either basic familiarity with multithreading or attendance in Part I of this talk is suggested.

Speakers
AS

Ansel Sermersheim

Co Founder, CopperSpice
I have been working as a programmer for nearly twenty years. My degree is in Computer Science from Cal Poly San Luis  Obispo. | | I have transitioned to independent consulting and I am currently working on a project for RealtyShares in San Francisco. | | Co-founder of CopperSpice, a C++ GUI library. Co-founder of DoxyPress, a C++ application for generating documentation. Developer of the open source libraries: libGuarded, CsSignal and CsString. | I have programmed in C++, C, Lisp, Java, and Perl, with extensive knowledge in TCP/IP and mutilthreaded design. I am... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #1 Meydenbauer Center

2:00pm

Local ('Arena') Memory Allocators (part 1 of 2)
Are allocators worth the trouble? What situations merit their use? How are they applied effectually? What’s the performance impact? This practical talk by large scale C++ expert Dr. John Lakos demonstrates that having allocators in your tool box may lead to orders of magnitude speed improvements.

The runtime implications of the physical location of allocated memory is often overlooked, even in the most performance critical code. In this talk, we will examine how the performance of systems can degrade when using `new`/`delete` and `std::allocator` . We will contrast these global allocators, which allocate memory globally for a system, with local allocators that each allocate memory for a proper subset of objects in the system. We will also demonstrate how local allocators can reduce or entirely prevent the degradation seen in systems that rely on the global allocator. Six dimensions – fragmentability, allocation density, variation, locality, utilization, and contention – will be introduced to depict the potential for performance penalties and aid the listener in determining which local allocator will offer the best performance in their subsystems. Evidence will be presented that identifying these dimensions, and selecting a local allocator based upon them, can lead to *order-of-magnitude* reductions in run time compared to systems using a global allocator.

Speakers
avatar for John Lakos

John Lakos

Software Engineering Manager, Bloomberg
John Lakos, author of Large-Scale C++ Software Design, serves at Bloomberg LP in New York City as a senior architect and mentor for C++ Software Development world-wide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working Group. Previously, Dr. Lakos directed the design and development of infrastructure libraries for proprietary analytic financial applications at Bear Stearns. For 12 years prior, Dr. Lakos developed large frameworks and advanced ICCAD applications at Mentor Graphics, for which he holds multiple software patents. His academic credentials include a Ph.D. in Computer Science ('97) and an Sc.D. in Electrical Engineering ('89) from Columbia University. Dr. Lakos received his undergraduate degrees from MIT in Mathematics ('82) and Computer Science ('81). His next book, entitled Large-Scale... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #2 Meydenbauer Center

2:00pm

Postmodern C++
The term "Modern C++" can be traced back to Andrei Alexandrescu's "Modern C++ Design", published in February 2001. Much has changed since then. Alexandrescu is off Dabbling in various things, Scott Meyers has retired; C++11 changed the landscape, then C++14, and now we are at C++17, with more on the way.

Clearly, we are now in the Postmodern C++ era.

So let's apply postmodernism to programming. YOU WON'T BELIEVE WHAT HAPPENS NEXT:
- How to concentrate on one section of a programme at a time, and test in isolation. QA HATES HIM.
- post-modern introspection?. IT WILL SHOCK YOU.
- you'll NEVER BELIEVE what a postmodern smart ptr LOOKS LIKE!

Although this is a lighthearted talk, it also aims to be insightful.
In fact, the goal is nothing less than to change the way you think about programming.

Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Christie Digital
Tony has been coding for well over 25 years, and maybe coding well for some of that. From pixel++, to UI, to threading, to anything in between. Previously at Inscriber, Adobe, BlackBerry, he now enables Painting with Light at Christie. He is on the C++ Committee. He is a Ninja an... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #4 Meydenbauer Center

2:00pm

MPark.Patterns: Pattern Matching in C++
Pattern matching brings a declarative approach to destructuring and inspecting complex data types. It’s a very powerful abstraction provided by many programming languages such as Haskell and OCaml, and more recently, Rust, Scala, and Swift.

We’ll see a glimpse of pattern matching in C++17 and their current limitations through features such as structured bindings, `apply`, and `visit`. We’ll then jump into MPark.Patterns, an experimental pattern matching library for C++. The following is an example of `fizzbuzz` written with the library:

void fizzbuzz() {
   for (int i = 1; i <= 100; ++i) {
    using namespace mpark::patterns;
    match(i % 3, i % 5)(
      pattern(0, 0) = [] { std::cout << "fizzbuzz\n"; },
      pattern(0, _) = [] { std::cout << "fizz\n"; },
      pattern(_, 0) = [] { std::cout << "buzz\n"; },
      pattern(_, _) = [i] { std::cout << i << '\n'; });
  }
}

We’ll see many more examples like this that lead to simpler, declarative code that focuses on the desired shape/state of the data, rather than a sequence of imperative code that tries to inspect the data in piecemeal.

The goal of the library, and the talk is to gain experience and exposure to pattern matching in order to potentially help guide the design of a language-based pattern matching mechanism.

Speakers
avatar for Michael Park

Michael Park

Software Engineer, Mesosphere
I’m a committer for the Apache Mesos project, and work as a Distributed Systems Engineer at Mesosphere. Within the realm of computer science, I’m very much intrigued by language design, compiler construction, and distributed systems. I’m also an active member of the ISO C... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #7 Meydenbauer Center

2:00pm

dynamic_cast From Scratch
This session will introduce you to the C++ object model: the rules by which C++ class objects are translated into memory layouts. We'll quickly cover polymorphic class types and multiple and virtual inheritance. We'll discuss the anatomy of a virtual method call, the difference between `static_cast` and `reinterpret_cast`, and what's contained in a vtable besides function pointers. We'll see that the way `dynamic_cast` thinks about the class hierarchy is slightly different from the way we're used to drawing it; and that `dynamic_cast` is expensive enough that sometimes we can find cheaper ways to ask an object for its type! The climax will be a complete, bug-free, and fast implementation of C++'s built-in `dynamic_cast`, using our own hand-crafted artisanal run-time type information (RTTI).

Attendees will incidentally be exposed to several features of the modern C++ language, including type traits and the `final` qualifier.

This session will mostly be talking about the Itanium C++ ABI, which is the standard on Linux and OS X systems. Mapping these concepts to the MSVC ABI will be left as an exercise for the reader of the project's GitHub repo: https://github.com/Quuxplusone/from-scratch/tree/master/dynamic-cast#dynamic_cast-from-scratch

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Core Engineering, Nominum
Arthur O'Dwyer worked for many years at Green Hills Software, making the world's most optimizing C and C++ compilers. Now he works at Nominum in San Francisco. Arthur is the showrunner of the Bay Area C++ meetup, which meets practically every week these days.


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #6 Meydenbauer Center

2:00pm

Using Modern CMake Patterns to Enforce a Good Modular Design
CMake is the build system chosen by most open-source C++ projects. While it is fully capable of helping you enforce a good modular design, those features are usually not well known or understood.

In this talk I will present modern CMake practices that will simplify your project build and help you design better C++ components with clear dependencies and build interfaces (the sum of compile flags required to use a given library).

We will first do a quick recap of the theory behind modular design, most of it coming from John Lakos' work on Large Scale C++ Software Development. Then we will see a few of the legacy CMake patterns that can be found in a lot of open source projects and explain their shortcomings. We will learn how to create a clean C++ library using modern CMake practices and depend on it in others modules. Finally, we will explore the options available to export the build interfaces for use by external projects. In this last part a few external tools will be discussed such as pkg-config and Conan.

Speakers
avatar for Mathieu Ropert

Mathieu Ropert

Senior Developer, Murex
Mathieu is a Senior Developer at Murex where he works as a C++ expert and animates internal workshops & events. A long term open-source enthusiast, he tries to make C++ more portable across platforms. He is also co-host of the Paris C++ Meetup.


Tuesday September 26, 2017 2:00pm - 3:00pm
Meydenbauer TBA #5 Meydenbauer Center

3:15pm

Class Template Argument Deduction: A New Abstraction
C++17 is often quoted as “just a better C++14”, suggesting that nothing is new, nothing is changing the way we program. This talk presents class template argument deduction as a counterexample, a hidden gem in the new standard.

Saves typing? A replacement for the `make` functions? If that’s your frame, then you should come to this talk. The true power of class template argument deduction is underestimated. It’s a new point of abstraction but requiring creativity, insights, and understanding about the language details to manage.

This talk will start by introducing all matters about this feature to build up sufficient background knowledge, followed by teaching how to write deduction guides by examples, and finally explain how to build abstractions using the whole feature in a top-down approach, with patterns categorized.

Speakers
avatar for Zhihao Yuan

Zhihao Yuan

Research Engineer, DePaul University
Zhihao Yuan is a research developer at DePaul University. In the last several years, he participates in the C++ standardization due to personal interests, and most recently, contributed the deduction guide for std::array to C++17.


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #6 Meydenbauer Center

3:15pm

Multithreading is the answer. What is the question? (part 2 of 2)
** Part I

This session will cover the various kinds of problems which can be solved by using multithreaded concepts or techniques. I will discuss the challenges involved with designing and implementing a multithreaded application.

I will provide a brief introduction to multithreading terminology and an overview of the libGuarded library.

The discussion will include C++11 multithreading, C++17 concurrency TS, and new abstractions wecan build on top of these features. Basic familiarity with the C++11 threading library will be helpful but is not required.

** Part II

The main focus of this talk will be about the importance of lockless containers and RCU technology. The value of this approach will be explained and why it was added to libGuarded. I will also cover recent changes made to the RCU containers.

I will explain the importance of libGuarded and how it was used in the CsSignal library to prevent deadlocks.

Either basic familiarity with multithreading or attendance in Part I of this talk is suggested.

Speakers
AS

Ansel Sermersheim

Co Founder, CopperSpice
I have been working as a programmer for nearly twenty years. My degree is in Computer Science from Cal Poly San Luis  Obispo. | | I have transitioned to independent consulting and I am currently working on a project for RealtyShares in San Francisco. | | Co-founder of CopperSpice, a C++ GUI library. Co-founder of DoxyPress, a C++ application for generating documentation. Developer of the open source libraries: libGuarded, CsSignal and CsString. | I have programmed in C++, C, Lisp, Java, and Perl, with extensive knowledge in TCP/IP and mutilthreaded design. I am... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #1 Meydenbauer Center

3:15pm

Local ('Arena') Memory Allocators (part 2 of 2)
Are allocators worth the trouble? What situations merit their use? How are they applied effectually? What’s the performance impact? This practical talk by large scale C++ expert Dr. John Lakos demonstrates that having allocators in your tool box may lead to orders of magnitude speed improvements.

The runtime implications of the physical location of allocated memory is often overlooked, even in the most performance critical code. In this talk, we will examine how the performance of systems can degrade when using `new`/`delete` and `std::allocator` . We will contrast these global allocators, which allocate memory globally for a system, with local allocators that each allocate memory for a proper subset of objects in the system. We will also demonstrate how local allocators can reduce or entirely prevent the degradation seen in systems that rely on the global allocator. Six dimensions – fragmentability, allocation density, variation, locality, utilization, and contention – will be introduced to depict the potential for performance penalties and aid the listener in determining which local allocator will offer the best performance in their subsystems. Evidence will be presented that identifying these dimensions, and selecting a local allocator based upon them, can lead to *order-of-magnitude* reductions in run time compared to systems using a global allocator.

Speakers
avatar for John Lakos

John Lakos

Software Engineering Manager, Bloomberg
John Lakos, author of Large-Scale C++ Software Design, serves at Bloomberg LP in New York City as a senior architect and mentor for C++ Software Development world-wide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working Group. Previously, Dr. Lakos directed the design and development of infrastructure libraries for proprietary analytic financial applications at Bear Stearns. For 12 years prior, Dr. Lakos developed large frameworks and advanced ICCAD applications at Mentor Graphics, for which he holds multiple software patents. His academic credentials include a Ph.D. in Computer Science ('97) and an Sc.D. in Electrical Engineering ('89) from Columbia University. Dr. Lakos received his undergraduate degrees from MIT in Mathematics ('82) and Computer Science ('81). His next book, entitled Large-Scale... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #2 Meydenbauer Center

3:15pm

Designing A Feature That Doesn't Fit
C++ is a wonderful and expressive language, that gives programmers a lot of freedom even though it actively seeks to let programmers obtain the maximal performance from their hardware. It so happens that sometimes, operating systems can make it easy to do things that are absolutely not natural for a C++ program, but that some C++ programmers consider essential to their practice.

This talk will explore the problem of adding functionality to the language, more specifically to the standard threading library, where said functionality is not a natural fit for the C++ language specification. Expressed otherwise: how can we find ways to meet the needs of users without corrupting the language we all love?

This talk will be more interesting to you if you have met situations where you wanted to do something in "pure C++" but found you had to resort to operating system-specific features to meet your objectives. We will discuss the design space that has been explored for the problem under study, and will try to make emerge the strengths and weaknesses of the various alternatives.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke / Collège Lionel-Groulx
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 20 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #4 Meydenbauer Center

3:15pm

Using Functional Programming Patterns to build a clean and simple HTTP routing API
Web services are flourishing, and C++ has some great libraries (such as Boost/Asio + Beast or CppRestSdk) which we can use as the basis to build such services. Yet it is still relatively inconvenient to define HTTP routes in C++. Most approaches available in online tutorials are based on manual manipulation of regex or HTTP concepts.

In this talk, we will present the result of our work toward creating a clean HTTP routing library, usable on top of any HTTP transport layer library, which offers a terse and declarative syntax, composable routes, type-safety and a rich set of additional features such as generating sample routes or documentation.

We will discuss our initial investigations, and explain why we chose a functional-programming-based approach over reflection-based designs such as are common in the object-oriented world. You will learn about some design choices which allowed us to come closer to the “Don't Repeat Yourself” ideal: maximizing the services offered for the information provided by the client of the API.

Speakers
avatar for Jeremy Demeule

Jeremy Demeule

Principal Software Engineer, Murex
Jeremy Demeule is a Principal Software Engineer from Murex in Paris, France. He is working on data access subject (database, ORM, IMDG…) in Java and C++ and he is an active member of the C++ community at Murex. He was also present with a coworker the CDBC poster during the Cpp... Read More →
avatar for Quentin Duval

Quentin Duval

Senior Software Developer, Murex
Quentin Duval is a Senior Software Engineer from Murex, working at the Paris office in France. He is the leader of a team responsible for the life cycle management of trades inside the MX3 plattform. | | He is also a member of the C++ community of Practice of Murex, animate... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #3 Meydenbauer Center

3:15pm

Tools from the C++ eco-system to save a leg
C++ gives you enough rope to shoot your leg off. Readable (and thus easy to maintain, easy to support) and error-free code in C++ is often hard to achieve. And while modern C++ standards bring lots of fantastic opportunities and improvements to the language, sometimes they make the task of writing high quality code even harder. Or can’t we just cook them right? Can the tools help?

In this talk I’ll highlight the main trickiness of C++, including readability problems, some real-world issues, problems that grow out of C++ context-dependent parsing. I’ll then try to guide you in how to eliminate them using tools from the C++ eco-system. This will cover code styles and supportive tools, code generation snippets, code analysis (including CLion’s inspections and Data Flow Analysis, C++ Code Guidelines and clang-tidy checks), refactorings. I will also pay some attention to unit testing frameworks and dependency managers as tools that are essential for the high quality code development.

Speakers
AK

Anastasia Kazakova

Product Marketing Manager, JetBrains
A C/C++ fan since university, Anastasia has been creating real-time *nix-based systems and pushing them to production for 8 years. She has a passion for networking algorithms (especially congestion problems and network management protocols) and embedded programming, and believes... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

Concurrency, Parallelism and Coroutines
C++17 is adding parallel overloads of most of the Standard Library algorithms. There is a TS for Concurrency in C++ already published, and a TS for Coroutines in C++ and a second TS for Concurrency in C++ in the works.

What does all this mean for programmers? How are they all related? How do coroutines help with parallelism?

This session will attempt to answer these questions and more. We will look at the implementation of parallel algorithms, and how continuations, coroutines and work-stealing fit together. We will also look at how this meshes with the Grand Unified Executors Proposal, and how you will be able to take advantage of all this as an application developer.

Speakers
avatar for Anthony Williams

Anthony Williams

Just Software Solutions Ltd
Anthony Williams is the author of C++ Concurrency in Action.


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #1 Meydenbauer Center

4:45pm

Delegate this!
Designing a fast IP stack from scratch is hard. Using delegates made it all easier for IncludeOS, the open source library operating system written from scratch in modern C++. Our header-only delegates are just as fast as C-style function pointers, compatible with std::function, and allows any object to delegate work to stateful member functions without knowing anything about the class they belong to. We use delegates for everything from routing packets to creating REST endpoints, and most importantly to tie the whole IP stack together. In this talk we’ll show you how we use delegates in IncludeOS, discuss pitfalls and alternatives, and give you all you need to get started.

Speakers
avatar for Alfred Bratterud

Alfred Bratterud

CTO, IncludeOS
Alfred Bratterud is the creator of IncludeOS, the C++ unikernel. The work on IncludeOS started as a PhD research project but has since evolved into a full time venture for the IncludeOS developer team. Alfred holds BSc and MSc in computer science from the University of Oslo, wi... Read More →


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #6 Meydenbauer Center

4:45pm

Hands-On With Google's Common Libraries
An introduction to the design and compatibility goals for Google's common C++ libraries. In this talk I’ll summarize how this project interacts with and relates to the standard, discuss some important style and design features, and present the compatibility contract - not only how do these libraries work now, but how they will work over time. We’ll also do a tour of what is included, as well as what is slated for later inclusion.

Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #7 Meydenbauer Center

4:45pm

Recreational C++
C++ is a language full of curiosities, and entices the curious. This session will will walk through half a dozen little code explorations of ideas that might have been solved in 5 minutes, but piqued my curiosity to keep digging and see just how completely or thoroughly they might be solved, and what we can learn about the language and the way it holds together along the way. Fundamentally, it is about the joy of exploring code long after the problem has been solved, to find those satisfying solutions to problems that don't need solving!

There will not be much deep learning; instead, there will be numerous insights into corners of the language that are often (for good reason!) unexplored, that might help with the big picture when debugging some obscure bugs. In particular, constexpr and templates will be exercised, and some compiler limits may be tested. We will demonstrating code that will the the gamut of C++98 though to C++17, and even poke into experimental pending features such as concepts.

Speakers
avatar for Alisdair Meredith

Alisdair Meredith

Bloomberg LP
Alisdair Meredith is a software developer at BloombergLP in New York, and the C++ Standard Committee Library Working Group chair. | | He has been an active member of the C++ committee for just over a decade, and by a lucky co-incidence his first meeting was the kick-off meeting... Read More →


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #4 Meydenbauer Center

4:45pm

Agent based class design, C++ with a robot glue gun
Abstracting a set of functionalities into a class which provides a higher level interface often requires tough design decisions. Users who do not have the exact requirements for which the abstraction is optimized will suffer a syntactic or run time overhead as a result. Alexandrescu's famous "policy-based design" provides a mechanism to allow the user to extend and customize an existing abstraction in order to fine-tune its functionality for many different use cases. This is however limited to use cases where each policy more or less represents a compile time strategy pattern.

Alas, not everything is a strategy pattern. In this talk I will explore the viability of a more agent-pattern-like paradigm where each policy knows its requirements and publishes its capabilities. In this paradigm, glue code connecting any valid set of policies is automatically generated using template metaprogramming. This allows much more powerful customizations while maintaining static linkage.

Speakers
avatar for Odin Holmes

Odin Holmes

CEO/CTO, Auto-Intern GmbH
Odin Holmes has been programming bare metal embedded systems for 15+ years and as any honest nerd admits most of that time was spent debugging his stupid mistakes. With the advent of the 100x speed up of template metaprogramming provided by C++11 his current mission began: teach... Read More →


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

CNL: A Compositional Numeric Library
CNL is a numerics library born out of efforts to standardize fixed-point arithmetic.
It provides number types which increase precision, enforce correctness and maintain efficiency.
And by designing these types with composability in mind, the library aims to do for integers what the STL does for pointers.

This introductory talk will show potential users how they can benefit from using CNL in a wide variety of applications. Firstly, the individual components will be illustrated using straightforward examples. Then we'll see how these components slot together to produce powerful new types. Finally I'll detail the steps necessary to adapt existing types to work within the CNL framework.

Along the way, I hope to share some of the insights I've gained while learning about literal types including: why you shouldn't mess with `int` if you want zero-cost abstractions; how C++ is getting better at supporting new number types and my hopes for the forthcoming Numeric TS.

Speakers
avatar for John McFarlane

John McFarlane

SDE, A9.com
John McFarlane has used C++ for twenty years, specializing in simulation, AI and interactivity. He is a contributor to Study Groups 6 and 14 and is involved in standardizing fixed-point arithmetic.


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #2 Meydenbauer Center

4:45pm

ThinLTO: Building C++ Applications with Scalable Whole Program Optimization
Whole program optimization enables higher performance in C++ applications, because of the expanded scope for analysis and optimization. However, the memory and time required to optimize the entire program together as a single unit traditionally has made whole program optimization infeasible for complex and large C++ applications, such as those being built at Google. Additionally, traditional whole program optimization frameworks have not supported fast incremental builds. ThinLTO (Thin Link Time Optimization) is a new compilation model that was recently deployed in the LLVM compiler toolchain to enable scalable whole program optimization for these huge C++ applications, and additionally enables the fast incremental builds required for use in day-to-day development.

In this talk we’ll describe why whole program optimization is beneficial for C++ applications, how the ThinLTO compilation model enables scalable and incremental builds, and how ThinLTO can be integrated with distributed build systems for even faster whole program builds. Additionally, we’ll describe implications for C++ developers.

Speakers
avatar for Teresa Johnson

Teresa Johnson

Software Engineer, Google


Tuesday September 26, 2017 4:45pm - 5:45pm
Meydenbauer TBA #3 Meydenbauer Center

7:00pm

Boost Community Dinner
The Boost Community invites anyone interest to join. Registration is here: https://cppcon2017.eventbrite.com/

Tuesday September 26, 2017 7:00pm - 8:30pm
Meydenbauer TBA #8 Meydenbauer Center

8:30pm

Lightning Talks
Come for bite size talks you'll want more of!

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →

Tuesday September 26, 2017 8:30pm - 10:00pm
Meydenbauer TBA #1 Meydenbauer Center

8:30pm

Open Content Sessions: TBA
Tuesday September 26, 2017 8:30pm - 10:00pm
Meydenbauer TBA #8 Meydenbauer Center
 
Wednesday, September 27
 

8:00am

Open Content Sessions: TBA
Wednesday September 27, 2017 8:00am - 8:45am
Meydenbauer TBA #8 Meydenbauer Center

8:30am

ISO SG14 Working Meeting
Limited Capacity seats available

ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb chairs the ISO C++ committee and is the primary author or co-author of a number of Standard C++ features, including nullptr, enum class, parallel algorithms, C++17 structured bindings, and the in-progress unified <=> comparison operator.
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →

Wednesday September 27, 2017 8:30am - 10:00am
Courtyard Seattle Bellevue/Downtown 11010 NE 8th St, Bellevue, WA 98004

9:00am

Boost Your Program’s Health by Adding Fibers to your Coroutine
This session is intended to help the advanced programmer to understand what coroutines and fibers are, what problems they solve and how they should be applied in practice.
The session begins with an overview of these concepts, comparing them with threads, and demonstrating how they are exposed by the Boost libraries.
Apart from being clean and succinct as Boost libraries typically are, the authors of these libraries have gone to great lengths to ensure that fibers and coroutines expose a programming model consistent with that of threads. This will make them seem very familiar.
During the session I will demonstrate how fibers and coroutines can be used together with the powerful Boost.Asio library to solve some commonly occurring problems.
To conclude, I will provide some practical tips and guidelines for those who are adding fibers and coroutines to their programming diet.

Speakers
avatar for David Sackstein

David Sackstein

Developer, Consultant, Trainer, codeprecise
David is an experienced C++ and .Net developer and lectures on advanced topics in these languages. He is a great believer in the need to apply good engineering practices and clean code and assists his customers to implement them. He delivered a 90 minute session at ACCU 2015 on... Read More →


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #1 Meydenbauer Center

9:00am

Seventeenification
The ink on C++17 has merely dried, but the major compilers support most features already. It's high time for a reality check!

This talk is a report about the ongoing effort of porting sqlpp11 to C++17. I'll show real-world usage of the following features:

Core:
  • inline variables
  • auto non-type template parameters
  • [[nodiscard]]
  • class template deduction
  • constexpr if
  • fold expressions

Library:
  • string_view
  • optional

This talk also comes with a realization about C++11.

Speakers
avatar for Roland Bock

Roland Bock

Principal Software Engineer, PPRO Financial Ltd
From my days at the university, I hold a PHD in physics (although that was in the previous century and seems like a different life by now). Ever since then I have been developing software and/or managing engineering teams. In 2008, I started to learn C++ because I could not bel... Read More →


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #3 Meydenbauer Center

9:00am

10 Core Guidelines You Need to Start Using Now
The C++ Core Guidelines were announced at CppCon 2015, yet some developers have still never heard of them. It's time to see what they have to offer for you, no matter how much C++ experience you have. You don't need to read and learn the whole thing: in this talk I am pulling out some highlights of the Guidelines to show you why you should be using these selected guidelines. For each one I'll show some examples, and discuss the benefit of adopting them for new code or going back into old code to make a change.

Beginners who find the sheer size of the language and library daunting should be able to rely on the Guidelines to help make sane choices when there are many ways to do things. Experienced C++ developers may need to leave some of their habits behind. Developers along this spectrum could benefit from seeing what the Guidelines have to offer, yet the guidelines themselves are just too big to absorb all at once. My examples will be chosen to be beginner-friendly and the focus will be on what's in it for you: faster code, less bugs, and other tangible benefits.

Speakers
KG

Kate Gregory

Partner, Gregory Consulting
Kate Gregory has been using C++ since before Microsoft had a C++ compiler. She writes, mentors, codes, and leads projects, in both C++ and .NET, especially for Windows 7 and 8. Kate is a Microsoft Regional Director, a Visual C++ MVP, and has written over a dozen books (the most recent on C++ AMP for Microsoft Press) and speaks at conferences and user groups around the world. Kate develops courses on C++, Visual Studio, and Windows programming for Pluralsight, founded the East of Toronto .NET Users group, and is a member of adjunct faculty at Trent University in Peterborough.Website... Read More →


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #5 Meydenbauer Center

9:00am

Using IncludeOS to Write Fast and Secure Web Applications
Have you ever tried writing a web application with C++? Can opening a file and serving it via HTTP be as simple as writing 20 lines of python? With the undeniable importance of web development, C++ can not allow itself to ignore such an important field, especially with the rising competition in the field of system programming languages, coming from Rust, D and Go.

Join us as we explore modern approaches to asynchronous IO, socket communication the advantages and disadvantages of using a unikernel and their respective performance implications.

We'll also take a look at how future iterations of the C++ standard library, could solve some of those problems.

Speakers
avatar for Lukas Bergdoll

Lukas Bergdoll

Software Engineer, PPRO Financial Ltd
Lukas is a young C++ enthusiast, focused on writing clean modern cross platform applications. He currently works as Software Engineer at PPRO a young fintech company in Munich. His open source contributions range from Vulkan compute shaders to core IncludeOS components... Read More →


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #4 Meydenbauer Center

9:00am

API & ABI Versioning: How to Handle Compatibility With Your C++ Libraries
Software keeps changing, but not always as fast as its clients. A key to maintaining a library in the long run is to ensure a proper versioning of the API and ABI. Not only does this gives a clear picture of both source and binary compatibility between the versions, but it also helps design by making breaking changes explicit to the developer.

In this talk I will define API and ABI in terms of impacts on compatibility, explain the difference between breaking and non-breaking changes and present a few techniques to handle them.

We will quickly explain what APIs are, with an emphasis on the notion of contracts. Then the usually lesser known notion of ABI will be explained, going over the concepts of call syntax, mangling and most importantly sizes, alignment and offsets in data structures. We will see how to use semantic versioning (semver) in C++ by considering not only changes to the API but also to the ABI and offer some advice on how to change API and ABI over time and how to minimize the impacts.

Speakers
avatar for Mathieu Ropert

Mathieu Ropert

Senior Developer, Murex
Mathieu is a Senior Developer at Murex where he works as a C++ expert and animates internal workshops & events. A long term open-source enthusiast, he tries to make C++ more portable across platforms. He is also co-host of the Paris C++ Meetup.


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #6 Meydenbauer Center

9:00am

Bringing Clang-tidy Magic to Visual Studio C++ Developers
“A 14 year old code base under active development, 2.5 million lines of C++ code, a few brave nerds, two powerful tools and one hot summer…”, or “How we managed to clang-tidy our whole code base, while maintaining our monthly release cycle”. Did I mention that we’re a Windows-only dev team using Visual C++ ? That’s right, we’re going to continue using both Visual Studio (2017) and Clang tools on the side, to modernize and improve our code quality.

I’ve just come back from an interesting journey … and I want to share with you some of the most exciting experiences my team and I had along the way and a few things we’ve learned that you may take with you on your next “travels”. It all started a year ago, at CppCon, with a simple but life changing decision: we would stop worrying about whitespace and started our addiction on smart C++ tools with clang-format. We didn’t realize this at that time, but this was just the first leg of our great journey; next we decided to hop on the clang-tidy train and set out to modernize our aging code base and find hidden bugs along the way with clang-tidy static analyzer.

The hard part was getting all our code to compile with clang, using the correct project settings (synced with Visual Studio) and Windows SDK dependencies (our code has a fairly wide Windows API surface area). After that, clang-tidy was a breeze to use and we immediately integrated it in our workflow. I still cannot believe the code transformations we were able to do with its ‘modernize’ modules and some of the subtle latent bugs we found and fixed with its static analyzer and ‘cppcoreguidelines’ module (Guidelines Support Library).
Luckily, we took a lot of pictures and kept a detailed travel log, to share this fruitful journey with you, now. We’ll also share some tools we developed, to help you with this workflow: automation tips & configs (Jenkins, MSBuild), open-source PowerShell scripts (clang-tidy on Visual Studio projects), free Visual Studio extension and more.

Speakers
avatar for Victor Ciura

Victor Ciura

Technical Lead, CAPHYON
Victor Ciura is a Senior Software Engineer at CAPHYON and Technical Lead on the Advanced Installer team (http://www.advancedinstaller.com). | For over a decade, he designed and implemented several core components of Advanced Installer such as: IIS, repackager, UI editor & rend... Read More →


Wednesday September 27, 2017 9:00am - 10:00am
Meydenbauer TBA #2 Meydenbauer Center

10:30am

Keynote: TBA
Wednesday September 27, 2017 10:30am - 12:00pm
Meydenbauer TBA #8 Meydenbauer Center

12:30pm

Open Content Sessions: TBA
Wednesday September 27, 2017 12:30pm - 1:30pm
Meydenbauer TBA #8 Meydenbauer Center

1:00pm

ISO SG14 Working Meeting
Limited Capacity seats available

ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb chairs the ISO C++ committee and is the primary author or co-author of a number of Standard C++ features, including nullptr, enum class, parallel algorithms, C++17 structured bindings, and the in-progress unified <=> comparison operator.
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →

Wednesday September 27, 2017 1:00pm - 3:00pm
Courtyard Seattle Bellevue/Downtown 11010 NE 8th St, Bellevue, WA 98004

2:00pm

Driving Into the Future With Modern C++: A Look at Adaptive Autosar
Software development of automotive control units has long been in the hands of hardcore C developers. With the increasing need for high-performing, multi-core processors and for applications that can be updated over the Internet, this has changed.

The recently released Adaptive AUTOSAR standard fully embraces C++11/14 as its language of choice. This leverages new opportunities for AUTOSAR applications, but also poses new challenges to ensure functional safety and to train developers.

Let’s have a look at some Adaptive AUTOSAR APIs and at the AUTOSAR “Guidelines for the use of the C++14 language in critical and safety-related systems” and see how they fit into the bigger picture.

Speakers
avatar for Jan Babst

Jan Babst

Expert, Elektrobit Automotive GmbH
Jan has been programming C++since the late 1990’s when the ink on the C++98 standard was still wet. He once submitted a naïve implementation of std::valarray using expression templates to libstdc++, which actually made it into a review but is now long forgotten. Since 2003 he... Read More →


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #2 Meydenbauer Center

2:00pm

Read, Copy, Update, then what? RCU for non-kernel programmers
RCU (Read, Copy, Update) is often the highest-performing way to implement concurrent data structures. The differences in performance between an RCU implementation and the next best alternative can be striking. And yet, RCU algorithms have received little attention outside of the world of kernel programming. Largely, this is because the most common drawback of RCU solution is complicated, and often wasteful, memory management. Kernel code has some advantages here, whereas a generic solution is much harder to design.

There are, however, cases when RCU is simple to use, offers very high performance, and the memory issues are easy to manage. In fact, you may already be using the RCU approach in your program without realizing it! Wouldn't that be cool? But careful now: you may be already using the RCU approach in your program in a subtly wrong way. I'm talking about the kind of way that makes your program pass every test you can throw at it and then crash in front of your most important customer (but only when they run their most critical job, not when you try to reproduce the problem).

In the more general case, we have to confront the problems of RCU memory management, but the reward of much higher performance can make it well worth the effort.

This talk will give you understanding of how RCU works, what makes it so efficient, and what are the conditions and restrictions for a valid application of an RCU algorithm. We focus on using RCU outside of kernel space, so we will have to deal with the problems of memory management... and yes, there will be garbage collection.

Speakers
avatar for Fedor Pikus

Fedor Pikus

Chief Scientist, Mentor Graphics - Siemens business
Fedor G Pikus is a Chief Engineering Scientist in the Design to Silicon division of Mentor Graphics Corp. His earlier positions included a Senior Software Engineer at Google and a Chief Software Architect for Calibre PERC, LVS, DFM at Mentor Graphics. He joined Mentor Graphics in... Read More →


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #6 Meydenbauer Center

2:00pm

Naivety of Creating Cross-Platform, Modern C++ Libraries: A Tour Of Our Challenges and Successes
The AWS SDK for C++ was designed with a few important tenets. Modern C++ (versions 11 and later), Cross-Platform, User Customization with sane defaults, and no dependencies. A year after launching for general availability, we've been thinking about how these tenets have served us well, and the challenges we've encountered when applying them.

In this talk, we will discuss the difficulties we encountered in design and implementation, and then we will cover the aspects of our design that have worked out well. The topics we will cover are: Build System choices, the C++ standard library, Dependency choices, Threading models, Memory models, IO-based programming, ABI compatibility, and packaging.

Speakers
avatar for Jonathan Henson

Jonathan Henson

Senior Software Development Engineer, Amazon Web Services
Jonathan is a Senior Software Engineer at Amazon Web Services. He leads development on the AWS SDK for C++ and is passionate about writing tooling for modern C++ developers and advancing adoption of the latest C++ standards.


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #3 Meydenbauer Center

2:00pm

C++ Templates Revised
In 2003 we published "C++ Templates - The Complete Guide". Now, 14 years and 3 major C++ versions later, we are publishing the second edition. The content grew and changed dramatically. And I, the representative application programmer among the authors, learned a lot while at the same time shaking my head again and again.

This talk is a personal overview of the changes Modern C++ brought to generic C++ programming and what that means for ordinary application programmers. It's not only about new features, it's also about the discussions we had regarding style and usability (for example, about our recommendations of how to declare parameters in function templates).

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries. He is well known in the programming community because he not only speaks and writes with authority (being the (co-)author of the world-wide best sellers The C++ Standard Library... Read More →


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #5 Meydenbauer Center

2:00pm

Language support for compile-time programming, reflection, and metaclasses
For the past year, I have worked with Herb Sutter on language support for compile-time programming, static reflection, metaclasses, and code generation in the C++ programming language.

In this talk, I will trace the evolution of that work from their original motivation to their current implementation as an extension of the Clang C++ compiler.

In particular, I plan to walk through the design criteria, decisions, and issues related to these features as we implemented them and experimented with them.

I will also discuss how our current approach is shaped by alternative proposals, community and committee feedback, and restrictions imposed by the C++ programming language itself.

Speakers
AS

Andrew Sutton

Assistant Professor, The University of Akron
Andrew Sutton is an assistant professor at the University of Akron in Ohio where he teaches and conducts research at the intersection of Software Engineering and Programming Languages. Dr. Sutton helped design and implemented the Concepts Lite proposal for the C++ programming language. He is also the author of the Origin C++ Libraries, an experimental collection of generic libraries that supports ideas and research for generic programming. Dr. Sutton had previously worked as a postdoctoral researcher at Texas... Read More →


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #4 Meydenbauer Center

2:00pm

Undefined Behavior in 2017 (part 1 of 2)
Undefined behavior is a clear and present danger for all application code written in C++. The most pressing relevance is to security, but really the issue is one of general software correctness. The fundamental problem lies in the refusal of C++ implementations (in general) to trap or otherwise detect undefined behaviors. Since undefined behaviors are silent errors, many developers have historically misunderstood the issues in play.

Since the late 1990s undefined behavior has emerged as a major source of exploitable vulnerabilities in C++ code. This talk will focus on trends in the last few years including (1) increased willingness of compilers to exploit undefined behaviors to break programs in hard-to-understand ways and (2) vastly more sophisticated tooling that we have developed to detect and mitigate undefined behaviors. The current situation is still tenuous: only through rigorous testing and hardening and patching can C++ code be exposed to untrusted inputs, even when this code is created by strong development teams. This talk will focus on what developers can and should do to prevent and mitigate undefined behaviors in code they create or maintain.

Speakers
avatar for John Regehr

John Regehr

Professor, University of Utah
John Regehr is a professor of computer science at the University of Utah, USA. His research group creates tools for making software more efficient and correct. For example, one of his projects, Csmith, generates random C programs that have been used to find more than 500... Read More →


Wednesday September 27, 2017 2:00pm - 3:00pm
Meydenbauer TBA #1 Meydenbauer Center

3:15pm

Practical Patterns with the Networking TS
Networking is coming to a standard near you — but how do you use it?

Based on similar concepts found in Boost.Asio, the Networking TS provides a rich API for synchronous and asynchronous network communications. The library boasts an impressive TTHW indicator (Time To Hello World); however, implementing robust client and server solutions often baffles newcomers and seasoned practitioners alike. Inspiration for this talk comes from the questions we have received on IRC, Slack, reddit, private emails, and classes we teach.

In this tutorial, Michael will provide a quick crash-course on using the Networking TS for asynchronous communication and then present patterns and idioms used at Ciere to address subjects including:

* Lifetime issues
* Clean startup and shutdown
* Timeouts, errors, and exceptions
* Taming events
* Decoupling and layering

This session will be of interest to individuals wanting to get started with the Networking TS or who need some inspiration in building robust systems. Many of the techniques presented will also be applicable with Boost.Asio and the standalone Asio libraries.

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →


Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #2 Meydenbauer Center
  • Level Beginner, Intermediate, Advanced
  • Tags networking

3:15pm

Reader-Writer Lock versus Mutex - Understanding a Lost Bet
Mutexes have frequently been observed to outperform reader-writer locks in domains where, logically, reader-writer locks should dominate. I was recently given an opportunity to address this inconsistency and, to demonstrate my certainty of success, accepted a bet regarding outperforming a mutex for a high read, low write work task with short — but not extremely short — lock hold times.

I lost the bet.

I resolved to understand how I lost this bet and, in my mind at least, convert this "loss" to a "win". The bet focused on a Linux platform (the evaluations presented are multi-platform). This presentation will discuss design criteria for a reader-writer lock, the "losing" implementation, the performance results for the "losing" implementation, a possible explanation for the loss, the novel "winning" implementation, and the results supporting the value of the "winning" implementation.

A basic understanding of mutexes, reader-writer locks, and atomic operations is recommended for attendees.

Speakers

Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #6 Meydenbauer Center

3:15pm

Make Classes Great Again! (Using Concepts for Customization Points)
Learn new ways to think about class design, that you can apply to your own projects!

In this talk we'll start with a simple class that models an HTTP message. We’ll go over the limitations of the simple declaration, then walk through a series of guided improvements. We will explore ways to think about class models, create a concept as a customization point, perform type checking, and document a concept.

The example class we will explore is based on the message container found in the Boost.Beast library. You do not need to know anything (or care) about network protocols. This is about building better classes.

Speakers
avatar for Vinnie Falco

Vinnie Falco

Engineer, Boost
I'm the author of BearShare, DSPFilters, and most importantly Boost.Beast - a C++ header only library that offers implementations for HTTP and WebSockets, located here: https://github.com/boostorg/beast/


Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #5 Meydenbauer Center

3:15pm

Effective Qt (2017 edition)
The title of this talk pays tribute to the "Effective Qt" columns, a series of blog posts started by Marc Mutz many years ago, whose title was in turn inspired by Scott Meyer's book series. The purpose of the columns was to provide in-depth explanations about Qt data structures and design patterns to C++ developers, who wanted to know more about how to use Qt core classes, and how to use them "effectively".

This talk aims to be an up-to-date version of (some of) the advices in the columns, in the light of the major changes introduced to core classes in Qt 5's lifetime (including changes that will come with Qt 5.10, scheduled to be released at the end of 2017).

Moreover, we will see how the language and Standard Library features added to latest C++ standards interact with long-established practices when developing Qt code.

The talk is structured as a series of best practices, guidelines and tips&tricks, learned from many years of experience developing Qt-based projects, as well as the significant effort spent developing Qt itself and steering its evolution. For each advice, a technical discussion of the rationale behind it will be provided, and possibly some indication about future developments and what to expect in upcoming Qt versions.

The topics mentioned in this talk cover many areas in Qt, and should contain something new or interesting for Qt developers using C++, hopefully helping them to build quality libraries and applications. The main focus areas will be around Qt containers (and their algorithms) as well as Qt string classes.

Attendees are expected to have some working knowledge of Qt C++ APIs (and especially C++ APIs in QtCore).

Speakers
avatar for Giuseppe D'Angelo

Giuseppe D'Angelo

Senior Software Engineer, KDAB
Giuseppe (peppe) is a long time contributor to Qt, having used Qt since 2000, and an Approver in the Qt Project. In KDAB, Giuseppe is a Senior Software Engineer and a Trainer, working on a number of C++ and QML projects, most of them requiring OpenGL knowledge. Giuseppe also lead... Read More →


Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #4 Meydenbauer Center

3:15pm

Undefined Behavior in 2017 (part 2 of 2)
Undefined behavior is a clear and present danger for all application code written in C++. The most pressing relevance is to security, but really the issue is one of general software correctness. The fundamental problem lies in the refusal of C++ implementations (in general) to trap or otherwise detect undefined behaviors. Since undefined behaviors are silent errors, many developers have historically misunderstood the issues in play.

Since the late 1990s undefined behavior has emerged as a major source of exploitable vulnerabilities in C++ code. This talk will focus on trends in the last few years including (1) increased willingness of compilers to exploit undefined behaviors to break programs in hard-to-understand ways and (2) vastly more sophisticated tooling that we have developed to detect and mitigate undefined behaviors. The current situation is still tenuous: only through rigorous testing and hardening and patching can C++ code be exposed to untrusted inputs, even when this code is created by strong development teams. This talk will focus on what developers can and should do to prevent and mitigate undefined behaviors in code they create or maintain.

Speakers
avatar for John Regehr

John Regehr

Professor, University of Utah
John Regehr is a professor of computer science at the University of Utah, USA. His research group creates tools for making software more efficient and correct. For example, one of his projects, Csmith, generates random C programs that have been used to find more than 500... Read More →


Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #1 Meydenbauer Center

3:15pm

There Will Be Build Systems: I Configure Your Milkshake
C++ (and C) have always had unique challenges when it comes to build systems. In addition to discussing the common problems that C++ build systems face, this talk will discuss the (abbreviated) history of build systems, where the current build system ecosystem is, where it is heading, and where it might be in the near future. Expect a lively presentation, that is both light on code and heavy on information.

Speakers
IM

Isabella Muerte

C++ Bruja, MNMLSTC
Isabella Muerte is a C++ Bruja and Build System Trash Goblin. She taught herself to program at 20 by writing a build system and immediately regretting the decision. Her first computer ran Windows Millennium Edition and her parents forbade her from upgrading to anything else for 5... Read More →


Wednesday September 27, 2017 3:15pm - 4:15pm
Meydenbauer TBA #3 Meydenbauer Center

3:30pm

ISO SG14 Working Meeting
Limited Capacity seats available

ISO Study Group 14 “Game Development and Low Latency” working session. Conference attendance is not required to participate in the SG14 meeting, but a separate ticket is. Registration is here.

Moderators
avatar for Herb Sutter

Herb Sutter

Software architect, Microsoft
Herb chairs the ISO C++ committee and is the primary author or co-author of a number of Standard C++ features, including nullptr, enum class, parallel algorithms, C++17 structured bindings, and the in-progress unified <=> comparison operator.
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →

Wednesday September 27, 2017 3:30pm - 5:45pm
Courtyard Seattle Bellevue/Downtown 11010 NE 8th St, Bellevue, WA 98004

4:45pm

Designing C++ Hardware
You can run C++ on any computer you want, as long as it pretends it is an 80’s computer. Conveniently most computers pretend to be 80’s computers – with extras, but nothing too radical – because they want to run C++. This contract isn’t written down anywhere, but both sides are absolutely bound by it.

In this talk we’ll walk through the adaptation of the most radical new architecture to run C++ in decades, NVIDIA Volta. The talk contents will be divided into four parts that align to these abstract machine semantics: execution agents, progress guarantees, the object model, and the consistency model.

We will close on new C++ features that make it easier, not harder, for hardware to support C++.

Speakers
avatar for Olivier Giroux

Olivier Giroux

Principal Architect, NVIDIA
Olivier Giroux has worked on eight GPU and four SM architecture generations released by NVIDIA. Lately, he works to clarify the forms and semantics of valid GPU programs, present and future. He was the programming model lead for the new NVIDIA Volta architecture. He is a member o... Read More →


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #2 Meydenbauer Center

4:45pm

An Interesting Lock-free Queue - Part 2 of N
This is the long awaited continuation of a previous CppCon talk ("Lock-free by Example") on an "interesting" lock-free queue. ("interesting"? Well, "multi-producer, multi-consumer, growing, shrinking, mostly contiguous, lock-free circular queue" is a bit long. Maybe "complicated" is a better word.)

Attendance at the previous talk is completely NOT required.

This time we will not just review where we left off, but attempt to "prove" that what we did is actually correct, and thus discuss how to prove correctness of lock-free algorithms, and discuss provability vs testing.

And then, with the first steps proven (or disproven! - and hopefully corrected!), we can continue to expand the features of the queue, and tackle the new challenges that arise.

Also, this is secretly a talk to convince you not to do lock-free programming. Shhh...

Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Christie Digital
Tony has been coding for well over 25 years, and maybe coding well for some of that. From pixel++, to UI, to threading, to anything in between. Previously at Inscriber, Adobe, BlackBerry, he now enables Painting with Light at Christie. He is on the C++ Committee. He is a Ninja an... Read More →


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #6 Meydenbauer Center

4:45pm

Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step
Hash tables consume a large volume of both compute resources and memory across Google's production system. The design for hash tables in C++ traces its origins to the SGI STL implementation from 20 years ago. Over these years, computer architecture and performance has changed dramatically and we need to evolve this fundamental data structure to follow those changes. This talk describes the process of design and optimization that starts with std::unordered_map and ends with a new design we call "SwissTable", a 2-level N-way associative hash table. Our implementation of this new design gets 2-3x better performance with significant memory reductions (compared to unordered_map) and is being broadly deployed across Google.

Speakers
MK

Matt Kulukundis

Senior Software Engineer, Google


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #4 Meydenbauer Center

4:45pm

A Soupçon of SFINAE
Following on Arthur's "Template Normal Programming" from CppCon 2016, this will be a concise cookbook of SFINAE recipes — ways of getting the compiler to do one thing in one circumstance and another thing in another circumstance. The recipes presented will include:
- Partial specialization of struct templates
- std::bool_constant
- std::conditional_t
- Expression SFINAE on return types (using decltype)
- Expression SFINAE in a defaulted template type parameter
- std::enable_if_t as a defaulted template type parameter
- Tag dispatch on std::true_type and std::false_type
- "Meta-tag-dispatch" on true and false as template non-type parameters
- priority_tag<N> for tag dispatch with "fallback" cases
- bool_if_t as a template non-type parameter
In each case, we'll show a real code example where the recipe is the clearest and best way to get the job done. This will draw on Arthur's recent "STL From Scratch".

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

Core Engineering, Nominum
Arthur O'Dwyer worked for many years at Green Hills Software, making the world's most optimizing C and C++ compilers. Now he works at Nominum in San Francisco. Arthur is the showrunner of the Bay Area C++ meetup, which meets practically every week these days.


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

A Type, by Any Other Name
No offense to Shakespeare, but in C++ there is a lot in a type name. A name represents a set of data and behaviors, and changing names is an often difficult and painful process. This could be to reconcile some repeated logic into common functionality, upgrade a hand-rolled type to a standard type (or vice-versa), or just upgrade your interfaces to be easier to use.

When these types are widely used throughout a large codebase, conventional wisdom dictates that this refactoring is difficult or impossible -- changing every instance of a widesperead type would cause widespread merge conflicts, if all instances can even be found. In C++, however, it’s possible to refactor types non-atomically, in small steps which preserve invariants, without breaking any users of your code. Library teams at Google have refactored millions of lines of code this way -- this talk will outline common strategies for non-atomic renaming and refactorings, and antipatterns such as ADL use and forward declarations which complicate the process.   That is:

'Tis but thy name that’s not my namespace; 
Thou art thyself, though not a standard class. 
What's montague::? It is not base, nor parent, 
Nor member, typedef, nor any other part 
Belonging to a class. O, be some other name! 
What's in a name? that which we call a ::rose 
By any other name would std::move as swift; 
std::romeo would, were he not ADL call'd, 
Retain that dear perfection which he owes 
Without that title. ::Romeo, doff thy name, 
And for that name which is no part of thee 
Take all myself. 

Speakers
avatar for Jon Cohen

Jon Cohen

SWE, Google
Jon Cohen is an engineer at Google, maintaining our core common C++ libraries. He spends most of his days directing Google's robot army to rewrite its own source code to be more readable and efficient, and has so far managed to do so without accidentally creating Skynet.


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #1 Meydenbauer Center

4:45pm

Tools and Techniques To Stay Up-to-date With Modern C++
Since 2011, C++ has been on a massive roll. New C++ standards in 2011, 2014 and 2017. A growing number of new TSes and proposals for new features to be standardized. Following even just a few C++ luminaries on Twitter feels like drinking from a firehose: blog posts galore, radical new ideas, new techniques, new libraries, new conference videos, new open source projects... Does anyone else feel overwhelmed?

In this talk I will show you some techniques and tools to stay on top of modern C++ development and still keep your sanity.

I'll show you how to use various simple forms of testing to get acquainted with new and unfamilar C++ techniques, how to write your own Clang-based tools to explore new libraries and code bases, how to use simple Python scripts that make it easier to reason about some of the more opaque corners of C++ (e.g. the preprocessor and error messages), and more.

Speakers
IV

Ingve Vormestrand

Ingve is a developer at IncludeOS, where he works on the implementation of a new unikernel operating system. His professional experience includes web and mobile app development, and he is very enthusiastic about open source.


Wednesday September 27, 2017 4:45pm - 5:45pm
Meydenbauer TBA #3 Meydenbauer Center

8:30pm

Lightning Talks
Come for bite size talks you'll want more of!

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →

Wednesday September 27, 2017 8:30pm - 10:00pm
Meydenbauer TBA #1 Meydenbauer Center

8:30pm

Open Content Sessions: TBA
Wednesday September 27, 2017 8:30pm - 10:00pm
Meydenbauer TBA #8 Meydenbauer Center
 
Thursday, September 28
 

8:00am

Open Content Sessions: TBA
Thursday September 28, 2017 8:00am - 8:45am
Meydenbauer TBA #8 Meydenbauer Center

9:00am

TBA
Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #7 Meydenbauer Center

9:00am

A Test a Day Keeps Your Manager Away!
This session will present how to leverage C++'s diverse set of analysis tools with existing Continuous Integration services to increase a project's quality continuously over time. In additional, we will discuss the advantages and disadvantages of using these tools using real world open source examples. Those interested in Continuous Integration or learning new ways to increase the quality of their code will enjoy this presentation.

Continuous Integration (CI) is the act of continuously integrating small changes to a code base. The goal is to identify integration issues prior to making a change, ensuring a project's quality over time. Thanks to virtualization, today we have many services that provide automated continuous integration that support C++ including Travis CI and AppVeyor on Windows, Linux and MacOS. Typically CI is used to compile and sometimes execute automated tests to ensure a change to a project doesn't result in a compilation issue, or regression. C++ is however is a diverse, rich environment with numerous analysis tools available to C++ developers. These tools can be integrated into these CI services to provide automated analysis of any change being made to a project prior to it's acceptance to ensure the highest possible quality of the project.

During this session we will step through an open source project designed to demonstrate how to integrate different C++ analysis tools into your CI services. These tools include static analysis (Clang Tidy, Coverity Scan, Codeacy and CppCheck), dynamic analysis (Valgrind and Google's Sanitizers), source formatting (Astyle and Clang Format), documentation (Doxygen), code coverage (Codecov, Coveralls, and LLVM's Software-based Code Coverage), cross platform tests (Windows, Cygwin, Linux, and macOS), compiler tests (GCC, Clang, and Visual Studio) and finally C++ libraries designed to assist in reliability and automated testing (Catch, Hippomocks and the Guideline Support Library). In addition we will openly discuss the advantages and disadvantages of using various analysis tools, how to integrate these tools into existing projects (both large and small) as well as common problems encountered while using these tools autonomously in a CI environment.

Speakers
avatar for Rian Quinn

Rian Quinn

Senior Engineer, AIS, Inc.
Dr. Rian Quinn is a Senior Principal Investigator in the Trusted Information Systems Group at Assured Information Security, Inc. were he has focused on trusted computing and hypervisor related technologies for nearly 10 years. He holds a Ph.D. in Computer Engineering with special... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #3 Meydenbauer Center

9:00am

Game Audio Programming in C++
Game audio programming is a sort of dark art practiced and understood by its few practitioners, but audio is an important and vibrant part of any game. There is a huge body of knowledge and history here, but the C++ standard, unfortunately, has yet to acknowledge the existence of audio output devices. In this talk we'll discuss the current state of the art in game audio programming, and what steps we can take toward bringing real-time audio to the C++ standard.
We will begin with first principles: representing waveforms and playback of sounds. With a few basic mathematical principles out of the way, we'll discuss how a low-level mixer works, and the sorts of tools that game audio builds on top of it. Finally, we will present a set of abstractions that are useful for real-time audio, and how they can be brought into the C++ standard.

Speakers
avatar for Guy Somberg

Guy Somberg

Client Lead Programmer, Echtra Games, Inc.
Guy has been a game audio programmer for 15 years, and has shipped numerous titles, including Hellgate: London, Bioshock 2, Minion Master, The Walking Dead Season 2, Tales From the Borderlands, and Game of Thrones. (The last three are all Telltale Games adventures.) Also, Dora th... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #2 Meydenbauer Center

9:00am

Packet processing using reflection and metaclasses
For the past several years, I have been researching new languages to support safe and efficient network protocol processing, specifically for software-defined networking applications. The unfortunate outcome of that research is this conclusion: any language for that domain must also be a general purpose programming language. This is not an easy thing to do. Many of the language features I worked with simply generated expressions to compute packet and header lengths, read and write packet fields, and encode and decode entire packets. If we could do this in C++, I might not need an entirely new language.

Over the past year, Herb Sutter and I have collaborated to work on language support for compile-time programming, static reflection, metaclasses, and code generation in the C++ programming language. These facilities completely eliminate the need for the external tools, metacompilers, and domain-specific languages on which we frequently rely to generate high-performance encoders and decoders in C++.

In this talk, I will discuss how to use these evolving proposals to create facilities for encoding and decoding packets. In particular, I will discuss the background requirements of my work, the overall design of a network protocol library, and the reflection and generation facilities that implement the library.

Speakers
AS

Andrew Sutton

Assistant Professor, The University of Akron
Andrew Sutton is an assistant professor at the University of Akron in Ohio where he teaches and conducts research at the intersection of Software Engineering and Programming Languages. Dr. Sutton helped design and implemented the Concepts Lite proposal for the C++ programming language. He is also the author of the Origin C++ Libraries, an experimental collection of generic libraries that supports ideas and research for generic programming. Dr. Sutton had previously worked as a postdoctoral researcher at Texas... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #6 Meydenbauer Center

9:00am

Runtime Polymorphism: Back to the Basics
C++ solves the problem of runtime polymorphism in a very specific way. It does so through inheritance, by having all classes that will be used polymorphically inherit from the same base class, and then using a table of function pointers (the virtual table) to perform dynamic dispatch when a method is called. Polymorphic objects are then accessed through pointers to their base class, which encourages storing objects on the heap and accessing them via pointers. This is both inconvenient and inefficient when compared to traditional value semantics. As Sean Parent said: Inheritance is the base class of evil.

It turns out that this is only one of many possible designs, each of which has different tradeoffs and characteristics. This talk will explore the design space for runtime polymorphism in C++, and in particular will introduce a policy-based approach to solving the problem. We will see how this approach enables runtime polymorphism with stack-allocated storage, heap-allocated storage, shared storage, no storage at all (reference semantics), and more. We will also see how we can get fine-grained control over the dispatch mechanism to beat the performance of classic virtual tables in some cases. The examples will be based on a real implementation in the Dyno library [1], but the principles are independent from the library.

At the end of the talk, the audience will walk out with a clear understanding of the different ways of implementing runtime polymorphism, their tradeoffs, and with guidelines on when to use one implementation or another.

[1]: https://github.com/ldionne/dyno

Speakers
avatar for Louis Dionne

Louis Dionne

Software Engineer, Amazon
Louis is a math and computer science enthusiast with interest in C++ (meta)programming, functional programming, domain specific languages and related subjects. He is an active member of the Boost community, and authored the Boost.Hana metaprogramming library.


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #4 Meydenbauer Center

9:00am

Type Punning in C++17: Avoiding Pun-defined Behavior
Type punning, treating a type as though it is a different type, has a long and sordid history in C and C++. But, as much as we'd like to deny its existence, it plays an important role in efficient low-level code. If you've ever written a program that examines the individual bits of a pointer or of a floating point number, then you've done type punning.

Given its long legacy, some of the techniques for type punning that were appropriate, even encouraged, earlier in history now live in the realm of undefined behavior. We'll identify which techniques are now proscribed and postulate why. We'll also explore ways to do type punning in C++17 that sidestep undefined behavior and are hopefully as efficient as the older techniques.

In this session we will look at:
o Common (and some uncommon) motivations for type punning.
o Techniques for type punning, both good and bad, all ugly.
o Related topics (like type conversions and std::launder()) with an eye toward unspecified and undefined behavior.

Speakers
avatar for Scott Schurr

Scott Schurr

Senior Software Engineer, Ripple
If you ask his children, they will tell you that Scott has been writing software since dinosaurs roamed the earth. In 1996 Scott learned C++ by working through the exercises in Stroustrup's TC++PL 2nd edition and he has never looked back. Scott is currently working at Ripple La... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #5 Meydenbauer Center

9:00am

Building C++ Modules
C++ Modules TS is now implemented (to various degrees) by GCC, Clang, and MSVC. The aim of this talk is to provide practical information on the mechanics of creating and consuming modules with these compilers. It is based on our experience adding modules support to the build2 toolchain and then modularizing some of its components.

We start with a brief introduction to C++ modules, why we need them, and how they relate to other physical design mechanisms, namely headers, namespaces, and libraries.

Next we explore the kind of integration modules will require from a C++ build system. Specifically, when and where a module binary interface is built? How can a build system discover which modules are needed? What are the implications for parallel and distributed builds? Can we finally get rid of the preprocessor? And what happens to header-only libraries in this brave new modularized world?

With a firm understanding of the implications C++ modules have on the build process, we can try to answer some of the module design questions: What is an appropriate module granularity? Should we have separate module interface and implementation units? Can we have a dual header/module interface for legacy support? Are module-only libraries to become all the rage?

Speakers
avatar for Boris Kolpackov

Boris Kolpackov

Chief Hacking Officer, Code Synthesis
Boris Kolpackov is a founder and CHO (Chief Hacking Officer) at Code Synthesis, a company focusing on the development of open-source tools and libraries for C++. For the past 10 years Boris has been working on solving interesting problems in the context of C++ using domain-specif... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Meydenbauer TBA #1 Meydenbauer Center

10:30am

Keynote: TBA
Thursday September 28, 2017 10:30am - 12:00pm
Meydenbauer TBA #8 Meydenbauer Center

12:30pm

Open Content Sessions: TBA
Thursday September 28, 2017 12:30pm - 1:30pm
Meydenbauer TBA #8 Meydenbauer Center

2:00pm

The Asynchronous C++ Parallel Programming Model
With the advent of modern computer architectures characterized by — amongst other things —many-core nodes, deep and complex memory hierarchies, heterogeneous subsystems, and power-aware components, it is becoming increasingly difficult to achieve best possible application scalability and satisfactory parallel efficiency. The community is experimenting with new programming models which are based on finer-grain parallelism, and flexible and lightweight synchronization, combined with work-queue-based, message-driven computation. Implementations of such a model are often based on a framework managing lightweight tasks which allows to flexibly coordinate highly hierarchical parallel execution flows.

The recently growing interest in the C++ programming language in industry and in the wider community increases the demand for libraries implementing those programming models for the language. Developers of applications targeting high-performance computing resources would like to see libraries which provide higher-level programming interfaces shielding them from the lower-level details and complexities of modern computer architectures. At the same time, those APIs have to expose all necessary customization points such that power users can still fine-tune their applications enabling them to control data placement and execution, if necessary.

In this talk we present a new asynchronous C++ parallel programming model which is built around lightweight tasks and mechanisms to orchestrate massively parallel (and distributed) execution. This model uses the concept of (std) futures to make data dependencies explicit, employs explicit and implicit asynchrony to hide latencies and to improve utilization, and manages finer-grain parallelism with a work-stealing scheduling system enabling automatic load-balancing of tasks. As a result of combining those capabilities the programming model exposes auto-parallelization capabilities as emergent properties.

We have implemented the this model as a C++ library exposing a higher-level parallelism API which is fully conforming to the existing C++11/14/17 standards and is aligned with the ongoing standardization work. This API and programming model has shown to enable writing parallel and distributed applications for heterogeneous resources with excellent performance and scaling characteristics.

Speakers
HK

Hartmut Kaiser

STE||AR Group, Center for Computation and Technology
Hartmut is a member of the faculty at the CS department at Louisiana State University (LSU) and a senior research scientist at LSU's Center for Computation and Technology (CCT). He received his doctorate from the Technical University of Chemnitz (Germany) in 1988. He is probably... Read More →


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #6 Meydenbauer Center

2:00pm

How to Write a Custom Allocator
You'd like to improve the performance of your application with regard to memory management, and you believe this can be accomplished by writing a custom allocator. But where do you start? Modern C++ brings many improvements to the standard allocator model, but with those improvements come several subtle issues that must be addressed when designing a new allocator.

This talk will provide guidance on how to write custom allocators for the C++14/C++17 standard containers. It will cover the requirements specified by the standard, and will describe the facilities provided by the standard to support the new allocator model and allocator-aware containers. We'll look at the issues of allocator identity and propagation, and examine their implications for standard library users, standard library implementers, and custom allocator implementers. We'll see how a container uses its allocator, including when and how a container's allocator instance propagates. This will give us the necessary background to describe allocators that implement unusual semantics, such as a stateful allocator type whose instances compare non-equal. Finally, the talk will provide some guidelines for how to specify a custom allocator's public interface based on the semantics it provides.

Speakers
avatar for Bob Steagall

Bob Steagall

CppCon 2017 Poster Chair, KEWB Computing
I've been working in C++ for the last 24 years. The majority of my career has been spent in medical imaging, where I led teams building applications for functional MRI and CT-based cardiac visualization. After a brief journey through the world of DNS, I'm now trying my hand at an... Read More →


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #5 Meydenbauer Center

2:00pm

How to Write Effective Documentation for C++ Libraries with Minimal Effort
With the success of GitHub, everybody and his brother is a library developer. Programmers love to create code, upload it to GitHub and hope for immortality. Most projects get only the most cursory examination before being passed over by users. Why is that? GitHub considered the problem.

GitHub just published its 2017 Open Source Survey. The popular social coding service surveyed over 5,500 members of its community, from over 3,800 projects on github.com. It also spoke to 500 coders working on projects from outside the GitHub ecosystem. The Open Source Survey asked a broad array of questions. One that caught my eye was about problems people encounter when working with, or contributing to, open source projects. An incredible 93 percent of people reported being frustrated with “incomplete or confusing documentation”. see https://thenextweb.com/dd/2017/06/02/free-software-is-suffering-because-coders-dont-know-how-to-write-documentation/#.tnw_SYGx5ozW

Even the most experienced and dedicated software developers can't do it. This can be confirmed by looking over recent reviews of Boost libraries. The most common complaint is that the documentation isn't useable.

Programmers love their stuff and hope to get people to use it, why don't they fix their documentation? The reason is simple: They don't know how.

Problems

a) It's tedious and boring to write
b) Developers don't know what to include and what to exclude
c) Tools make things harder
d) Regardless of the amount of effort invested, the end result is usually of little or no value.

This presentation will present a "Cookbook" and demonstration for creating documentation. Using this method will

a) Much diminish the tedium of the task.
b) Help improve to the quality of library design and implementation
c) Create something that is useful to the library user.

We will touch upon tools like Doxygen, etc. But this is only a small portion of the presentation. We use them so they deserve mention. But they don't cause the problem, and they don't solve it either.

Speakers
avatar for Robert Ramey

Robert Ramey

Proprietor, Robert Ramey Software Development
Robert Ramey is a freelance Software Developer living in Santa Barbara, California. (See www.rrsd.com.)  His long and varied career spans various aspects of software development including business data processing, product, embedded systems, custom software, and C++ library dev... Read More →


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #2 Meydenbauer Center

2:00pm

Mix Tests and Production Code With Doctest - Implementing and Using the Fastest Modern C++ Testing Framework
doctest is new to the C++ testing framework scene but is by far the fastest both in compile times (by orders of magnitude) and runtime compared to other such feature-rich alternatives.

It brings the ability of compiled languages such as D / Rust / Nim to have tests written directly in the production code by providing a fast, transparent and flexible test runner with a clean interface which can be removed entirely from the binary along with all tests for release builds of the software that are shipped to customers.

The framework can be used like any other even if you don't want/need to mix production code and tests - the list of features doesn't stop growing.

By attending this talk you will get familiar with the framework and see how it's different from all the rest.

To make things more interesting the presentation will not just focus on using the framework, but will delve into useful and generally applicable C++ techniques from its implementation for more than half the session length which can be applied in different areas of your work - like how to:

  • register code automatically before the program enters main()
  • decompose expressions with templates
  • translate exceptions - extendable by the user
  • write a header-only library which compiles very fast
  • implement assert macros that don't result in code bloat
  • deal with warnings
  • loop a void owl once with while((void)0,0)

Speakers
avatar for Viktor Kirilov

Viktor Kirilov

With 3.5 years of professional experience with C++ in the games and VFX industries, Viktor currently spends his time writing open source software (since 01.01.2016). His interests are the making of games and game engines, high performance code, data oriented design, minimizing friction and incorporating good practices in the software development process such as testing and the use of modern tools like static analysis or instrumentation. Viktor is from Sofia, Bulgaria and his profession is his hobby... Read More →


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #3 Meydenbauer Center

2:00pm

Objects, Lifetimes, and References, oh my: the C++ Object Model, and Why it Matters to You
How does the C++ abstract machine really work at the lowest levels? Why does the committee design its rules the way they do? Gain insight into the object model of C++, from references to passing semantics to copy elision. C++ is a complicated language full of arcane rules and complicated tangents - learn how it's all tied together in this basic model of locations, objects, and values.

Speakers
NM

Nicole Mazzuca

None
Nicole Mazzuca is a C++ and Rust programmer who is very interested in object models - she is helping to write the Rust object model, and as such has studied other object models heavily, especially C++'s.


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #4 Meydenbauer Center

2:00pm

Practical Techniques for Improving C++ Build Times
Slow builds block all C++ developers from the work being done. At Facebook we have a huge codebase, where the time spent compiling C++ sources grows significantly faster than the size of the repository. In this talk we will share our practical experience optimizing build times, in some cases from several hours to just a few minutes. The majority of the techniques are open sourced or generic and can be immediately applied to your codebase.

Facebook strives to squeeze build speed out of everything: starting from a distributed build system, through the compiler toolchain and ending with code itself. We will dive into different strategies of calculating cache keys, potential caching traps and approaches to improve cache efficiency. We tune the compiler, specifically with compilation flags, profile data and link time options. We refactor legacy code by leveraging clang-based indexing tools. We will talk about the benchmarks we use to track improvements and detect regressions and what challenges we face there. Finally, you will learn about our unsuccessful approaches with an explanation of why they didn't work out for us.

Speakers
DP

Dmitry Panin

Software Engineer, Facebook


Thursday September 28, 2017 2:00pm - 3:00pm
Meydenbauer TBA #1 Meydenbauer Center

3:15pm

A Tour of Deep Learning With C++
Deep Learning is a subfield of artificial intelligence that employs deep neural network architectures and novel learning algorithms to achieve state of the art results in image classification, speech recognition, motion planning and other domains. While all machine learning algorithms are initially formulated in mathematical equations (the only programming language where single letter variable names are encouraged), they must eventually be translated into a computer program. Moreover, because deep neural networks can often be composed of many hundreds of millions of trainable parameters and operate on gigabytes of data, these computer programs have to be fast, lean, often distributed and squeeze every last ounce of performance out of modern CPUs, GPUs and even specialized hardware. This is synonymous with saying machine learning algorithms are usually implemented in C or C++ under the hood, even though libraries like TensorFlow, Torch or Caffe expose APIs in Python or Lua to ease the process of research and speed up iteration. This talk aims to break the single responsibility principle and do three things at once:

1. Give a sweeping introduction to the state of the art in deep learning,
2. Give examples of what it means to implement neural networks in C++, from an implementer's perspective,
3. Give examples of building deep learning models in C++, from a researcher's perspective.

Here, the distinction between building and implementing is that the former means stacking together high level modules to achieve some machine learning task, while the latter means actually writing the CPU or GPU kernels that make the magic happen. The goal of the talk is for every attendee to walk away with a general understanding of the state and challenges of the field and hopefully be in a position to implement and build their own deep learning models.

Speakers
avatar for Peter Goldsborough

Peter Goldsborough

Research Intern, Facebook/Broad Institute of MIT and Harvard
I enjoy the intersection of blue-skies machine learning research and low-level infra engineering.


Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #4 Meydenbauer Center

3:15pm

Naked coroutines live (with networking)
C++ Coroutines come naked. Just the language feature, no library support apart from a few traits that allow developing coroutine adaptors.

In this session we will start with just a compiler that implements a coroutine TS and a reference networking TS implementation and through (mostly) live coding together we will develop a cool, efficient and beautiful async networking app.

Speakers
avatar for Gor Nishanov

Gor Nishanov

Principal Software Engineer, Microsoft
Gor Nishanov is a Principal Software Design Engineer on the Microsoft C++ team. He works on design and standardization of C++ Coroutines, and on asynchronous programming models. Prior to joining C++ team, Gor was working on distributed systems in Windows Clustering team.


Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #3 Meydenbauer Center

3:15pm

C++ and Persistent Memory Technologies, Like Intel's 3D-XPoint
With the advent of a new, persistent-memory-enabled world, the current software industry must prepare for changes. Looking forward to meet the new requirements set by this new type of hardware, a new standard API should be introduced to ease the adoption of this new and exciting technology. During the development of the NVM (Non Volatile Memory) Library, it became apparent that the C API is complex and hard to use. To remove some of the pain points, a proposal of a new C++ API was made.

This lecture will introduce the API and explain some of the intricacies behind it. This entails both the basic concepts of persistent memory programming, like pointers and transactions, and a prototype integration with the standard library's containers. Hopefully this will spark a discussion and will help validate the proposed changes. Deciding on an API this early on will help developers in the early adoption of this potentially game-changing technology.

Speakers
avatar for Tomasz Kapela

Tomasz Kapela

Software Engineer, Intel
Tomasz Kapela is a software engineer with 6 years of experience in the industry. He majored in radio communication systems from the Gdansk University of Technology in 2010. Since then he worked as a software developer and systems designer in Radmor, where he designed and implemen... Read More →


Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #2 Meydenbauer Center

3:15pm

Microcontrollers in Micro-increments : A Test-driven C++ Workflow for Embedded Systems
Baby steps are safe steps. Making small moves in code, driven by tests, and continuously refactoring helps to keep embedded development on the right track. With test-driven development we can move more quickly, cleanly, and safely.

With increased device capability comes increased expectations, and to meet these expectations we find that real-time operating systems, vendor-supplied drivers and third-party libraries are becoming the new normal for embedded projects. Debugging this complex embedded firmware directly on the target hardware, though, is a slow and painful process, and often with an uncertain outcome.

In this talk I’ll demonstrate on a realistic hardware design how different test-driven idioms for C++ on embedded can help us to both build the code right, and build the right code. I’ll show how continuous integration builds, sanitizers and other tools can leverage this investment in tests, give us a high level of confidence in our code changes, and reduce the amount of time spent on debug-on-hardware activity.

We’ll look at patterns of implementation in C++ that help to build testable embedded systems, as well as the trade-offs and compromises to a “pure” design ideal that we often have to make on these highly constrained devices.

Speakers
avatar for Mike Ritchie

Mike Ritchie

Developer and Technical Coach, 13coders
Mike is an independent developer and trainer, working with C++ since the mid -90s, with a couple of detours into engineering management. He works mainly on embedded systems, and his focus is on making test-driven development and continuous integration work well for small devices... Read More →


Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #1 Meydenbauer Center

3:15pm

TBA
Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #6 Meydenbauer Center

3:15pm

I Wish I Could Use C++ 1x/y/z :(
C++11, C++14 and C++17 provided a sensible amount of new libraries and language features. However, for some reasons ranging from inertia or even resistance to change, up to complicated customer demands or lack of good compiler support, using those new shiny tools can be out of the question. This tutorial will cover a selection of highly useful C++14/17 idioms and see how you can rebuild them in C++11/14 so you can use them in constrained contexts, or when the language support is there but the library support is not. We will also cover the actual state of popular compilers (GCC, Clang, Visual Studio) to see if they support what they claim to do, so the transition can be smoothed out.

A short list of points to be covered are: generic lambdas, if constexpr, tuple and typelist manipulation with integer_sequence, void_t, template-alias tricks, and fold operator emulation. For each of those, we'll introduce the feature, explain what kind of use cases they solve and how to reproduce them with an old compiler or a limited version of the language or standard library. The question will then be, how far back in time can we go for all of these.

Speakers
avatar for Joel Falcou

Joel Falcou

CTO, NUMSCALE
Joel Falcou is NumScale CTO. NumScale mission is to assist businesses in the exploration and subsequently the mastery of high-performance computing systems. | | He is also an assistant professor at the University Paris-Sud and researcher at the Laboratoire de Recherche d... Read More →


Thursday September 28, 2017 3:15pm - 4:15pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

Fantastic Algorithms and Where To Find Them
Come dive into some exciting algorithms — tools rare enough to be novel, but useful enough to be found in practice. Want to learn about "heavy hitters" to prevent DOS attacks? Come to this talk. Want to avoid smashing your stack during tree destruction? Come to this talk. Want to hear war stories about how a new algorithm saved the day? Come to this talk! We'll dive into the finest of algorithms and see them in use — Fantastic Algorithms, and Where To Find Them.

Speakers
avatar for Nicholas Ormrod

Nicholas Ormrod

Software Engineer, Facebook
Nicholas is a infrastructure engineer at Facebook. If he talks too much, disable him with a well-placed nerd snipe.


Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #2 Meydenbauer Center

4:45pm

LauncherOne rocket with C++ engine

Abstract: The most important aspects of rocket safety software development, from an idea, design, implementation to testing. Safe design patterns and critical error handling in fault tolerant systems.  

- Open source libraries can take you to space: How to choose open source libraries to be used for Federal Aviation Administration (FAA) certification, and correct use of them depending on the required safety level. Also will discuss how to handle FAA hard requirements throughout software development cycle.

- Safe design patterns: Will discuss multiple design patterns to be used in safety critical systems, a compile time observer pattern using template metaprogramming will be discussed. Also guidelines to use a pattern depending on safety level, timing requirements, memory layout and testing. 

- Error handling: Rocket errors are gold, precious and don’t want to lose them: When having an error is more important to get as much telemetry as possible before losing the rocket. Since testing a real rocket means a real mission, telemetry can make a difference for future flights and error handling is critical to achieve this. Will present error handling techniques in startup and run time including throwing policies, interfaces pre/post conditions and class interface design techniques to implement the error handling, also guidelines to use them depending on safety level and application, also deciding what is a fatal error. 


Speakers
DF

Diego Franco

Senior Software Engineer, Virgin Orbit
Diego Franco is a Senior Software Engineer at Virgin Orbit with over 15 years of C++ development, he's the main developer for the LauncherOne space rocket - Autonomous Flight Safety System, which makes sure the rocket is safe for public and crew members in a 747 airplane. Also he... Read More →


Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #3 Meydenbauer Center

4:45pm

C++17 Parallel Algorithms
This presentation describes the C++17 standard library parallel algorithms and how they are used. The algorithms are intended for the general software development community rather than addressing a few specialists.

Different kinds of parallelism are exposed using corresponding execution policies. Each execution policy implies specific constraints for the use of algorithms to enable the respective parallel approaches. The interface for execution policies is described together with the constraints of the defined execution policies. This presentation discusses the model behind the parallel algorithms and the associated constraints. Some example uses are shown together with results to motivate the importance of enabling parallelism in programs.

Speakers
DK

Dietmar Kühl

Engineer, Bloomberg LP
Dietmar Kühl is a senior software developer at Bloomberg L.P. working on the data distrubtion environment used both internally and by enterprise installations at clients. In the past, he has done mainly consulting for software projects in the finance area. He is a regular attende... Read More →


Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #1 Meydenbauer Center

4:45pm

Postmodern immutable data structures
The C++ elites have been talking for years about value semantics, immutability, and sharing by communicating. A better world without mutexes, races, observers, command patterns and so more lies ahead! When it comes to doing it in practice, it is not so easy. One of the main problem lies in our data structures...

Immutable data structures don't change their values. They are manipulated by producing new values. The old values remain there, and can be read safely from multiple threads without locks. They provide structural sharing, because new and old values can share common data — they are fast to compare and can keep a compact undo-history. As such, they are great for concurrent and interactive systems: they simplify the architecture of desktop software and allow servers to scale better. They are the secret sauce behind the success of Clojure and Scala, and even the JavaScript crowd is loving it via Facebook's Immutable.js.

We are presenting Immer, a C++ library implementing modern and efficient data immutable data structures.

In this session, we will talk about the architectural benefits of immutability and show how a very efficient yet powerful persistent vector type can be built using state of the art structures (Relaxed Radix Balanced Trees). We will also show an example application (a text-editor) built using the architectural style here proposed. Not only is its code extremely simple, it outperforms most similar programs. Don't believe it? Come and see!

Immer: immutable data structures | https://sinusoid.es/immer
Ewig: a text editor with an immutable data model | https://github.com/arximboldi/ewig

Speakers
avatar for Juan Pedro Bolivar Puente

Juan Pedro Bolivar Puente

Independent consultant, Sinusoidal engineering
Juanpe is a Berlin based freelance software engineer, with a focus on interactive software, modern C++, functional programming and open source strategy. Before he worked for Ableton and he has been involved in various music technology projects. He has also developed for the GNU p... Read More →


Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #4 Meydenbauer Center

4:45pm

So, you inherited a large code base...
This is a talk about solving the most difficult problem a software engineer ever faces, converting a large codebase with antiquated designs and spotty quality into a state-of-the-art, modern system. We'll be covering clang-based refactoring, mnemonic reasoning methods, safe rewrites, coding standards, and, oh yes, migration paths.

If you've ever been tasked with making a legacy codebase the best-in-class, or think you might, then this talk is for you.

Speakers
avatar for David Sankel

David Sankel

Bloomberg
David Sankel is a professional software developer/architect based in the USA and an active member of the C++ Standardization Committee. His prolific software developments have included CAD/CAM, computer graphics, visual programming languages, web applications, computer vision, and cryptography. He is a frequent speaker at the C++Now conferences and is especially well known for his advanced functional programming in C++ talks... Read More →


Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #5 Meydenbauer Center

4:45pm

TBA
Thursday September 28, 2017 4:45pm - 5:45pm
Meydenbauer TBA #6 Meydenbauer Center

6:45pm

Speakers Dinner
This is your opportunity to have a relaxing conversation with conference presenters. Registration is here: https://cppcon2017.eventbrite.com/

Thursday September 28, 2017 6:45pm - 8:30pm
Meydenbauer TBA #8 Meydenbauer Center

8:30pm

CppCon 2018 Kick-off Meeting
The planning committee for next year's conference starts now. Join us if you'd like to provide suggestions or otherwise pitch in.

Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, CppCon
Jon Kalb is a freelance C++ instructor and chairs CppCon, C++ Now, and the Boost Steering Committee. He has been programming in C++ for over 25 years and has written C++ for Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun, and Yahoo!
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

Software Engineer, Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers and scientists, he develops and analyzes new parallel programming models for exascale and post-Moor... Read More →

Thursday September 28, 2017 8:30pm - 10:00pm
Meydenbauer TBA #2 Meydenbauer Center

8:30pm

Lightning Talks
The adventure continues — come for bite size talks you'll want more of!

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for over 25-years. He is a regular speaker at various conferences and is passionate about teaching and training. Michael is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Pr... Read More →

Thursday September 28, 2017 8:30pm - 10:00pm
Meydenbauer TBA #1 Meydenbauer Center

8:30pm

Open Content Sessions: TBA
Thursday September 28, 2017 8:30pm - 10:00pm
Meydenbauer TBA #8 Meydenbauer Center
 
Friday, September 29
 

8:00am

Open Content Sessions: TBA
Friday September 29, 2017 8:00am - 8:45am
Meydenbauer TBA #8 Meydenbauer Center

9:00am

Eight Ways to Handle Non-blocking Returns in Message-passing Programs: from C++98 via C++11 to C++20
Shared-Nothing approach of "sharing memory by communicating" (instead of "communicating by sharing memory") gets more and more traction in the development world; this is not to mention that message-passing Shared-Nothing architectures have always been a cornerstone of both game development and UI development. These days, more and more projects realize the inherent dangers of combining business logic and thread sync within the same piece of code - which leads to cognitive overload (pushing developers well over 7+-2 boundary) and results in poor developer productivity, poor program reliability, and very often - subpar performance. In addition, message-passing programs allow to achieve determinism easily, which in turn provides very significant benefits, including such beauties as production post-mortem analysis, replay-based regression testing, and low-latency fault tolerance.

Within the realm of message-passing programs, the problem of processing non-void returns from non-blocking calls is a particularly ugly one. Over time, approaches to solving it have progressed from simple message-sending to OO-based callbacks, and further to the lambda pyramids and futures. Still, programming non-blocking calls is a Big Headache(tm). In this talk, we'll discuss _eight_ different ways of handling returns from non-blocking calls in the context of message-passing architectures (using event-driven architectures as an all-popular example of message-passing). We'll start with a simplistic message exchange, and will progress to void RPCs, OO-style callbacks, lambda pyramids, single-threaded futures, lambda-based "code builder", coroutines/fibers, and (currently MSVC-only) async/await.

Last but not least, we'll try to discuss three current C++ standard proposals which may help us to solve the problem, and will try to make a compelling case for Resumable Functions. We'll try to demonstrate that there _exist_ real-world use cases where Resumable Functions are substantially better than both Resumable Expressions and coroutines - and this should be sufficient to provide a strong argument for including Resumable Functions into the next C++ standard. In particular, we'll try to demonstrate that Suspend-Up model is a Good Thing(tm) at least for some very important use cases; in addition - we'll show some very practical issues which currently prevent both co-routines and Resumable Expressions from becoming The Only Way of providing resumable handling at least for message passing programs.

Speakers
avatar for Sergey Ignatchenko

Sergey Ignatchenko

Author, ITHare.com
Sergey has 20+ years of software development experience. In particular, he was a co-architect of a G20 online stock exchange, and a sole architect of a major online game with 400K+ simultaneous players. He's also known for his articles in CUJ, C++ Report, and Overload, as well as... Read More →


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #6 Meydenbauer Center

9:00am

Modern Allocators: The Good Parts
Memory allocators have a bad rap. Sure, they give us control, sometimes vital control, over how and where memory is allocated, but they seem so hard to use correctly. The allocator model that was first standardized in C++98 was put in place to solve a different problem; despite being called "allocators," control over memory allocation was, at best, a secondary consideration. Changes in C++11 and C++14 corrected many of the flaws, at the cost of complexity in the specification. If only there were a user manual and tutorial for allocators, much of that complexity would fall away and could be ignored. This talk strives to be that user manual and tutorial, intended to focus your attention on the important parts of modern allocators, and leaving most of the legacy stuff from 1998 behind. We will look at the easiest way to design a class that uses allocators, and walk through the creation of a real, useful allocator. In the process, I will introduce features in C++17 that can easily be adapted for use with today's C++11 and C++14 standard libraries. My goal is to make allocators approachable, so that you can use them appropriately in your own work.

Speakers
PH

Pablo Halpern

Pablo Halpern has been programming in C++ since 1989 and has been a member of the C++ Standards Committee since 2007. His work with allocators began at Bloomberg LP, where he developed an appreciation for the simple and powerful allocator model in use there. In 2005, he started w... Read More →


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #4 Meydenbauer Center

9:00am

The Holy Grail - A Hash Array Mapped Trie for C++
C++ has a handful of associative containers. We started with set and map, both based on node-based red-black trees. These are fine but are not the most efficient and, in particular, suffer from more cache misses than we’d like. If we want to build persistent versions of them it’s achievable but aggravates the problems even more and adds considerable extra complexity. (I know — I’ve done it!)  C++11 brought the hash-map based unordered_set and unordered_map, which are generally much faster, with better cache locality — but can be less memory-efficient and also don’t translate so easily into persistent versions.

But there exists another general-purpose data structure that combines many of the characteristics of trees and hash tables into something that in many important ways is superior to both, and with minimal downside (they are close but not quite as fast as pure hash tables). Hash Array Mapped Tries are more memory-efficient than hash tables and, as a bonus, are trivially made persistent — with big implications for concurrency, functional programming, and other applications that benefit from being able to treat them immutably (as well as share large amounts of common state in memory at once). This talk will describe how this data structure works from the ground up and look at a reference implementation I am writing with the intention of proposing as a Boost library — and possibly later for standardisation. We’ll also look at how it can be used in practice, and at some of the performance characteristics.

Speakers
avatar for Phil Nash

Phil Nash

Thing doer, Two Blue Cubes Ltd
Long time C++ developer but also dabbles with F#, Objective-C, Swift, C#, Python, D, Rust and others. | Open source author and contributor - particularly Catch - a C++ test framework in a single header file. | Interested in all forms of bettering oneself!


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #5 Meydenbauer Center

9:00am

C++ Exceptions and Stack Unwinding
Exceptions are often described as 'slow', and the standard advice is to use them only in exceptional circumstances. In this talk, we'll find out how slow exceptions really are by exploring the Itanium exception handling model.

We'll dive into several implementations (libunwind, gcc, llvm-libunwind), and learn about everything that happens between throw() and catch(). We will discover the answers to questions such as why throwing an exception takes a global lock (and how to avoid it), how caching can speed up the performance of exceptions, and how to get better stack traces.

Speakers
avatar for David Watson

David Watson

Engineer, Facebook
Dave Watson is an infrastructure engineer at Facebook. He has been focused on improving the application server stack, including improvements in RPC, load balancing, memory management, and asynchronous programming. He has contributed to many of Facebook's core services and OSS pro... Read More →


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #3 Meydenbauer Center

9:00am

Performance Benchmarking with Celero
Developing consistent and meaningful benchmark results for code is a complex task. Measurement tools exist (Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind, etc.) external to applications, but they are sometimes expensive for small teams or cumbersome to utilize. Celero is a small library which can be added to a C++ project and perform benchmarks on code in a way which is easy to reproduce, share, and compare among individual runs, developers, or projects.

This talk will start with a brief overview of baseline benchmarking and how proper measurements are made. It will then walk developers through the process of developing benchmark code in a way similar to many unit testing libraries. Through practical examples, methods for benchmark design and debugging will be explored. We will then use the library to plot and understand the results.

In the end, attendees should feel comfortable exploring the use of Celero in their own projects and adding baseline benchmarking to their testing and delivery processes.

Speakers
avatar for John Farrier

John Farrier

Chief Engineer, Booz Allen Hamilton
John Farrier is a software engineer, researcher, and musician. He designs software architectures for military modeling and simulation activities. His projects support efforts across the U.S. Department of Defense ranging from lab-based experimental software to fielded software... Read More →


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #1 Meydenbauer Center

9:00am

Undefined Behaviour is awesome!
Undefined behavior (UB) is one of the features of C++ that is both loved and hated. Every C++ developer cares about performance, which is why it is very important to understand what the compiler can optimize and what are the language guarantees. Many times programmers are too optimistic about what the compiler can optimize, or they waste time optimizing code by hand.

In this talk you will learn:
- what is the “as-if” rule
- why compilers know less than the programmer — the main problem with Translation Units
- why compilers optimize based on UB, but don't warn about it 
- why Undefined Behavior can transcend time, removing your whole code without running 88mph
- why having a more constrained language is better — optimizations that you can’t do in C



Speakers
avatar for Piotr Padlewski

Piotr Padlewski

SWE intern, Microsoft


Friday September 29, 2017 9:00am - 10:00am
Meydenbauer TBA #2 Meydenbauer Center

10:30am

What C++ developers should know about globals (and the linker)
Most C++ developers know that using globals (or singletons) excessively in code is usually a poor decision. But it is also hard to deny their usefulness in more than one situation: for loggers, factories, intrusive performance benchmarking, and other very useful applications, globals can be very helpful.

Unfortunately, usage of globals in C++ ends up exposing details of the language not seen so often otherwise. Instead of dealing with our tried-and-true, well specified compiler, we often need to look more at the behavior of the linker, which can vary more between platforms and between different options such as static vs dynamic linking.

This talk will look at some surprising pitfalls that can occur with globals: valid programs only a dozen lines long that can trigger segfaults when using the gcc linker. It will explore some of these issues using command line tools like nm and objdump. The talk will enumerate several pitfalls to be avoided. It will look at some of the different axes of the problem space such as: globals that are private versus public, eager versus lazy, global inter-dependencies, and quality of emitted assembly. Finally, solutions and idioms will be presented that address the major use cases, and make it easy for developers to use globals (only where necessary!) in a safe way.


Speakers
NF

Nir Friedman

Trading Software Developer, Tower Research Capital
After completing a PhD in physics, Nir started working doing C++ in low latency and high frequency trading. He's interested in the challenges of writing robust code at scale, and highly configurable code that minimizes performance trade-offs.


Friday September 29, 2017 10:30am - 11:00am
Meydenbauer TBA #3 Meydenbauer Center

10:30am

Understanding the runtime behaviors of C++ programs using uftrace tool
This talk will present the uftrace function graph tracing tool, which was first introduced at CppCon last year. The uftrace tool utilizes function instrumentation techniques from compilers to provide deeper understanding of execution behaviors in C/C++ programs.

uftrace provides multiple ways to analyze the runtime behavior of C/C++ programs and measures the execution time of each function without source code modification. In addition, uftrace is highly configurable and allows the user to apply numerous filters to any function in the program. The recorded trace data can be displayed in the console or in a graphical output such as chrome trace viewer or flamegraph.

In this talk, Honggyu will present the uftrace internals, recent changes and how it can be practically used on production quality C++ projects. For more information, please visit https://github.com/namhyung/uftrace.

Speakers
avatar for Honggyu Kim

Honggyu Kim

Software Engineer, LG Electronics
Honggyu Kim is a software engineer in LG Electronics and have been mainly working on software analysis and development tools. His interests are mainly in low-level embedded systems and he's also started working on JavaScript engines for webOS platform recently.


Friday September 29, 2017 10:30am - 11:00am
Meydenbauer TBA #1 Meydenbauer Center

10:30am

Optimizing compilation times of Generated Code with Templates
At Facebook, the main bottlenecks in build times are caused by auto-generated code from our core RPC Framework. Through the use of templates we were able to obtain up to 50% build speedup in our slowest compiling files. Generic programming is usually avoided because it slows down compile times. Why is it that, in this case, the use of templates actually improved it?

This talk will take a deep-dive into the entire compilation process, from parsing and linking to template instantiation and code optimizations. It will teach you how to gather concrete data on these build steps and the techniques used to move code to templates while reducing build times.

Speakers
avatar for Eddie Elizondo

Eddie Elizondo

Software Engineer, Facebook
Eddie is a Software Engineer working with Core Systems at Facebook


Friday September 29, 2017 10:30am - 11:00am
Meydenbauer TBA #2 Meydenbauer Center

10:30am

Traveling the Solar System with C++: Programming Rocket Science
Spacecraft travel our solar system with exquisite accuracy. It is almost commonplace to learn that a spacecraft hit bullseye to within a few seconds after over a decade of space travel. How do we do that? What does it entail to design and operate the trajectory of a spacecraft? Newton, Kepler, Einstein, Tsiolkovsky, Battin and many others gave us beautiful mathematical models of the universe. Beautiful, yes, but also perversely complex.

Without hope for analytical solutions, we must rely on numerical methods. Initially, numerical methods were executed by hand (people known as "The Computers"). Eventually we adopted electronic computers, and entered a multi-decade period of Fortran domination.

Over the last decade, we have been experiencing increased adoption of C++. Organizations feel attracted to C++'s uncompromising performance, and its ability to abstract away the overwhelming complexity of spacecraft trajectory calculations. But it has not been an easy move! For example: luminaries of the field are stuck in Fortran, and current Engineering schools seldom offer any C++ education.

As advanced scientific concepts require increasingly complex spacecraft trajectories, we see a bright future for C++ in this field. But we must be proactive in attracting, accommodating, and educating the current generation of engineers and scientists.

Speakers
avatar for Juan Arrieta

Juan Arrieta

CEO, Nabla Zero Labs
Juan holds a BSc (2002) in chemical engineering from Universidad Iberoamericana (Mexico City, Mexico) and a PhD (2007) from Carnegie Mellon University (Pittsburgh, USA), where his work focused on numerical optimization applied to spacecraft trajectory design. | | Upon conclu... Read More →


Friday September 29, 2017 10:30am - 11:30am
Meydenbauer TBA #4 Meydenbauer Center

10:30am

Designing a Unified Interface for Execution
If you were to ask a C++ developer the question "what is execution?" you may get a different answer depending on who you asked. This is because execution means something different to the various users of C++; in areas such as multi-core parallelism, heterogeneity, distributed systems and networking. There are many commonalities that can be drawn between these different use cases, however, each too has their own distinct requirements.

Now imagine if C++ could bring together all of these and form a single unified interface for execution, one which would allow a distinct separation of computations from their method of execution. This is the challenge which a C++ committee subgroup has undertaken.

A recent joint effort by a group of interested parties within the C++ committee has been working on a solution which will bring together the requirements of all of these use cases into a single unified interface for execution. This unified interface will provide a generalised way of describing execution that will serve as an abstraction underneath common C++ control structures such as async, task blocks and parallel STL, and above a wide range of resources capable of execution.

This talk takes a subjective look at the story so far; the original papers that paved the way to where we are now, the underlying design philosophy that will come to represent execution in C++, and the current state of the proposal in progress. It will also present the various use cases that influenced the proposal, how their requirements helped shape the design and what challenges are still to be overcome.

Speakers
avatar for Gordon  Brown

Gordon Brown

Staff Software Engineer, SYCL & C++, Codeplay Software
Gordon Brown is a senior software engineer at Codeplay Software specializing in heterogeneous programming models for C++. He has been involved in the standardization of the Khronos standard SYCL and the development of Codeplay's implementation of the standard from its inception... Read More →
MW

Michael Wong

Codeplay
Michael Wong is VP of R&D at Codeplay Software. He is a current Director and VP of ISOCPP , and a senior member of the C++ Standards Committee with more then 15 years of experience. | He chairs the WG21 SG5 Transactional Memory and SG14 Games Development/Low Latency/Financials C++ groups and is the co-author of a number C++/OpenMP/Transactional memory features including generalized attributes, user-defined literals, inheriting constructors, weakly ordered memory models, and explicit conversion operators. He has published numerous research papers and is the author of a book on C++11. He has been in invited speaker and keynote at numerous conferences. | | He is currently the editor of SG1 Concurrency TS and SG5 Transactional Memory TS. He is also the Chair of the SYCL standard and all Programming Languages for Standards Council of Canada. | | Previously, he was CEO of OpenMP involved with taking OpenMP toward Acceelerator support and the Technical Strategy Architect responsible for moving IBM's compilers to Clang/LLVM after leading... Read More →


Friday September 29, 2017 10:30am - 11:30am
Meydenbauer TBA #6 Meydenbauer Center

10:30am

Higher-order Functions in C++: Techniques and Applications
Higher-order functions are functions that take other functions as arguments. This is very frequently used in functional languages, somewhat less so in C++, although this is slowly changing since C++11 gave us lambdas and `std::function`... and frequently people don't realize that `std::function` is not a tool that fills all use cases.

This talk will first attempt to convince you that higher-order functions are useful; by both showing functionalities that you know that work with them already, and by showcasing some more interesting problems that can be solved easily by function composition. Next, it'll work through different approaches to implementing higher-order functions in C++ and their pros and cons, performance- and code-size-wise.

Speakers
avatar for Michał Dominiak

Michał Dominiak

Engineer, Software Developer, Nokia Networks
Bachelor of Engineering in Computer Science from Wrocław University of Technology. Professional and enthusiast programmer. Interested in the foundational problems of computing, from the lowest levels of CPU architectures, through operating systems and programming language design... Read More →


Friday September 29, 2017 10:30am - 11:30am
Meydenbauer TBA #5 Meydenbauer Center

11:05am

End-to-end Deadlock Debugging Tools at Facebook
Facebook has developed tooling to help quickly find and debug several classes of concurrency bugs in Facebook's large C++ codebase. In this talk, we will focus specifically on deadlocks and the tools we use to detect and prevent them. We will explore the various tools we use — some open source tools we have deployed and some we have developed — and how they work by walking through several examples of real-world bugs found by these tools in Facebook's large production systems.

Topics include:
* How we deploy and utilize ThreadSanitizer on Facebook's large codebase
* Linux eBPF tools to detect potential deadlocks on running binaries
* gdb extensions to examine mutex internals to detect deadlocks
* folly::Synchronized and other libraries that make it more difficult to introduce concurrency bugs


Speakers
avatar for Kenny Yu

Kenny Yu

Software Engineer, Facebook
Kenny Yu is a software engineer at Facebook. In his time there, he has focused on improving testing and developer experience for engineers at Facebook, working on things such as debugging tools and concurrency bug-finders. He currently works on Facebook's cluster manager and cont... Read More →


Friday September 29, 2017 11:05am - 11:35am
Meydenbauer TBA #3 Meydenbauer Center

11:05am

Howling at the Moon: Lua for C++ Programmers
C++ is a great tool for solving complex problems in a thorough way. But every once in a while, the desire for a simpler language emerges. For those parts of our code where performance is of secondary concern, but the ability to perform rapid iterations over the code is paramount, a scripting language might be a tempting choice. But integrating a second language besides C++ and managing the interaction between the two is also scary.

Lua is a lightweight, dynamic language that was designed to be used as an embedded language within existing applications. It is easy to learn, has very reasonable runtime performance, and a memory footprint small enough that it is usable even on embedded systems. Furthermore, it is almost trivial to integrate with C++.

This talk will give a brief introduction to the Lua scripting language, highlighting specifically how it can complement C++'s language features to enrich a developer's toolbox. In the second part of the talk, we will look at Lua's C API and give suggestions how to integrate it with a modern C++17 codebase. In particular we will focus on how to interface with the dynamic language Lua without compromising the benefits of C++'s strong type system.

Speakers
AW

Andreas Weis

BMW AG
Andreas Weis has been writing C++ code in many different domains, from real-time graphics, to distributed applications, to embedded systems. As a library writer by nature, he enjoys writing portable code and exposing complex functionalities through simple, richly-typed interfaces... Read More →


Friday September 29, 2017 11:05am - 11:35am
Meydenbauer TBA #1 Meydenbauer Center

11:05am

Inside the Qt Object Model
Programming your application with Qt means that you will sooner or later encounter the central QObject class, signal & slot connections, or generic properties. The object model makes it safe and easy to develop with components.

In this session we will take a look at the implementation of these features. For example, how emitting a signal with one line of code results in calling the right slot elsewhere. This is even possible when the sender lives in a different thread than the receiver. In addition, we will learn how reading and writing properties works behind the scenes.

Speakers
SH

Simon Hausmann

Principal Software Engineer, The Qt Company
Simon Hausmann is a principal software engineer with The Qt Company and maintainer of the QML library. He has been working on Qt for the past 14 years and continues to enjoy C++. He has contributed to various Qt modules such as the core libraries, the (infamous) meta-object compi... Read More →


Friday September 29, 2017 11:05am - 11:35am
Meydenbauer TBA #2 Meydenbauer Center

12:00pm

CppCon 2018 Planning Committee Work Session
This session is a follow-on to the kick-off meeting and is a chance for the planning committee to set up goals and milestones.

Moderators
avatar for Jon Kalb

Jon Kalb

Conference Chair, CppCon
Jon Kalb is a freelance C++ instructor and chairs CppCon, C++ Now, and the Boost Steering Committee. He has been programming in C++ for over 25 years and has written C++ for Amazon, Apple, Dow Chemical, Intuit, Lotus, Microsoft, Netscape, Sun, and Yahoo!
avatar for Bryce Adelstein Lelbach

Bryce Adelstein Lelbach

Software Engineer, Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers and scientists, he develops and analyzes new parallel programming models for exascale and post-Moor... Read More →

Friday September 29, 2017 12:00pm - 1:00pm
Room 303 Meydenbauer Center

12:00pm

Open Content Sessions: TBA
Friday September 29, 2017 12:00pm - 1:00pm
Meydenbauer TBA #8 Meydenbauer Center

1:30pm

The Point of Views: Multidimensional Index Sets for Data Locality in HPC Applications
In High Performance Computing, the commonly used concepts to formulate data access are fundamentally different from those provided by the STL. In this session, you will learn why programming abstractions for distributed container elements indeed need additional expressiveness and how modern C++ allows to achieve it.

Even for a seemingly trivial array there are countless ways to partition and store its elements in distributed memory, and algorithms are required to behave and scale identically for all of them. It also does not help that most applications operate on multidimensional data structures where efficient access to neighborhood regions is crucial. Among HPC developers, it is therefore widely accepted that canonical iteration space and physical memory layout must be specified as separate concepts. For this, iterators, even with the proposals for views and ranges, just are not enough.

The DASH C++ template library is an implementation of Partitioned Global Address Space (PGAS), a programming abstraction that presents distributed memory as unified virtual global memory. DASH is designed as a PGAS implementation of the STL and complies with its semantics and constraints. STL algorithms called with global iterators on distributed containers show expected behavior.

When we started to extend DASH by support for heterogeneous systems, it became obvious that the definition, conversion, and combination of iteration spaces asks for a more fundamental, formal approach. For this, we extended the proposed view- and range concepts by multidimensional index sets and achieved an expressive and efficient abstraction for multidimensional data.

Speakers
avatar for Tobias Fuchs

Tobias Fuchs

Research Associate, LMU Munich, Leibniz Supercomputing Centre
Tobi is a freelancer in embedded systems for over 10 years, especially medical devices, and went back to academia for PhD studies in High Performance Computing at LMU Munich. | He is the lead developer of the DASH C++ template library, a DFG research project, and currently focu... Read More →


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #5 Meydenbauer Center

1:30pm

Customizing the Standard Containers
Almost all of the the standard containers have “customization points”, ways that users can modify their behaviors.

Three of the common ones are:
  • Allocators
  • Comparison predicates
  • Hash functors

 

In this talk, we’ll explore these customization methods, and then survey the standard containers and container adaptors, and show how you can adapt them to your needs.

Examples included.

Speakers
MC

Marshall Clow

Qualcomm
Marshall has been programming professionally for 35 yearsHe is the author of Boost.Algorithm, and has been a contributor to Boost for more than 15 years. He is the chairman of the Library working group of the C++ standard committee. He is the lead developer for libc++, the C++ st... Read More →


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #6 Meydenbauer Center
  • Level Intermediate
  • Tags STL

1:30pm

Curiously Recurring Bug Patterns in C++ at Facebook
I've spent the last few years watching Facebook's C++ codebase grow by several orders of magnitude. Despite constantly improving abstractions, constantly improving tooling, frequent internal courses, and ongoing internal discussion, there are bug-patterns we simply cannot stop from being reintroduced into our code. My hope is to show some of the most common (and infamous) bugs in our history, and the surprising complexity that arises in some apparently simple situations.

This talk serves the dual purpose of educating the intermediate (and perhaps the occasional advanced) C++ programmer about some really nasty common pitfalls, as well as serves as a plea to experts to help further improve the language, libraries, and best practices to help educate and eradicate some of these problematic patterns.

Speakers
avatar for Louis Brandy

Louis Brandy

Engineering Director, Facebook
My team is responsible for the overall health of the Facebook C++ codebase, both the tools and the libraries. We work on: compilers, static/dynamic analysis, linters, large scale changes, and the core libraries.


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #2 Meydenbauer Center
  • Level Intermediate, Advanced, Expert
  • Tags bugs

1:30pm

Free Your Functions!
You are devoted to minimize coupling and duplication? You are taking care to maximize cohesion, flexibility, extensibility, encapsulation, testability, and even performance in order to achieve the high goals of (object-oriented) programming? Awesome! But wait: You still favor member functions? Seriously? You have been deceived! You have been praying at the altar of false promises! Shed the shackles of Java philosophy! Free your functions!

In this talk I will demonstrate why in C++ free functions should generally be preferred to member functions, and why free functions — not member functions! — provide you with all the aforementioned advantages you expect from object-oriented programming. Note, though, that this talk might fundamentally change your perception of C++ and object-oriented programming in general!

Speakers
avatar for Klaus Iglberger

Klaus Iglberger

Senior Software Engineer, Siemens
Klaus Iglberger has finished his PhD in computer science in 2010. Back then, he contributed to several massively parallel simulation frameworks and was active researcher in the high performance computing community. From 2011 to 2012, he was the managing director of the central in... Read More →


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #4 Meydenbauer Center

1:30pm

Compile-time reflection, Serialization and ORM Examples
We will discuss what reflection is and how it can be implemented in Modern C++. The techniques used will include a mix of C++11/14 features (void_t, tuple, index_sequence, variadic templates, auto functions, decltype(auto), constexpr, type_traits, etc), classic C++ features, and macros.

We’ll use a couple of example libraries to show the essence and power of compile-time reflection and show how to simplify and improve their implementation with C++17 features such as inline variables, constexpr if, structure binding, fold expressions, and string_view.

The first example is a library that can serialize a struct into any of a variety of data formats, such as JSON, XML, MessagePack, or a custom format.

We’ll then apply the same techniques to implement an Object-Relational Mapping (ORM) library to serialize structs into the tables of any of a variety of databases, such as SQLite, MySQL, Postgres, etc.

We’ll discuss some of the challenges and limitations of these techniques and what features could be added to C++ to improve support for compile-time reflection.

Speakers
avatar for Yu Qi

Yu Qi

Technical Director, purecpp.org
Yu is a C++ programmer with 10 years experience who lives in Zhuhai, Guangdong province, China. He loves modern C++ and has founded an open source community ( http://www.purecpp.org/ ) to promote C++11/14 in China. His focus is distributed systems and he is the author of rest_rp... Read More →


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #3 Meydenbauer Center

1:30pm

Going Nowhere Faster
You care about the performance of your C++ code. You have followed basic patterns to make your C++ code efficient. You profiled your application or server and used the appropriate algorithms to minimize how much work is done and the appropriate data structures to make it fast. You even have reliable benchmarks to cover the most critical and important parts of the system for performance. But you're profiling the benchmark and need to squeeze even more performance out of it... What next?

This talk dives into the performance and optimization concerns of the important, performance critical loops in your program. How do modern CPUs execute these loops, and what influences their performance? What can you do to make them faster? How can you leverage the C++ compiler to do this while keeping the code maintainable and clean? What optimization techniques do modern compilers make available to you? We'll cover all of this and more, with piles of code, examples, and even live demo.

While the talk will focus somewhat on x86 processors and the LLVM compiler, but everything will be broadly applicable and basic mappings for other processors and toolchains will be discussed throughout. However, be prepared for a lot of C++ code and assembly.

Speakers
avatar for Chandler Carruth

Chandler Carruth

C++ Lead, Google
Chandler Carruth leads the Clang team at Google, building better diagnostics, tools, and more. Previously, he worked on several pieces of Google’s distributed build system. He makes guest appearances helping to maintain a few core C++ libraries across Google’s codebase, and is active in the LLVM and Clang open source communities. He received his M.S. and B.S. in Computer Science from Wake Forest University, but disavows all knowledge of the contents of his... Read More →


Friday September 29, 2017 1:30pm - 2:30pm
Meydenbauer TBA #1 Meydenbauer Center

4:45pm

Open Content Sessions: TBA
Friday September 29, 2017 4:45pm - 5:45pm
Meydenbauer TBA #8 Meydenbauer Center

4:45pm

Building for the Best of Us: Design and Development with Kids in Mind

Building an API easy enough for kids to understand (in C++) is a challenge. Every design decision, from the circuit board to the plastic can effect the results. We'll talk about product design, manufacturing, firmware, software, and the Arduino API as we cover the Jewelbots timeline from Kickstarter to shipping to distribution. Additionally, hear from the two girls who are the top Jewelbots from the Bellevue area! You'll learn what they have built and how they view the future of C++.


Speakers
avatar for Sara Chipps

Sara Chipps

CEO, Jewelbots
Sara Chipps is a JavaScript developer based in NYC. She has been working on Software and the Open Source Community since 2001. She’s been obsessed with hardware and part of Nodebots since 2012.  She is the CEO of Jewelbots, a company dedicated towards drastically changing the number of girls entering STEM fields using... Read More →


Friday September 29, 2017 4:45pm - 5:45pm
Meydenbauer TBA #1 Meydenbauer Center

5:45pm

Kid-Friendly Buffet
Details TBA

Friday September 29, 2017 5:45pm - 6:30pm
Meydenbauer TBA #1 Meydenbauer Center

6:30pm

Jewelbots Build Workshop (1 of 2)
Looking for a fun way to spark your child's interest in coding? Consider Jewelbots.
Join us for:
  • An entry-level coding workshop geared towards kids (also fun for grownups)
  • Facepainting
  • Coding for Arduino!
  • A Craft Table
  • Learning and fun for all ages!

A hands-on event for kids and adults ages 8 and up to dig in and learn to code in C++ via the Jewelbots API. The goal of the event is to introduce adults and kids alike to the fun and magic of coding while learning about connected hardware and making new friends!

This a fun, inclusive family-friendly event for experienced coders and newbies alike.

This event is free and open to anyone that wants to attend and watch, but if you wish to rent a Jewelbot for the workshop, you'll need to reserve one in advance here:
    https://cppcon2017.eventbrite.com/
You'll also need a laptop with Linux, MacOS, or Windows (Chromebooks without Linux do not work). Save time and pre-download the Arduino IDE.

You can also purchase your own Jewelbot to bring to the workshop.

Note to participants that need to leave early: If you wish to attend the workshop please attend the first part starting at 6:30. The second part (from 7:30 to 8:30) is optional, providing additional time for further exploration.

Speakers
avatar for Sara Chipps

Sara Chipps

CEO, Jewelbots
Sara Chipps is a JavaScript developer based in NYC. She has been working on Software and the Open Source Community since 2001. She’s been obsessed with hardware and part of Nodebots since 2012.  She is the CEO of Jewelbots, a company dedicated towards drastically changing the number of girls entering STEM fields using... Read More →



Friday September 29, 2017 6:30pm - 7:30pm
Meydenbauer TBA #1 Meydenbauer Center

6:30pm

Open Content Sessions: TBA
Friday September 29, 2017 6:30pm - 8:30pm
Meydenbauer TBA #8 Meydenbauer Center

7:30pm

Jewelbots Build Workshop (2 of 2)
Looking for a fun way to spark your child's interest in coding? Consider Jewelbots.
Join us for:
  • An entry-level coding workshop geared towards kids (also fun for grownups)
  • Facepainting
  • Coding for Arduino!
  • A Craft Table
  • Learning and fun for all ages!

A hands-on event for kids and adults ages 8 and up to dig in and learn to code in C++ via the Jewelbots API. The goal of the event is to introduce adults and kids alike to the fun and magic of coding while learning about connected hardware and making new friends!

This a fun, inclusive family-friendly event for experienced coders and newbies alike.

This event is free and open to anyone that wants to attend and watch, but if you wish to rent a Jewelbot for the workshop, you'll need to reserve one in advance here:
    https://cppcon2017.eventbrite.com/
You'll also need a laptop with Linux, MacOS, or Windows (Chromebooks without Linux do not work). Save time and pre-download the Arduino IDE.

You can also purchase your own Jewelbot to bring to the workshop.

Note to participants that need to leave early: If you wish to attend the workshop please attend the first part starting at 6:30. The second part (from 7:30 to 8:30) is optional, providing additional time for further exploration.

Speakers
avatar for Sara Chipps

Sara Chipps

CEO, Jewelbots
Sara Chipps is a JavaScript developer based in NYC. She has been working on Software and the Open Source Community since 2001. She’s been obsessed with hardware and part of Nodebots since 2012.  She is the CEO of Jewelbots, a company dedicated towards drastically changing the number of girls entering STEM fields using... Read More →


Friday September 29, 2017 7:30pm - 8:30pm
Meydenbauer TBA #1 Meydenbauer Center
 
Saturday, September 30
 

9:00am

C++ Best Practices: Part I
“C++ Best Practices” is a two-day training course with programming exercises taught by Jason Turner. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have a beginner to intermediate knowledge of C++. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #1 11010 NE 8th St, Bellevue, WA 98004

9:00am

Crafting Embedded Software in C++: Part I
"Crafting Embedded Software in C++" is a two day training course taught by Dan Saks of Saks & Associates. This course is for students that have basic knowledge of the C++ language and standard library. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
DS

Dan Saks

President, Saks & Associates
Dan Saks is the president of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Dan used to write the “Programming Pointers” column for embedded.com online. He has also written columns for numerous print publicat... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #2 11010 NE 8th St, Bellevue, WA 98004

9:00am

Debugging and Profiling C++ Code on Linux: Part I
“Debugging and Profiling C++ Code on Linux” is a two-day training course with programming exercises taught by Thomas McGuire of The KDAB Group. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have basic knowledge of the C++ language. No prior knowledge of any presented tools is assumed. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Thomas McGuire

Thomas McGuire

Senior Software Engineer, KDAB
I'm a software engineer at KDAB, a consulting company for Qt, OpenGL and C++. In addition to writing code, I am also a trainer for Qt, C++ and debugging & profiling. | | I'm exclusively a Linux user, except once per year when I have to use Windows for the tax declaration so... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #3 11010 NE 8th St, Bellevue, WA 98004

9:00am

Exploring the C++ Standard Library: Part I
“Exploring the C++ Standard Library” is a two-day training course with programming exercises taught by Christopher Di Bella. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have a minimum of 3 months of experience with C++ and should have a familiarity with templates. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Christopher Di Bella, Codeplay Software, Ltd.
Christopher Di Bella is a software engineer for Codeplay’s runtime technology in Edinburgh, UK, and is also an avid C++ programmer. He previously worked as a software developer for Nasdaq, and as a university tutor/assistant instructor for the University of New South Wales’ A... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #4 11010 NE 8th St, Bellevue, WA 98004

9:00am

Move Semantics: Everything You Always Wanted to Know, But Were Afraid to Ask
“Move Semantics: Everything You Always Wanted to Know, But Were Afraid to Ask” is a one-day training course with programming exercises taught by Nicolai Josuttis. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday, September 30th (immediately after the conference). Students are expected to have a basic knowledge of C++ including C++11. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) is an independent system architect, technical manager, author, and consultant. He designs mid-sized and large software systems for the telecommunications, traffic, finance, and manufacturing industries. He is well known in the programming community because he not only speaks and writes with authority (being the (co-)author of the world-wide best sellers The C++ Standard Library... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #6 100 112th Ave NE, Bellevue, WA 98004

9:00am

Practical Modern C++: Part I
“Practical Modern C++” is a two-day training course taught by Patrice Roy of Sherbrooke University. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Since the class will involve problem-solving exercises, participants are expected to bring their laptops (or equivalent development tool) and a recent C++ compiler (preferably one with C++17 support). Lunch is included. Course and instructor details are available here.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke / Collège Lionel-Groulx
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 20 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005... Read More →


Saturday September 30, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #5 100 112th Ave NE, Bellevue, WA 98004
 
Sunday, October 1
 

9:00am

C++ Best Practices: Part II
“C++ Best Practices” is a two-day training course with programming exercises taught by Jason Turner. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have a beginner to intermediate knowledge of C++. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Jason Turner

Jason Turner

Developer, Trainer, Speaker
Host of C++Weekly https://www.youtube.com/c/JasonTurner-lefticus, Co-host of CppCast http://cppcast.com, Co-creator and maintainer of the embedded scripting language for C++, ChaiScript http://chaiscript.com, and author and curator of the forkable coding standards document http... Read More →


Sunday October 1, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #1 11010 NE 8th St, Bellevue, WA 98004

9:00am

Crafting Embedded Software in C++: Part II
"Crafting Embedded Software in C++" is a two day training course taught by Dan Saks of Saks & Associates. This course is for students that have basic knowledge of the C++ language and standard library. It is offered at the Meydenbauer from 9AM to 5PM on Saturday and Sunday, September 17th & 18th (immediately prior to the conference). Box lunch included. Course and instructor details are available here.

Speakers
DS

Dan Saks

President, Saks & Associates
Dan Saks is the president of Saks & Associates, which offers training and consulting in C and C++ and their use in developing embedded systems. Dan used to write the “Programming Pointers” column for embedded.com online. He has also written columns for numerous print publicat... Read More →


Sunday October 1, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #2 11010 NE 8th St, Bellevue, WA 98004

9:00am

Debugging and Profiling C++ Code on Linux: Part II
“Debugging and Profiling C++ Code on Linux” is a two-day training course with programming exercises taught by Thomas McGuire of The KDAB Group. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have basic knowledge of the C++ language. No prior knowledge of any presented tools is assumed. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Thomas McGuire

Thomas McGuire

Senior Software Engineer, KDAB
I'm a software engineer at KDAB, a consulting company for Qt, OpenGL and C++. In addition to writing code, I am also a trainer for Qt, C++ and debugging & profiling. | | I'm exclusively a Linux user, except once per year when I have to use Windows for the tax declaration so... Read More →


Sunday October 1, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #3 11010 NE 8th St, Bellevue, WA 98004

9:00am

Exploring the C++ Standard Library: Part II
“Exploring the C++ Standard Library” is a two-day training course with programming exercises taught by Christopher Di Bella. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Participants should have a minimum of 3 months of experience with C++ and should have a familiarity with templates. Lunch is included. Course and instructor details are available here.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Christopher Di Bella, Codeplay Software, Ltd.
Christopher Di Bella is a software engineer for Codeplay’s runtime technology in Edinburgh, UK, and is also an avid C++ programmer. He previously worked as a software developer for Nasdaq, and as a university tutor/assistant instructor for the University of New South Wales’ A... Read More →


Sunday October 1, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #4 11010 NE 8th St, Bellevue, WA 98004

9:00am

Practical Modern C++: Part II
“Practical Modern C++” is a two-day training course taught by Patrice Roy of Sherbrooke University. It is offered at the Sheraton Bellevue Hotel from 9AM to 5PM on Saturday and Sunday, September 30th and October 1st (immediately after the conference). Since the class will involve problem-solving exercises, participants are expected to bring their laptops (or equivalent development tool) and a recent C++ compiler (preferably one with C++17 support). Lunch is included. Course and instructor details are available here.

Speakers
avatar for Patrice Roy

Patrice Roy

Professor, Université de Sherbrooke / Collège Lionel-Groulx
Patrice Roy has been playing with C++, either professionally, for pleasure or (most of the time) both for over 20 years. After a few years doing R&D and working on military flight simulators, he moved on to academics and has been teaching computer science since 1998. Since 2005... Read More →


Sunday October 1, 2017 9:00am - 5:00pm
Sheraton Bellevue Hotel TBA #5 100 112th Ave NE, Bellevue, WA 98004