Loading…
This event has ended. Visit the official site or create your own event on Sched.
View analytic

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

Saturday, September 23
 

9:00am

Lightning Talks
Saturday September 23, 2017 9:00am - 9:30am
Colossus Theater Meydenbauer Center

9:00am

Concurrent Thinking in C++
"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 23 & 24 (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
Room 402 Meydenbauer Center

9:00am

Modern C++ Template Programming
“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
avatar for Stephen Dewhurst

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
Room 406 Meydenbauer Center

9:00am

Modernizing Your C++
"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 23 & 24 (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
Room 407 Meydenbauer Center

9:00am

Programming with Qt/Widgets
"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 23 & 24 (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
Room 408 Meydenbauer Center

9:00am

The Standard Library from Scratch
“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
Room 401 Meydenbauer Center

5:30pm

Volunteers Dinner
We are treating the Aqua Army (the CppCon volunteers) to a pizza dinner, but we are welcoming anyone that would like to meeting the volunteers. Dinner is free for volunteers, but you can join the fun for $20, which pays for the pizza, soft drinks, and your first beer (the rest are on you).

If you are leaving from the Meydenbauer, let's meet on the second floor about 5:15 and walk over together.

Tom Isaacson has provided a map.

Saturday September 23, 2017 5:30pm - 7:30pm
Zeeks Pizza 10201 NE 10th St, Bellevue, WA 98004
 
Sunday, September 24
 

9:00am

Concurrent Thinking in C++
"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 23 & 24 (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
Room 402 Meydenbauer Center

9:00am

Modern C++ Template Programming
“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
avatar for Stephen Dewhurst

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
Room 406 Meydenbauer Center

9:00am

Modernizing Your C++
"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 23 & 24 (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
Room 407 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
Room 403 Meydenbauer Center

9:00am

Programming with Qt/Widgets
"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 23 & 24 (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
Room 408 Meydenbauer Center

9:00am

The Standard Library from Scratch
“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
Room 401 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

5:30pm

Tee Shirt Night Dinner
Tee Shirt Night is our way to helping you get to know other conference attendees even before the conference has officially started. It works best if you brought a C++ (or CppCon) shirt with you. But even if you didn't you can join the fun.

Here is how:
  1. Put on your C++ or CppCon shirt (or don't, if you didn't bring one).
  2. Go to one of the resturants listed below.
  3. Look for others wearing a C++ or CppCon shirt.
  4. Ask to join their group.
  5. Enjoy getting to know other attendees before the conference starts!
  6. Get a promo deal from the restuarant!

Here are the resturants and the promo deals they are offering to any party with someone wearing a C++ or CppCon shirt:

Have fun, but save room for cake at the Registration Reception.

Tom Isaacson created a map of the participating resturants.

Sunday September 24, 2017 5:30pm - 8:30pm
TBA

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
Atanasoff Hall 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
Atanasoff-Berry Hall 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
Atanasoff-Berry Hall 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
Berry Hall 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 has been using C++ for over 20 years and hasn't given up yet. His interests include cutting edge language features, functional programming, and solving the hard problems. Toby lives in Auckland, New Zealand, where he organizes the Auckland C++ Meetup.


Monday September 25, 2017 11:00am - 12:00pm
Atanasoff Hall 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
Ferranti (403) 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

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
Manchester (407) 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
avatar for Stephen Dewhurst

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
Colossus Theater 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
Hi Everyone, | | I am Scott Wardle, I have been in games over 20 years, mostly at EA Vancouver. I like to solve hard problems. I am known for Systems Programming, C++ and turning my problems into solutions for everyone.



Monday September 25, 2017 11:00am - 12:00pm
Harvard (406) Meydenbauer Center

11:00am

Time Travel Debugging: Root Causing Bugs in 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.

Time Travel Debugging (TTD) is a reverse debugging toolkit for Windows that makes debugging these kinds of problems far easier, in both small programs and commercial-scale software like Windows and Office.  It's been an invaluable debugging tool for software developers and escalation engineers within Microsoft for many years.  We’ve spent the last couple of years improving performance, scalability, and usability, and are excited to finally be able to release a public preview of Time Travel Debugging.

In this interactive and hands-on session, we'll show you how to download and make use of our first public preview of Time Travel Debugging, demonstrate how to use TTD, and walk through the root cause analysis of some typically difficult-to-solve bugs like memory corruption, API misuse, and race conditions.



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 Time Travel Debugging (TTD) reverse debugging toolkit. 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 Run... Read More →
avatar for Jordi Mola

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 which are still internal to Microsoft. One of... Read More →
avatar for Ken Sykes

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
ENIAC (404) Meydenbauer Center

12:00pm

Book Signing: Scott Meyers
Scott will be on hand at the book store exhibit in the first floor lobby to sign books.

Speakers
avatar for Scott Meyers

Scott Meyers

Scott Meyers devoted over 25 years to the advancement of C++ before retiring from active involvement in it at the end of 2015. He's best known for his books, Effective C++, Effective Modern C++, More Effective C++, and Effective STL.


Monday September 25, 2017 12:00pm - 12:25pm
Book Store First Floor of the Meydenbauer Center

12:30pm

The Programmer CEO: Tales From Starting a Company Aimed at C++ Developers
Many programmers think about starting a company. It’s often not about getting rich so much as to pursue a vision for a computer program that is much bigger than one person could do alone. Like most programmers who start up, I had no formal training and little experience outside of software development. I was naively confident, and didn’t know what I didn’t know (it turned out that that was a LOT!)

In this talk I’ll present some of the lessons I’ve learned along the way, many of which were a complete surprise to me. I’ll cover getting investment, building the product, building a team, and getting and keeping customers. Little of this talk is directly about programming, but it is aimed at programmers who want to create code in order to create a business, or who want to create a business so that they can create the code they want.

Much of the content is also relevant for programmers who find themselves doing non-programming tasks, such as managing people or customer-facing roles. This talk contains candid, warts-and-all war stories, and because it’s for programmers, comes with a no adverts and no business-talk BS guarantee.

Speakers
avatar for Greg Law

Greg Law

CEO, Undo Ltd
Greg is co-founder and CEO at Undo. He is a programmer at heart, but likes to keep one foot in the software world and one in the business world. Greg finds it particularly rewarding to turn innovative software technology into real business development. Greg has over 20 years of e... Read More →


Monday September 25, 2017 12:30pm - 1:30pm
ENIAC (404) Meydenbauer Center

12:30pm

Trainers Panel I
Have you considered on-site training for your team?

Join a panel of professional C++ trainers discussing what you need to know about hiring an outsider to bring your team up to speed on C++ best practices and new features.

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!

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 →
avatar for Stephen Dewhurst

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 →
avatar for Kate Gregory

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. 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 →
avatar for Scott Meyers

Scott Meyers

Scott Meyers devoted over 25 years to the advancement of C++ before retiring from active involvement in it at the end of 2015. He's best known for his books, Effective C++, Effective Modern C++, More Effective C++, and Effective STL.
avatar for Anthony Williams

Anthony Williams

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


Monday September 25, 2017 12:30pm - 1:30pm
Colossus Theater Meydenbauer Center

1:35pm

Book Signing: Anthony Williams
Anthony will be on hand at the book store exhibit in the first floor lobby to sign books.

Speakers
avatar for Anthony Williams

Anthony Williams

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


Monday September 25, 2017 1:35pm - 1:55pm
Book Store First Floor of the 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

Senior Software Engineer, NVIDIA
Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Colossus Theater Meydenbauer Center

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 →
avatar for Michael Wong

Michael Wong

VP Research & Development, 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
Atanasoff Hall 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 →
avatar for Ansel Sermersheim

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 Copper... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Harvard (406) 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
ENIAC (404) 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
Berry Hall 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
Ferranti (403) 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
avatar for Anastasia Kazakova

Anastasia Kazakova

Product Marketing Manager, JetBrains
As a C and C++ software developer, Anastasia Kazakova created real-time *nix-based systems and pushed them to production for 8 years. She has a passion for networking algorithms and embedded programming and believes in good tooling. With all her love for C++, she is now the Product Marketing Manager... Read More →


Monday September 25, 2017 2:00pm - 3:00pm
Manchester (407) 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
ENIAC (404) 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

Senior Software Engineer, NVIDIA
Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Colossus Theater 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 →
avatar for Michael Wong

Michael Wong

VP Research & Development, 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
Atanasoff Hall 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

Senior Software Developer, 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
Berry Hall 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
Harvard (406) 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
Rong Lu is a Program Manager in the Visual C++ team at Microsoft. She has been working on the Visual Studio team for the past 10 years since she graduated with her master degree in computer science. She is currently working on Visual Studio tools for game development, Visual C... Read More →


Monday September 25, 2017 3:15pm - 4:15pm
Manchester (407) 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
Ferranti (403) 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
Colossus Theater 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
Ferranti (403) 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
Manchester (407) 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
Atanasoff Hall 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
Berry Hall 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
ENIAC (404) 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
avatar for Luis Martinez de Bartolome

Luis Martinez de Bartolome

Software engineer. Conan co-founder, Jfrog
Luis is a full stack software engineer. 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
Harvard (406) 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
Manchester (407) 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
avatar for Charles Bailey

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
Ferranti (403) 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
Colossus Theater 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.

This we've got the the chairs of the Core Evolution and Language Evolution working groups, joined by the primary authors of such major upcoming features as concepts, metaclasses, ranges, modules, coroutines, compile time programming, and the spaceship operator.

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!

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 a member of the C++ Standards Committee and of the Boost community, where he authored the Boost.Hana metaprogrammi... Read More →
avatar for Eric Niebler

Eric Niebler

Facebook
I've been doing C++ professionally for the past 20 years, first for Microsoft, then as an independent consultant. Right now, I'm working on bringing the power of "concepts" and "ranges" to the Standard Library with the generous help of the Standard C++ Foundation. Ask me about th... Read More →
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.
GD

Gabriel Dos Reis

Principal Software Engineer, Microsoft
avatar for Bjarne Stroustrup

Bjarne Stroustrup

Managing Director,, Morgan Stanley
C++: history, design, use, standardization, future; performance, reliability; software developer education; | distributed systems
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.
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 →
avatar for Ville Voutilainen

Ville Voutilainen

Senior Software Engineer, The Qt Company
Ville Voutilainen is the Chair of the Evolution Working Group, and also a gcc/libstdc++ developer. He's the Finnish representative in the C++ committee, and has contributed to numerous C++11 and C++14 facilities, including override/final, lambda init-captures, aggregate NSDMIs, a... Read More →
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 →


Monday September 25, 2017 8:30pm - 10:00pm
Colossus Theater Meydenbauer Center
 
Tuesday, September 26
 

8:00am

Package management for C++ OSS libraries on Windows with vcpkg
This session covers the new open source vcpkg system that simplifies acquiring and building unmodified open source libraries on Windows. Vcpkg does not require additional source code or prebuilt binaries, and the library catalog currently provides access to over 300 C++ libraries for different architectures, 90% of them added by the community.

The session covers how to use vcpkg to acquire and build open source libraries that you use within your project, and also how to add C++ libraries into the vcpkg catalog. Vcpkg is maintained at https://github.com/Microsoft/vcpkg/ and accepts contributions

Speakers
avatar for Eric Mittelette

Eric Mittelette

Program Manager, Microsoft
A Developer Evangelist since 2000, Eric has a focus on open source software and frameworks at Microsoft Open Technologies, Inc, he works now as a Senior Program Manager for the Visual C++ (VCLib). Eric has been passionate about code and algorithms since the 90's and works with C... Read More →


Tuesday September 26, 2017 8:00am - 8:45am
ENIAC (404) 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

Senior 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 →
avatar for Ruyman Reyes

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 Khr... Read More →
avatar for Michael Wong

Michael Wong

VP Research & Development, 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
Colossus Theater 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
Harvard (406) 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
ENIAC (404) 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
Ferranti (403) 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 an overview of mobile cross-platform C++ development, an explanation of what Djinni does and why it is useful, and details on several Djinni-based app architectures I have used.

Agenda:
- Mobile C++ Architecture Overview
- What is Djinni?
- Example 1: "Hello World"
- Example 2: User Preferences
- Example 3: Google Analytics
- Challenges Encountered
- Additional Resources


Speakers
avatar for Stephen Spann

Stephen Spann

Owner/Developer, demic apps LLC
I am an app developer building progressive web apps and cross-platform iOS and Android apps both independently and for clients. My session covers developing apps for iOS and Android utilizing C++ and Dropbox's Djinni tool.



Tuesday September 26, 2017 9:00am - 10:00am
Manchester (407) 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
Berry Hall 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 Time Travel Debugging (TTD) reverse debugging toolkit. 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 Run... Read More →


Tuesday September 26, 2017 9:00am - 10:00am
Atanasoff Hall Meydenbauer Center

10:05am

Book Signing: Bjarne Stroustrup
Bjarne will be on hand at the book store exhibit in the first floor lobby to sign books.

Speakers
avatar for Bjarne Stroustrup

Bjarne Stroustrup

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


Tuesday September 26, 2017 10:05am - 10:25am
Book Store First Floor of the 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
Atanasoff-Berry Hall Meydenbauer Center

12:30pm

CppCon Program Committee
If you are on the CppCon Program Committee or if you have considered joining, this session is for you. This will be our first opportunity to meet as a group, face to face.

We'll discuss the CppCon PC Reviewer's Guide and share ideas about how to inprove the submission review process for all involved, including submitters.

Our goal is to have a common understanding what session ratings mean and what our role is in the program development process.


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

Senior Software Engineer, NVIDIA
Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →

Tuesday September 26, 2017 12:30pm - 1:30pm
Ferranti (403) Meydenbauer Center

12:30pm

Recruiters Panel
A crucial part of the recruitment process is getting your CV ready. That's the first thing the recruiter looks at, and that's where you need to make a good first impression; you won't have that chance again later. There's a lot of details that can make a CV good or bad, but many of them are not very obvious for a first-timer CV writer.

We've arranged a panel of recruiters who are among the exhibitors present at CppCon this year; they are going to help you understand what they are going for in a CV, what they consider red flags, and - maybe - some secrets of what makes the CV look very appealing to them. The panel is primarily targetted at first-time job or internship seekers, mainly students, but feel free to come - no matter how many times you've rewritten your CV, you may still learn something.

Moderators
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.

Exhibitors
avatar for Kevin P. Fleming

Kevin P. Fleming

Member of the CTO Office, Bloomberg
Member of the CTO Office organizing technology community engagement, including open source projects, conferences, blogs, and more.
RM

Randal Matthias

Business Development Director, Semantic Designs
Automated Code Analysis and Transformation.Former Managing Director, blackboxIT IT staffing and consulting
avatar for Andrew Pardoe

Andrew Pardoe

MSVC Compiler & Tools, Microsoft
PS

Prashant Singh

Manager, Commvault
ST

Sylvie Tehbelian

Senior Global Talent Acquisition Manager, MPC Film


Tuesday September 26, 2017 12:30pm - 1:30pm
Colossus Theater 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
Berry Hall 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
avatar for Ansel Sermersheim

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 Copper... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
Atanasoff Hall 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
Ferranti (403) 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

Ninja/Jedi/Tony, Christie Digital
Tony has been coding for well over 25 years, and maybe coding well for some of that. Lots of pixel++, UX, threading, etc. Previously at Inscriber, Adobe, BlackBerry, he now enables Painting with Light at Christie. He is on the C++ Committee. He is a Ninja and a Jedi. Lock-free is... Read More →


Tuesday September 26, 2017 2:00pm - 3:00pm
ENIAC (404) 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
Manchester (407) 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
Harvard (406) 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
Colossus Theater 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
Berry Hall 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
avatar for Ansel Sermersheim

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 Copper... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
Atanasoff Hall 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
Ferranti (403) 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
Harvard (406) 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
Colossus Theater 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
avatar for Anastasia Kazakova

Anastasia Kazakova

Product Marketing Manager, JetBrains
As a C and C++ software developer, Anastasia Kazakova created real-time *nix-based systems and pushed them to production for 8 years. She has a passion for networking algorithms and embedded programming and believes in good tooling. With all her love for C++, she is now the Product Marketing Manager... Read More →


Tuesday September 26, 2017 3:15pm - 4:15pm
ENIAC (404) 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
Berry Hall 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
UNIVAC (409) Meydenbauer Center

4:45pm

Hands-On With Google's Common Libraries
An introduction to the design and compatibility goals for Abseil - Google's new common C++ libraries project. I'll summarize some style points and policies that affect Abseil and its users, and demo hands-on many of the debugging features of the library. 

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 4:45pm - 5:45pm
Colossus Theater 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

Senior Software Developer, 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
Atanasoff Hall 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
Ferranti (403) 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
Manchester (407) 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
Teresa Johnson works on compiler optimization at Google. Prior to joining Google in 2011, she developed compiler optimizations for the Itanium compiler at HP, and received a PhD from the University of Illinois at Urbana-Champaign.


Tuesday September 26, 2017 4:45pm - 5:45pm
ENIAC (404) 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
Harvard (406) 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
Colossus Theater Meydenbauer Center

8:30pm

C++ in Academia
Should computer science and software engineering majors learn C++ at the university? Should it be taught as a first language? Where else does it belong in the curriculum? How does one teach best practices to undergraduates? What should graduates know about C++ by the time they leave school?

Come join experienced professors Chuck Allison, Andrew Lumsdaine, Patrice Roy, and Bjarne Stroustrup as they share their insights and perspectives on teaching C++ in academia. They will discuss the forces that shape what is appropriate for teaching C++ at the university level, what the challenges are, and what has worked for them over the years. Come prepared with questions and answers for this Open Content session.

See you Tuesday night!

Moderators
avatar for Chuck Allison

Chuck Allison

Professor, Utah Valley University
Chuck Allison is professor and chair of Computer Science at Utah Valley University. Before that he spent 20 years as a software engineer at various large corporations in the western U.S. He was an active contributor to the C++98 standard, having designed and provided the reference implementation for std::bitset and std::vector/boost::dynamic_bitset. He was an editor and columnist at the C/C++ Users Journal from... Read More →

Speakers
avatar for Chuck Allison

Chuck Allison

Professor, Utah Valley University
Chuck Allison is professor and chair of Computer Science at Utah Valley University. Before that he spent 20 years as a software engineer at various large corporations in the western U.S. He was an active contributor to the C++98 standard, having designed and provided the reference implementation for std::bitset and std::vector/boost::dynamic_bitset. He was an editor and columnist at the C/C++ Users Journal from... Read More →
avatar for Andrew Lumsdaine

Andrew Lumsdaine

Chief Scientist, Pacific Northwest National Laboratory/University of Washington
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 →
avatar for Bjarne Stroustrup

Bjarne Stroustrup

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


Tuesday September 26, 2017 8:30pm - 10:00pm
ENIAC (404) Meydenbauer Center
 
Wednesday, September 27
 

8:00am

Emulating a BBC Micro in Javascript
Total fun talk! No C++ at all: but my story on how I implemented a cycle-perfect 6502 emulator for the BBC Micro (a British home computer from the 1980s)...in Javascript! And how - amazingly - it's fast enough to run in a browser, even on a cell-phone!

Includes some fun tales of how old games protection systems work, and more information than any sane human would ever want to know about how the innards of the venerable 6502 work.

Talk is an updated version of https://www.youtube.com/watch?v=37jyHQT7fXQ.

Speakers
avatar for Matt Godbolt

Matt Godbolt

Senior Software Engineer, DRW
Matt Godbolt is a software engineer with trading firm DRW, and the creator of the Compiler Explorer website. He is passionate about writing efficient code. He has previously worked at on mobile apps at Google, run his own C++ tools company and spent more than a decade making cons... Read More →


Wednesday September 27, 2017 8:00am - 8:45am
ENIAC (404) Meydenbauer Center

8:30am

ISO SG14 Working Meeting
Limited Capacity full
Adding this to your schedule will put you on the waitlist.

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.
avatar for Michael Wong

Michael Wong

VP Research & Development, 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, Ballroom A 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
ENIAC (404) 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
Harvard (406) 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
avatar for Kate Gregory

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. 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
Atanasoff Hall 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
Manchester (407) 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
Colossus Theater 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’.
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 and libraries of Advanced Installer such as: IIS, Repackager, OS... Read More →



Wednesday September 27, 2017 9:00am - 10:00am
Ferranti (403) Meydenbauer Center

10:30am

Meta: Thoughts on generative C++
Two years ago, I started to focus on exploring ways that we might evolve the C++ language itself to make C++ programming both more powerful and simpler. The only way to accomplish both of those goals at the same time is by adding abstractions that let programmers directly express their intent—to elevate comments and documentation to testable code, and elevate coding patterns and idioms into compiler-checkable declarations. The work came up with several potential candidate features where judiciously adding some power to the language could simplify code dramatically, while staying true to C++'s core values of efficient abstraction, closeness to hardware, and the zero-overhead principle.

The first two potential candidate features from that work to be further developed and proposed for ISO C++ are the <=> unified comparison operator (minor) and what I've provisionally called "metaclasses" as a way to generatively write C++ types (major). This talk is about the latter, and includes design motivation, current progress, and some live online compiler demos using the prototype Clang-based compiler built by Andrew Sutton and hosted at godbolt.org.

Speakers
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.


Wednesday September 27, 2017 10:30am - 12:00pm
Atanasoff Hall Meydenbauer Center

12:30pm

C++ Community Building Birds of a Feather
Are you a C++ community leader? Would you like to be?

If you are or would like to be working to build a C++ community, either on-line or in meat space, we'd like to hear from you about your challenges and your successes.

We'll hear from sucessful community leaders, answer questions, and share resources and ideas. We'll discuss user groups, conferences, podcast, and online communities and forums.

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!
JW

Jens Weller

CEO, Meeting C++

Wednesday September 27, 2017 12:30pm - 1:10pm
Ferranti (403) Meydenbauer Center

12: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 12:30pm - 1:30pm
Colossus Theater Meydenbauer Center

12:30pm

Optimizations and Debug Quality
Have you ever had an assert get triggered only to result in a useless core dump with missing variable information or an invalid callstack? Common factors that go into selecting a C or C++ compiler are: availability, correctness, compilation speed and application performance. A factor that is often neglected is debug information quality, which symbolic debuggers use to reconcile application executable state to the source-code form that is familiar to most software engineers.

When production builds of an application fail, the level of access to program state directly impacts the ability for a software engineer to investigate and fix a bug. If a compiler has optimized out a variable or is unable to express to a symbolic debugger how to reconstruct the value of a variable, the engineer’s investigation process is significantly impacted. Either the engineer has to attempt to recreate the problem, iterate through speculative fixes or attempt to perform prohibitively expensive debugging, such as reconstructing program state through executable code analysis.

This talk compares debug information quality between two popular compilers: gcc and clang. We will introduce the topic of optimization and highlight examples of their impact on debuggability. Attendees will walk away with a greater understanding of debuggability in their C++ applications.

Speakers
avatar for Samy Al Bahra

Samy Al Bahra

CTO/ Co-Founder, Backtrace
Samy Al Bahra is the cofounder of Backtrace, where he is helping build a modern debugging platform for today’s complex applications. Prior to Backtrace, Samy was a principal engineer at AppNexus, where he played a lead role in the architecture and development of many mission-crit... Read More →



Wednesday September 27, 2017 12:30pm - 1:30pm
ENIAC (404) Meydenbauer Center

1:00pm

ISO SG14 Working Meeting
Limited Capacity full
Adding this to your schedule will put you on the waitlist.

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.
avatar for Michael Wong

Michael Wong

VP Research & Development, 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, Ballroom A 11010 NE 8th St, Bellevue, WA 98004

1:10pm

Captioning and Translating C++ Videos
The C++ videos can be viewed in multiple languages by an audience a few dozen times broader than today.
  • If you are a speaker and want your videos to be viewed by the whole world but not just by English-speakers then you can facilitate translation by providing original captions and translating to other language you speak.
  • If you regularly analyse C++ videos in details, translate the fragments of it for yourself and would like to benefit the other people's translation then why not sharing the translation with the community? If you want your name to be recognizable you can write your name in the translation you submit.
  • If you are interested in C++ videos with captions/translations then there is a resource that gathers in one place the links to C++ videos in the language of your interest - http://cppvap.wikidot.com/wiki:captions-catalog.
This talk tells how you can participate in this initiative and what you can get rfom it.

Speakers
avatar for Robin Kuzmin

Robin Kuzmin

Sr. Software Engineer
Crazy about C++, especially behind the compiler curtains, implicit code, standardization. Previously mostly in Hardware Simulation, Firmware Dev in C. Currently in medical devices, embedded Linux, C++. Russian speaker. Co-Founder and Master Admin of cppvap.wikidot.com (C++ Videos... Read More →


Wednesday September 27, 2017 1:10pm - 1:30pm
Ferranti (403) Meydenbauer Center

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
Manchester (407) 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
ENIAC (404) 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 Dev. Engineer, Amazon Web Services, Inc
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
Harvard (406) 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
Atanasoff Hall Meydenbauer Center

2:00pm

Language support for compile-time reflection
For the past year or so, I have worked with Herb Sutter on language support for compile-time programming, reflection, metaclasses, and code injection for the C++ programming language. This talk will focus on the related language features of static reflection and projection. These features aim to help programmers work with source code as data, and in some limited ways, use that data to write software.

I plan to trace the evolution of this work from its original proposal to its current implementation in the Clang C++ compiler (two implementations, actually). In particular, I will discuss design criteria, decisions, and issues related to reflection and projection as we implemented 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 (i.e., what can you do and what can't you do).

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
Colossus Theater 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
Ferranti (403) 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
ENIAC (404) Meydenbauer Center

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
avatar for Jeffrey Mendelsohn

Jeffrey Mendelsohn

Bloomberg LP


Wednesday September 27, 2017 3:15pm - 4:15pm
Atanasoff Hall 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, Self-Directed
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
Colossus Theater 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
Manchester (407) 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
Ferranti (403) 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
avatar for Isabella Muerte

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
Harvard (406) Meydenbauer Center

3:30pm

ISO SG14 Working Meeting
Limited Capacity filling up

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.
avatar for Michael Wong

Michael Wong

VP Research & Development, 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, Ballroom A 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
Harvard (406) 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

Ninja/Jedi/Tony, Christie Digital
Tony has been coding for well over 25 years, and maybe coding well for some of that. Lots of pixel++, UX, threading, etc. Previously at Inscriber, Adobe, BlackBerry, he now enables Painting with Light at Christie. He is on the C++ Committee. He is a Ninja and a Jedi. Lock-free is... Read More →


Wednesday September 27, 2017 4:45pm - 5:45pm
ENIAC (404) 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
avatar for Matt Kulukundis

Matt Kulukundis

Senior Software Engineer, Google
Matt is a senior software engineer on the C++ libraries team at Google.  Prior to Google he has worked on compilers, machine learning, and underwater robotics.  In his free time, he scuba dives in warm places.


Wednesday September 27, 2017 4:45pm - 5:45pm
Atanasoff Hall 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
Ferranti (403) 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
Manchester (407) 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
avatar for Ingve Vormestrand

Ingve Vormestrand

IncludeOS
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
Colossus Theater Meydenbauer Center

6:00pm

Qt Happy Hour

Join the Qt team to “mix and mingle” with our Qt experts. Learn more about Qt, the cross-platform application & UI development framework.

Learn how you can use Qt to power your next desktop, embedded, mobile and wearable projects in a fun interactive environment. Attendees will also have the chance to network with fellow users and engage with the Qt team including Lars Knoll, CTO of The Qt Company and Chief Maintainer of Qt Project as well as Simon Hausmann, Senior Software Engineer at The Qt Company.

Qt Happy Hour – Bellevue, WA
Wednesday, September 27, 2017
6 p.m. – 8 p.m. (check in opens at 5:30 p.m.)

Seattle Marriott Bellevue
200 110th Ave NE
Bellevue, WA 98004
b/t 2nd St & 4th St

Separate registration is required for this event.
The deadline to register is Wednesday, September 20, 2017. Qualified registrants for the Qt Happy Hour will receive a confirmation email.

Register here!


Please contact Iris Yamashita at Iris.Yamashita@qt.io or (408) 906-8468  for any questions or comments.

Map to the Marriott


Wednesday September 27, 2017 6:00pm - 9:00pm
Amuse Restaurant & Bar 200 110th Ave NE Bellevue, WA 98004 b/t 2nd St & 4th St

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
Colossus Theater Meydenbauer Center

8:30pm

Learning C++ Isn't Difficult -- Teaching C++ Is The Trick
Learning to correctly use C++ is not difficult: teaching proper C++ usage is the complex bit. Given the correct resources, anyone can learn C++ -- at any stage -- with ease. We need to make sure that we're providing these resources.

C++ is also rapidly evolving: we've got C++17 around the corner, lots of Technical Specifications, and some excellent third-party libraries. How can we fit all of this into a three or six month course, especially when new papers and libraries are coming out all the time?

This talk doesn't have solutions to all of the problems (there are too many for one hour!), but it does offer insight into how to address them, and leaves ample time for discussion so that other teachers can share what has worked for them. We'll address resourcing, problem sets, compilers, assignments, libraries, and when to teach recently-standardised language features.

Speakers
avatar for Christopher Di Bella

Christopher Di Bella

Staff Software Enigneer, ComputeCpp Runtime, Codeplay Software
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 →


Wednesday September 27, 2017 8:30pm - 10:00pm
Manchester (407) Meydenbauer Center

8:30pm

Optimizing Code Speed and Space with Build Time Switches
Our compilers and linkers are powerful tools and like many power tools, mastery means understanding the settings. Come join compiler experts to get your questions answered on how to get the best from your code whether you are building for speed or space.

This panel is presented by the Northwest C++ Users’ Group: http://nwcpp.org/

Moderators
avatar for Brett Searles

Brett Searles

Principal Architect, Attobotics
Work in hardware, embedded, graphics and web-based software space. Currently working on a Holographic Surgical Center to allow surgeons to perform simulated surgeries on real patient data. Also working with a major electronics distributor on a SAAS tool for their customers to eas... Read More →

Speakers
avatar for Chandler Carruth

Chandler Carruth

Software Engineer, 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 →
avatar for Matt Godbolt

Matt Godbolt

Senior Software Engineer, DRW
Matt Godbolt is a software engineer with trading firm DRW, and the creator of the Compiler Explorer website. He is passionate about writing efficient code. He has previously worked at on mobile apps at Google, run his own C++ tools company and spent more than a decade making cons... Read More →
avatar for Jim Radigan

Jim Radigan

VC++ Sr. Architect, Microsoft


Wednesday September 27, 2017 8:30pm - 10:00pm
ENIAC (404) Meydenbauer Center
 
Thursday, September 28
 

8:00am

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

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
ENIAC (404) 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
Harvard (406) Meydenbauer Center

9:00am

Language Support for Metaprogramming in C++
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
Atanasoff Hall 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 a member of the C++ Standards Committee and of the Boost community, where he authored the Boost.Hana metaprogrammi... Read More →


Thursday September 28, 2017 9:00am - 10:00am
Berry Hall 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
Ferranti (403) 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
Colossus Theater Meydenbauer Center

10:30am

Qt as a C++ Framework: History, Present State and Future
Qt is one of the largest and most widely used C++ frameworks. It is fully cross-platform, covering all functionality required to develop advanced graphical applications. The talk will go through important parts of Qt's history from it's roots to what it is today. We will have a look into the relation between Qt and C++, some of the design philosophies driving the evolution of Qt. I'll go through the current state of the frameworks, latest releases, ongoing development focus, and give an outlook into the future.

Speakers
avatar for Lars Knoll

Lars Knoll

CTO, The Qt Company
Lars is The Qt Company CTO and Qt Project Chief Maintainer. He has been working on Qt for more than 17 years starting as a software engineer to later leading the global Qt engineering team in Nokia before the Digia acquisition in October 2012. Lars has been an active member of the KDE community and the architect behind... Read More →


Thursday September 28, 2017 10:30am - 12:00pm
Atanasoff-Berry Hall Meydenbauer Center
  • Level Beginner, Intermediate, Advanced, Expert
  • Tags GUI, Qt

12:05pm

Book Signing: Herb Sutter
Herb will be on hand at the book store exhibit in the first floor lobby to sign books.

Speakers
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.


Thursday September 28, 2017 12:05pm - 12:25pm
Book Store First Floor of the Meydenbauer Center

12: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 →

Thursday September 28, 2017 12:30pm - 1:30pm
Colossus Theater Meydenbauer Center

12:30pm

Trainers Panel II
Have you considered on-site training for your team?

Join a panel of professional C++ trainers discussing what you need to know about hiring an outsider to bring your team up to speed on C++ best practices and new features.

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!

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 →
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 →
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 software... Read More →
avatar for Dan Saks

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 publications... Read More →
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 →


Thursday September 28, 2017 12:30pm - 1:30pm
ENIAC (404) Meydenbauer Center

1:35pm

Book Signing: Nicolai Josuttis
Nicolai will be on hand at the book store exhibit in the first floor lobby to sign books, including his just published Second Edition of C++ Templates: The Complete Guide.

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 →


Thursday September 28, 2017 1:35pm - 1:55pm
Book Store First Floor of the 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
Berry Hall 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 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 25 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 and analytics, I'm now workin... Read More →


Thursday September 28, 2017 2:00pm - 3:00pm
ENIAC (404) 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
Ferranti (403) Meydenbauer Center

2:00pm

Mix Tests and Production Code With Doctest - Implementing and Using the Fastest Modern C++ Testing Framework
Not a typical talk about testing. Here are some quotes from the Program Committee about it:

  • "Seeing a talk proposal about a new unit test framework made me quite skeptical. But then I looked at slides from one of the previous talks, and this looks very cool."
  • "I think others will be just as interested; this is just the kind of talk we want at the conference."
  • "Doing interesting and meaningful things in header-only libraries can be a fascinating topic, and this presentation appears to address some very interesting learnings from such an experience."
  • "The presentation is clearly well-prepared, having been given previously and iterated upon."

  • 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 - type-erased user-registerable translators
    • write a header-only library which compiles very very fast not at the cost of runtime performance
    • implement assert macros that don't result in code bloat
    • deal with warnings outside of the framework header - generated by code expanded from macros
    • 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
    Harvard (406) 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
    Colossus Theater 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 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
    avatar for Dmitry Panin

    Dmitry Panin

    Software Engineer, Facebook
    Dmitry is a software engineer at Facebook working in Ads Infrastructure Team. He has been contributing to efficiency, scalability and reliability of C++ backend services responsible for ads delivery. He is currently hacking on Facebook's build infrastructure and C++ codebase itse... Read More →


    Thursday September 28, 2017 2:00pm - 3:00pm
    Atanasoff Hall 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

    Software Engineer, Facebook
    I enjoy the intersection of blue-skies machine learning research and low-level infra engineering.


    Thursday September 28, 2017 3:15pm - 4:15pm
    Berry Hall 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
    Atanasoff Hall 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
    Ferranti (403) 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
    ENIAC (404) 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
    Colossus Theater 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
    Atanasoff Hall 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 along with testing, also guidelines to use them depending on safety level and application, and deciding what is a fatal error. 


    Speakers
    avatar for Diego Franco

    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
    Harvard (406) 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
    avatar for Dietmar Kühl

    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
    Colossus Theater 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
    Ferranti (403) Meydenbauer Center

    4:45pm

    How to break an ABI and keep your users happy
    Technical debt is the bane of most established libraries, whether it is standard library or boost or local library developed in house. Paying this debt is expensive and in many cases seems infeasible.

    As a result of several (justified at the time) decisions Google accumulated serious technical debt in how we use std::string. This became a blocking issue in our effort to open source Google’s common libraries.

    To fix this we needed to break libstdc++ std::string ABI. This is the story of how we survived it kept Google still running.

    Speakers
    avatar for Gennadiy Rozental

    Gennadiy Rozental

    Software Engineer, Google
    Gennadiy Rozental is the long time contributor to Boost libraries and a developer and maintainer for Boost.Test library. After working on core infrastructure for financial markets data and quantitative research libraries he is now a member of the common libraries team in Google... Read More →


    Thursday September 28, 2017 4:45pm - 5:45pm
    Manchester (407) 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
    Berry Hall Meydenbauer Center

    6:45pm

    Meet the 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
    ENIAC (404) 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

    Senior Software Engineer, NVIDIA
    Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →

    Thursday September 28, 2017 8:30pm - 10:00pm
    Ferranti (403) 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
    Colossus Theater Meydenbauer Center

    8:30pm

    AMD ROCm and the Heterogeneous System Architecture for HW accelerated C++ and high level languages
    Attendees will learn what allows these architectures using computational HW accelerators like GPUs, DSPs and others with native C++, without resorting to proprietary APIs or programming libraries or limited language features. It outlines the architectural pillars that make the accelerators a peer to the host CPUs and support full C++, and an overview of the open source AMD ROCmTM stack and software ecosystem providing the tools to use it on Intel and AMD based host platforms.

    Speakers
    avatar for Paul Blinzer

    Paul Blinzer

    Fellow, AMD
    Paul Blinzer works on a wide variety of Platform System Software architecture projects and specifically on the Heterogeneous System Architecture (HSA) System Software at Advanced Micro Devices, Inc. (AMD) as a Fellow in the System Software group. Living in the Seattle, WA area, during his career he has worked in various roles on system level driver development, system software development, graphics architecture, graphics... Read More →


    Thursday September 28, 2017 8:30pm - 10:00pm
    Harvard (406) Meydenbauer Center

    8:30pm

    C++ in the Internet of Things
    C++ has not always been the first language choice to use in embedded environments, but with the advent of modern C++, its use has been on the rise. Developing for embedded environments generally and the Internet of Things (IoT) specifically, presents challenges for which modern C++ offers a unique tool set. Come ask the experts on how they view C++ in this space and how to use modern C++ to get the best performance possible to meet the demands of IoT.

    This panel is presented by the Northwest C++ Users’ Group: http://nwcpp.org/

    Moderators
    avatar for Brett Searles

    Brett Searles

    Principal Architect, Attobotics
    Work in hardware, embedded, graphics and web-based software space. Currently working on a Holographic Surgical Center to allow surgeons to perform simulated surgeries on real patient data. Also working with a major electronics distributor on a SAAS tool for their customers to eas... Read More →

    Speakers
    JB

    Jelani Brandon

    Software Engineer, Microsoft Azure IoT Team
    Jelani has been working in the software industry for 20 years and in IoT industry for the past 9.  Along with working in the Azure IoT Team since its inception he also has worked on Microsoft Windows CE and Compact OS.  Previously he worked in Las Vegas for International Game Tec... Read More →
    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 →
    avatar for Lloyd Moore

    Lloyd Moore

    President, CyberData Corporation
    Lloyd Moore is the founder and owner of CyberData Corporation, which provides consulting services in the robotics, machine vision and industrial automation fields. Lloyd has worked in software industry for 25 years. His formal training in biological-based artificial intelligence, electronics, and psychology. Lloyd is also currently the president of... Read More →
    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 →
    avatar for Dan Saks

    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 publications... Read More →
    avatar for Ewerton Scaboro da Silva

    Ewerton Scaboro da Silva

    Software Engineer, Microsoft
    Ewerton has been working with software development for 10+ years in many languages, platforms and protocols. He graduated from the Federal University of Itajubá/Brazil, and worked previously with data security (Hewlett Packard) and real-time communication systems (Microsoft Comm... Read More →


    Thursday September 28, 2017 8:30pm - 10:00pm
    Manchester (407) Meydenbauer Center
     
    Friday, September 29
     

    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 co_await.

    Last but not least, we'll try to compare these different ways-to-handle-non-blocking-returns from the practical point of view, as well as the ways these eight ways are related to current C++ standard proposals; in addition - I'll argue for two important things-to-keep-in-mind for standard writers and implementors.

    Speakers
    avatar for Sergey Ignatchenko

    Sergey Ignatchenko

    Author, ITHare.com Website GmbH
    Sergey has 20+ years of software development experience, including 15+ years of experience in architectural positions. Among other things, 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... Read More →



    Friday September 29, 2017 9:00am - 10:00am
    Colossus Theater 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++17 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
    avatar for Pablo Halpern

    Pablo Halpern

    Intel
    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
    Atanasoff Hall 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

    Developer Advocate, JetBrains
    I'm the author of the test framework, Catch, and also have feet in the Swift and F# worlds. | As Developer Advocate at JetBrains I'm involved with CLion, AppCode and ReSharper C++.


    Friday September 29, 2017 9:00am - 10:00am
    ENIAC (404) 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
    Berry Hall Meydenbauer Center

    9:00am

    Performance Benchmarking with Celero
    Let's talk about performance optimization!  

    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 an overview of baseline benchmarking, how proper measurements are made, and offer guidelines for performance optimization. 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
    Harvard (406) 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

    masters student, University of Warsaw


    Friday September 29, 2017 9:00am - 10:00am
    Ferranti (403) 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
    avatar for Nir Friedman

    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
    Berry Hall 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
    ENIAC (404) 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.

    https://github.com/eduardo-elizondo/cppcon2017

    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
    Colossus Theater 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
    Ferranti (403) 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

    Senior 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 →
    avatar for Michael Wong

    Michael Wong

    VP Research & Development, 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
    Harvard (406) 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
    Atanasoff Hall 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
    Berry Hall 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
    avatar for Andreas Weis

    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
    Colossus Theater 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
    avatar for Simon Hausmann

    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
    ENIAC (404) 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

    Senior Software Engineer, NVIDIA
    Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →

    Friday September 29, 2017 12:00pm - 1:00pm
    Zuse (303) Meydenbauer Center

    12:00pm

    C++ in High Performance Computing BoF
    Discussion panel on C++ in the HPC and scientific computing industries.

    Moderators
    avatar for Bryce Adelstein Lelbach

    Bryce Adelstein Lelbach

    Senior Software Engineer, NVIDIA
    Bryce Adelstein Lelbach is a senior software engineer on the CUDA driver team at NVIDIA. Bryce is passionate about parallel programming. He maintains Thrust, a C++ parallel algorithms library, and he is one of the developers of the HPX C++ runtime system. He spent five years wor... Read More →
    avatar for Andrew Lumsdaine

    Andrew Lumsdaine

    Chief Scientist, Pacific Northwest National Laboratory/University of Washington

    Friday September 29, 2017 12:00pm - 1:00pm
    Colossus Theater Meydenbauer Center

    1:30pm

    The Point of Views: Multidimensional Index Sets for Data Locality in HPC Applications
    In High Performance Computing, data access has complex implications and requires concepts that are fundamentally different from those provided in the STL.
    Iterators as we know them just are not enough.
    The proposed range concepts for the standard library are a significant improvement but are designed for the mental model of iterating and mapping values, not hierarchical domain decomposition.

    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, we use views based on multidimensional index sets, inspired by the proposed range concepts.

    In this session, we will explain the challenges when distributing container elements for thousands of cores and how modern C++ allows to achieve portable efficiency.
    As an HPC afficionado, you know you want this:

    copy( matrix_a | local() | block({ 2,3 }), matrix_b | block({ 4,5 }) )

    If this does not look familiar to you: we give a gentle introduction to High Performance Computing along the way.

    Speakers
    avatar for Tobias Fuchs

    Tobias Fuchs

    Research Associate, LMU Munich, Leibniz Supercomputing Centre
    [ cpplang.slack.com : @fuchsto ] | | Tobi is a freelancer in embedded systems and real-time applications for over 10 years, mostly for medical devices, and went back to academia for PhD studies in High Performance Computing at LMU Munich. | He is the lead developer of the... Read More →



    Friday September 29, 2017 1:30pm - 2:30pm
    Harvard (406) 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
    avatar for Marshall Clow

    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
    ENIAC (404) 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
    Atanasoff Hall 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
    Colossus Theater 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
    Ferranti (403) 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

    Software Engineer, 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
    Berry Hall Meydenbauer Center

    2:45pm

    Unbolting the Compiler's Lid: What Has My Compiler Done for Me Lately?
    In 2012, Matt and a colleague were arguing whether it was efficient to use the then-new-fangled range for. During the discussion a bash script was written to quickly compile C++ source and dump the assembly. Five years later and that script has grown into a website relied on by many to quickly see the code their compiler emits, to compare different compilers' code generation and behaviour, to quickly prototype and share code, and investigate the effect of optimization flags.

    In this talk Matt will not only show you how easy (and fun!) it is to understand the assembly code generated by your compiler, but also how important it can be. He'll explain how he uses Compiler Explorer in his day job programming low-latency trading systems, and show some real-world examples. He'll demystify assembly code and give you the tools to understand and appreciate how hard your compiler works for you.

    He'll also talk a little about how Compiler Explorer works behind the scenes, how it is maintained and deployed, and  share some stories about how it has changed over the years. By the end of this session you'll be itching to take your favourite code snippets and start exploring what your compiler does with them.

    Speakers
    avatar for Matt Godbolt

    Matt Godbolt

    Senior Software Engineer, DRW
    Matt Godbolt is a software engineer with trading firm DRW, and the creator of the Compiler Explorer website. He is passionate about writing efficient code. He has previously worked at on mobile apps at Google, run his own C++ tools company and spent more than a decade making cons... Read More →


    Friday September 29, 2017 2:45pm - 4:30pm
    Berry Hall 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
    ENIAC (404) Meydenbauer Center

    4:45pm

    The Future of Texture Compression
    Textures and images are everywhere in today's world. Compressing those images well improves streaming performance, video, dramatically reduces the size and download times of apps. It can give you more realistic virtual reality experiences, more apps that can run on a small mobile device, a better digital map of our world, it can reduce our impact on climate change through storage savings, and so much more.

    In the past few years, because of the rapid development in GPUs and innovations in algorithms, the way we approach texture compression has changed. Binomial is developing Basis, a supercompressed texture solution that will also provide an open file format standard in the graphics industry through The Khronos Group that's free for anyone to target.

    Basis is also written entirely in C++. Binomial co-founders Rich Geldreich and Stephanie Hurlburt will present their latest work in Basis and give insights into how texture compression will continue to evolve.

    Speakers
    avatar for Rich Geldreich

    Rich Geldreich

    Graphics Engineer & Co-Founder, Binomial
    Rich works at Binomial, were he's working on "Basis", a new transcoding-based texture compression system for GPU textures. He's also worked on several open source data lossless compression libraries, such as LZHAM and miniz.
    avatar for Stephanie Hurlburt

    Stephanie Hurlburt

    Graphics Engineer & Co-Founder, Binomial
    Stephanie is building Basis, a texture compressor, at Binomial. She loves all things VR/AR/MR, C++, optimization, graphics, and games. Previously, she worked with C++ and graphics programming at Oculus and Unity.


    Friday September 29, 2017 4:45pm - 5:45pm
    Manchester (407) Meydenbauer Center

    4:45pm

    Implementing C++ Modules in G++

    C++ modules-ts[1] proposes a module system, with defined interfaces, implementations and importing. I shall outline the new semantics, their impact on the ABI and build systems, and discuss the, in-progress, implementation in the GNU C++ Compiler.

    [1] JTC1/SC22/WG21/n4681, 'Working Draft, Extensions to C++ for Modules', 2017-07-14, Gabriel Dos Reis


    Speakers
    avatar for Nathan Sidwell

    Nathan Sidwell

    Software Engineer, Facebook
    Nathan is a developer of the GNU Compiler Collection, particularly the C++ Front End. His current major project is implementing the modules TS.


    Friday September 29, 2017 4:45pm - 5:45pm
    Harvard (406) Meydenbauer Center

    4:45pm

    C++/WinRT and the Future of C++ on Windows
    This talk highlights efforts by Kenny Kerr, Herb Sutter, Gabriel Dos Reis, and others to make Windows a great place for C++ developers, replacing proprietary extensions and tools with standard C++ code. The talk begins with a quick introduction on what C++/WinRT is, how it helps make it super simple to create projects targeting Windows that use just ordinary C++ code, how the project uses advanced C++17 and TS features today, the roadmap for the next few months, and then how we’re looking ahead at things like modules and metaclasses to dramatically improve the way we think of and use C++ on Windows.

    Speakers
    avatar for Scott Jones

    Scott Jones

    Senior Software Engineer, Microsoft
    Scott works on several diagnostics features of Microsoft Windows, including Windows Device Portal, WinRT diagnostic APIs, and the browser's F12 network tracing. A few months ago, Scott joined Kenny Kerr to develop and ship the C++/WinRT projection library.
    avatar for Kenny Kerr

    Kenny Kerr

    Microsoft
    Kenny is an author, systems programmer, and the creator of C++/WinRT. He is also an engineer on the Windows team at Microsoft where he is changing the way developers approach OS and app development with beautiful high-performance libraries and tools.


    Friday September 29, 2017 4:45pm - 5:45pm
    Ferranti (403) Meydenbauer Center

    4:45pm

    My Little Object File: How Linkers Implement C++
    Ever wonder how the linker turns your compiled C++ code into an executable file? Why the One Definition Rule exists? Or why your debug builds are so large? In this talk we'll take a deep dive and follow the story of our three adventurers, ELF, MachO, and COFF as they make their way out of Objectville carrying C++ translation units on their backs as they venture to become executables. We'll see as they make their way through the tangled forests of name mangling, climb the cliffs of thread local storage, and wade through the bogs of debug info. We'll see how they mostly follow the same path, but each approach the journey in their own way. 

    We'll also see that becoming an executable is not quite the end of their journey, as the dynamic linker awaits to bring them to yet a higher plane of existence as complete C++ programs running on a machine. 

    Speakers
    MS

    Michael Spencer

    Compiler Engineer, Sony Interactive Entertainment
    Michael Spencer is a Compiler Engineer at Sony Interactive Entertainment where he has spent 6 years works on PlayStation's C++ toolchain. He is an active member of the LLVM community focusing on object files and linkers. He also serves as Sony's representative to the ISO C++ stan... Read More →


    Friday September 29, 2017 4:45pm - 5:45pm
    Colossus Theater Meydenbauer Center

    5:30pm

    Kid-Friendly Buffet
    We are hosting a kid-friendly pizza buffet at California Pizza Kitchen for attendees and families that are attending the Jewelbot workshop.

    The cost of $15 for adults and $10 for kids 12 and under will cover soft drinks and the pizza buffett.

    Pre-registration is not required, but we'd really like it if you could RSVP to give us some idea of what to expect. Please RSVP to dining@cppcon.org.

    If you are leaving from the Meydenbauer, let's meet on the second floor right after the sessions end at 5:45.

    Here is a map of the Meydenbauer Center and California Pizza Kitchen.

    Friday September 29, 2017 5:30pm - 6:30pm
    California Pizza Kitchen 595 106th Ave NE, Bellevue, WA 98004

    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
    UNIVAC (409) 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
    UNIVAC (409) Meydenbauer Center
     
    Saturday, September 30
     

    9:00am

    C++ Best Practices
    “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
    Snoqualmie North Sheraton Bellevue

    9:00am

    Crafting Embedded Software in C++
    "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 30 & October 1 (immediately after the conference). Box lunch included. Course and instructor details are available here.

    Speakers
    avatar for Dan Saks

    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 publications... Read More →


    Saturday September 30, 2017 9:00am - 5:00pm
    Bel-Air Sheraton Bellevue

    9:00am

    Debugging and Profiling C++ Code on Linux
    “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 software... Read More →


    Saturday September 30, 2017 9:00am - 5:00pm
    Phoenix Sheraton Bellevue

    9:00am

    Exploring the C++ Standard Library
    “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

    Staff Software Enigneer, ComputeCpp Runtime, Codeplay Software
    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
    Somerset III Sheraton Bellevue

    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
    Snoqualmie South Sheraton Bellevue

    9:00am

    Practical Modern C++
    “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
    Somerset I Sheraton Bellevue
     
    Sunday, October 1
     

    9:00am

    C++ Best Practices
    “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
    Snoqualmie North Sheraton Bellevue

    9:00am

    Crafting Embedded Software in C++
    "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 30 & October 1 (immediately after to the conference). Box lunch included. Course and instructor details are available here.

    Speakers
    avatar for Dan Saks

    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 publications... Read More →


    Sunday October 1, 2017 9:00am - 5:00pm
    Bel-Air Sheraton Bellevue

    9:00am

    Debugging and Profiling C++ Code on Linux
    “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 software... Read More →


    Sunday October 1, 2017 9:00am - 5:00pm
    Phoenix Sheraton Bellevue

    9:00am

    Exploring the C++ Standard Library
    “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

    Staff Software Enigneer, ComputeCpp Runtime, Codeplay Software
    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
    Somerset III Sheraton Bellevue

    9:00am

    Practical Modern C++
    “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
    Somerset I Sheraton Bellevue