Loading…
This event has ended. View the official site or create your own event → Check it out
This event has ended. Create your own
Please visit the C++Now website.
View analytic

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

Monday, May 9
 

4:00pm

Conference Registration and Reception
Please note the venue! This year registration is at the Aspen Center for Physics lobby, not at the Meadows Resort, as has been the traditional venue for registration.

Welcome! Let's get the paperwork out of the way and enjoy old and new friends.

The Aspen Meadows Resort and the Aspen Center for Physics are providing a us with a wine and cheese reception as a tenth anniversary gift to the conference. Bring your family and friends!

Monday May 9, 2016 4:00pm - 6:00pm
Aspen Center for Physics Lobby 700 Gillespie Ave., Aspen, CO 81611

5:30pm

Dinner Break
Suggested Venue: Mezzaluna or Asie

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Monday May 9, 2016 5:30pm - 8:30pm
TBA

8:30pm

Social Event: Informal Gathering
Get acquainted with new friends and reacquainted with old friends. Bring your family and traveling companions.

Monday May 9, 2016 8:30pm - 10:00pm
Aspen Meadows Resort 845 Meadows Rd, Aspen, CO 81611
 
Tuesday, May 10
 

8:00am

General Conference Welcome
Welcome to Aspen! Orientation to the conference facilities and surroundings.

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


Tuesday May 10, 2016 8:00am - 8:15am
Paepke Auditorium

8:15am

Library in a Week
Library in a week 2016

Speakers

Tuesday May 10, 2016 8:15am - 9:00am
Paepke Auditorium

9:00am

Keynote: Better Code
The process of improving an existing body of code can be very challenging. In this talk I'll offer a concise definition of "good code", inherent tradeoffs in any system, and techniques for approaching a large code base.

Speakers
avatar for Sean Parent

Sean Parent

Principal Scientist, Adobe
Sean Parent is a principal scientist and software architect for Adobe’s digital imaging group. Sean has been at Adobe since 1993 when he joined as a senior engineer working on Photoshop and later managed Adobe’s Software Technology Lab. In 2009 Sean spent a year at Google working on Chrome OS before returning to Adobe to work on mobile and web technology. From 1988 through 1993 Sean worked at Apple, where he was part of the system software... Read More →


Tuesday May 10, 2016 9:00am - 10:30am
Paepke Auditorium

10:30am

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Tuesday May 10, 2016 10:30am - 11:00am
Aspen Center for Physics Patio

11:00am

C++14 Dependency Injection Library with no overhead and compile time guarantee of object creation
Although Dependency Injection is a popular concept in Java and C# it's not a first class citizen in C++. The reasons behind this are mostly related to the missing C++ features like reflection and popular believing that Dependency Injection will slow down the execution. Well, that could have been true a few years ago, however experimental Boost.DI is going to change this belief! During this lecture you will be exposed to main features of experimental Boost.DI, such as: - how it is possible to create objects without macros and reflection support? - how there is no performance overhead when using experimental Boost.DI? - how experimental Boost.DI provides a compile time guarantee when creating objects? - how experimental Boost.DI compiles so fast? - how experimental Boost.DI gives short error messages without using concepts? After this talk you would have a better understanding of the Dependency Injection and how C++14 made it possible!

Speakers
avatar for Kris Jusiak

Kris Jusiak

King
Kris is a software engineer focused on modern C++ development, especially for embedded systems. He is currently working for King, making mobile games for living, whilst contributing to the open source community at his free time.


Tuesday May 10, 2016 11:00am - 12:30pm
Flug Auditorium

11:00am

Flowz: towards an EDSL for digital signal processing
Digital signal processing is ubiquitous in modern digital technology. Ranging from classical signal transmission, neural networks, image and audio processing, to time series analysis. Flowz is a library that strives for writing digital signal processors in a declarative and composable manner that generate efficient code and integrates well with existing C++ code and frameworks. Flowz is inspired by the Faust language and algebra of flownomials and implements a similar concept within C++. This embedded domain specific language allows to describe network layouts and processing of data flowing through these networks. While the user can focus on the 'what should be processed', flowz will take care of connecting the *wires* between processing boxes and creating the state that is described implicitly by the flowz-expressions and which is needed by the signal processing algorithm.

Speakers
avatar for André Bergner

André Bergner

Team Leader Software Development, Native Instruments GmbH
André leads the Traktor software development team at Native Instruments. There he is taking an active role in modernizing the C++ coding standards by organizing tech talks and introducing new techniques and libraries. Some of his main interests are functional and generic programming and solving meta-programming puzzles. Besides that he is lecturer at the Beuth Hochschule in Berlin where he teaches C++ and is one of the organizers of the local... Read More →


Tuesday May 10, 2016 11:00am - 12:30pm
Bethe

11:00am

Typegrind - Type preserving heap profiler for C++
Memory profilers are essential tools to understand the dynamic behavior of complex modern programs. They help to reveal memory handling details: the wheres, the whens and the whats of memory allocations. Most heap profilers provide sufficient information about which part of the source code is responsible for the memory allocations by showing us the relevant call stacks. The sequence of allocations inform us about their order. Heap profilers for languages with strong reflection capabilities can also show type information on the allocated objects. However, in C++ we have no reflection, allocators used for standard containers erase type information, and complex syntax of special new and delete operators make preprocessor hacks impossible. In this lecture we will report on a type preserving heap profiler for C++ based on the LLVM/Clang tooling library. On top of the usual heap profiler features our allocation entries, including those of template constructs, contain exact type information about the allocated objects. We can extract information on individual memory operations as well as supply aggregated overview. E.g. user can tell how much memory was used of std::vector objects in every point of the run, when, where and how they were allocated and freed. Having such a type information in hand programmers can identify critical classes responsible for memory usage more easily and can perform optimizations based on evidence rather than speculations. The tool is publicly available at: https://github.com/typegrind

Speakers
avatar for Zsolt Parragi

Zsolt Parragi

I am a PhD student at Eötvös University Budapest working on C++ related static analysis tasks. I am also a developer of NNG Ltd, a leading company in car navigation solutions.
avatar for Zoltán Porkoláb

Zoltán Porkoláb

Ericsson & Eötvös Loránd University
Dr. Zoltán Porkoláb is an Associate Professor of Faculty of informatics at Eötvös Loránd University (ELTE), Budapest, Hungary. At the same time, he holds Principal C++ Developer position at Ericsson Hungary Ltd.


Tuesday May 10, 2016 11:00am - 12:30pm
Booz Allen Hamilton

12:30pm

Lunch Break
On your own.

The lunch truck will be available at 12:45.

Most attendees go into town.

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Tuesday May 10, 2016 12:30pm - 2:00pm
Flug Auditorium

2:00pm

CopperSpice: The Next Generation of Signals
CopperSpice is a collection of cross platform GUI libraries inspired by an existing open source library. Our libraries use modern C++ technology to implement run time reflection without requiring a code generator. We will explain our registration mechanism which is implemented using template trickery. How Signals and Slots work in CopperSpice will be briefly examined and then we will introduce our new stand alone Signal/Slot library which has been implemented using only C++11 and the standard library. A comparison of CsSignal with other Signal libraries will be explored. How the CsSignal library supports cross thread signal delivery will be covered in detail. Examples of the new CsSignal will be demonstrated. No prior knowledge of CopperSpice is required. A working knowledge of templates in C++ would be helpful.

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 including medical billing, transportation, and construction. | | My degree is in Electrical Engineering from Cal Poly Pomona with additional studies in Computer... Read More →
avatar for Ansel Sermersheim

Ansel Sermersheim

Co-Founder, CopperSpice
I have been working as a programmer for over fifteen years. My degree is in Computer Science from Cal Poly San Luis Obispo. | | Currently I work as a software engineer designing scalable, high performance, multi-threaded network daemons in C++. The daemons I have developed are used at a Tier 1 carrier serving static and live content to customers around the world. I am a Co-founder of CopperSpice, a C++ library derived from the existing Qt... Read More →


Tuesday May 10, 2016 2:00pm - 3:30pm
Booz Allen Hamilton

2:00pm

Proper Inheritance (part 1 of 2)
All essential behavior of our software must be documented, and yet there are important advantages, with respect to development, verification and testing, performance, and stability, for leaving the behavior for some combinations of inputs and initial conditions undefined. What is and is not defined behavior should therefore be readily discernible from the contract, especially when creating contracts that must span classes related by inheritance. In Part I of this talk, we review components, interfaces and contracts in general, and the significance of *narrow* versus *wide* contracts in particular. In Part II, we explore _three_ kinds of inheritance: (1) *Interface* *Inheritance* resulting from pure-virtual functions, (2) *Structural* *Inheritance* resulting from non-virtual functions, and (3) *Implementation* *Inheritance* resulting from non-pure virtual functions. Proper contracts involving each of these distinct forms have different criteria that must be addressed. The three kinds of inheritance are compared, and their relative utility is explained. What's more, several common uses of inheritance that are provably improper are summarily debunked.

Speakers
avatar for John Lakos

John Lakos

Software Infrastructure Manager, Bloomberg LP
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, Library 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... Read More →


Tuesday May 10, 2016 2:00pm - 3:30pm
Bethe

2:00pm

Practical Performance Practices
In the past 6 years ChaiScript's performance has been improved by nearly 100x. This was not accomplished by adding a virtual machine or performing dynamic recompilation. Instead, these increases have been accomplished by moving to more simple, cleaner, idiomatic C++ and by following some simple rules. We will outline these concepts with examples for how they both simplified code while improving 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://cppbestpractices.com. | | I'm available for contracting and onsite training.


Tuesday May 10, 2016 2:00pm - 3:30pm
Flug Auditorium

3:30pm

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Tuesday May 10, 2016 3:30pm - 4:00pm
Aspen Center for Physics Patio

4:00pm

Metaprogramming for dummies
In most languages, metaprogramming is a powerful tool that allows writing more expressive and more maintainable code. It is usually relatively straightforward, and even average Joe programmers can use it to increase their productivity. In C++, metaprogramming is an obscure art that very few understand and that is never taught as part of the normal curriculum. Even worse is the fact that almost every presentation about metaprogramming is overly complicated, using tricky corners of the language and an unintuitive approach to achieve even simple goals. This presentation will try to break the mold and present metaprogramming in a way that's easy to grasp. Using the Boost.Hana library, we will show how metaprogramming can be done with a reasonably high level of expressiveness, leaving dirty template tricks far behind. We will see how metaprogramming can be used as a tool for making day-to-day programming easier and more enjoyable, even for beginners.

Speakers
avatar for Louis Dionne

Louis Dionne

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


Tuesday May 10, 2016 4:00pm - 5:30pm
Booz Allen Hamilton

4:00pm

Monoids, Monads, and Applicative Functors: Repeated Software Patterns
Forget factories, singletons, and proxies; What are the real patterns in software development? This talk explores abstract mathematical structures that commonly recur in software development. Once a mind is trained to recognize these patterns, it becomes easy to identify the fundamental operations for domain specific classes and how to put the pieces together. This discussion is for those who enjoy math, abstract concepts, and expanding their minds.

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. David’s... Read More →


Tuesday May 10, 2016 4:00pm - 5:30pm
Flug Auditorium

4:00pm

Proper Inheritance (part 2 of 2)
All essential behavior of our software must be documented, and yet there are important advantages, with respect to development, verification and testing, performance, and stability, for leaving the behavior for some combinations of inputs and initial conditions undefined. What is and is not defined behavior should therefore be readily discernible from the contract, especially when creating contracts that must span classes related by inheritance. In Part I of this talk, we review components, interfaces and contracts in general, and the significance of *narrow* versus *wide* contracts in particular. In Part II, we explore _three_ kinds of inheritance: (1) *Interface* *Inheritance* resulting from pure-virtual functions, (2) *Structural* *Inheritance* resulting from non-virtual functions, and (3) *Implementation* *Inheritance* resulting from non-pure virtual functions. Proper contracts involving each of these distinct forms have different criteria that must be addressed. The three kinds of inheritance are compared, and their relative utility is explained. What's more, several common uses of inheritance that are provably improper are summarily debunked.

Speakers
avatar for John Lakos

John Lakos

Software Infrastructure Manager, Bloomberg LP
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, Library 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... Read More →


Tuesday May 10, 2016 4:00pm - 5:30pm
Bethe

5:30pm

Dinner Break
Suggested Venue: Limelight Lounge or White House Tavern

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Tuesday May 10, 2016 5:30pm - 8:30pm
Flug Auditorium

8:30pm

Lightning Talks
Lightning talks are 5-10 minute talks on something of interest to C++ programmers. Presentation is open to any C++Now attendee, including Student/Volunteers.

Have a favorite technique or library to share? Employed some C++11/14 feature in a project with amazing/horrible results? Want to start a conversation on Boost 3.0? Submit your proposal for a 5 or 10-minute talk to Michael at lightning@cppnow.org. Be sure to include a title, 3-sentence abstract, and something about yourself.

Come to be amused, enlightened, outraged, or inspired!

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for 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 Project Recovery for failing multidisciplinary engineering projects. When he isn't fighting with compilers or robots, he enjoys fencing with a sabre. :: ciere.com

Tuesday May 10, 2016 8:30pm - 10:00pm
Flug Auditorium
 
Wednesday, May 11
 

8:00am

Library in a Week
Library in a week 2017

Speakers

Wednesday May 11, 2016 8:00am - 9:00am
Flug Auditorium

9:00am

C++14 version of Boost.MSM-eUML which compiles up to 60x faster whilst being slightly faster too!
Boost has a great Boost.MSM library. Boost.MSM - eUML is even better because it provides a DSL for creating transition tables. However, it is really hard to use Boost.MSM library on a larger scale due to horrible compilation times and big executable files. Guess what, experimental Boost.MSM-lite is going to change it! During this lecture you will be shown how C++14 was used to achieve the following: - faster compilation times - up to 60x times faster than Boost.MSM - smaller executable size - up to 15x smaller - slightly better performance than Boost.MSM! - smaller memory usage - short error messages After this part you will understand what Meta State Machine is, why it is so useful and how experimental Boost.MSM-lite can achieve the above goals.

Speakers
avatar for Kris Jusiak

Kris Jusiak

King
Kris is a software engineer focused on modern C++ development, especially for embedded systems. He is currently working for King, making mobile games for living, whilst contributing to the open source community at his free time.


Wednesday May 11, 2016 9:00am - 10:30am
Bethe

9:00am

Diet for your Templates - Reducing Code Bloat in Your Templated Library
We developed a heavily templated-driven library, IoC++, in-house at our company. Using it, we discovered that it generated huge object files and libraries, leading to very long link times, large executables, and even linker crashes. In this session I present techniques we used to reduce the bloat in the library and got our link times down to acceptable values.

Speakers
avatar for Sebastian Redl

Sebastian Redl

Senior Programmer, Teoco
Sebastian holds a BSc in Software Engineering from the Technical University of Vienna and is currently finishing an MSc. He is working at a small software company called Symena (part of Teoco), and recently spent a year's sabbatical working at Google. He has contributed heavily to the Clang C++ compiler and maintains the Boost.PropertyTree library.


Wednesday May 11, 2016 9:00am - 10:30am
Booz Allen Hamilton

9:00am

Variants: past, present, and future
What are variants, why are they important, and how I use them? Once available to a developer, variants become one of the most commonly used tools in everyday programming. This talk will explore the venerable Boost.Variant library, discuss the improvements made by the current 'std::variant' proposal (expected in C++17), and close with a discussion of the exciting new language-based variant and pattern matching papers (proposed for C++20). This talk aims to be of practical utility in variant library usage and informative as to where things are heading.

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. David’s... Read More →


Wednesday May 11, 2016 9:00am - 10:30am
Flug Auditorium

10:30am

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Wednesday May 11, 2016 10:30am - 11:00am
Aspen Center for Physics Patio

11:00am

array_ref: Multidimensional Array References for the C++ Standard Library

Multidimensional arrays are a foundational data structure for science and engineering codes - a data structure which unfortunately lacks proper representation in the C++ standard library.

In this talk, we will introduce and discuss array_ref, a performance-oriented multidimensional array reference which has been proposed for inclusion in a future C++ standard or a in the C++ Library TS. An array_ref is a reference to a memory extent through a layout mapping from a multi-index space (domain) to that extent (range). array_ref is a powerful and generic abstraction which supports user-defined layouts and access semantics. This flexibility makes array_ref ideal for:

  1. interoperating with existing applications and other programming languages (such as Fortran and Matlab) and
  2. addressing "special" memory regions (e.g. GPU memory and high-throughput scratchpad memory such as HBM and HMC).
array_ref has a powerful subarray interface designed to facilitate performant iteration of multi-dimensional arrays - an area where previous C++ array libraries have struggled.

This presentation will present the proposed array_ref library that is being advanced through the C++ standards committee, and discuss the challenges we've faced in our quest for an elegant and expressive interface that does not sacrifice performance or break the zero-overhead principle. We'll demonstrate how array_ref can be used to work with multi-dimensional data structures and to manage "special" memory exposed by new architectures.

Those interested in using array_ref can get started today with a stand-alone C++-14 implementation of array_ref developed by Bryce, which is available under the Boost Software License.

Speakers
avatar for H. Carter Edwards

H. Carter Edwards

Sandia National Laboratories
H. Carter Edwards (SNL) is current the PI and architect for the Kokkos project (github.com/kokkos/kokkos). Carter has a BS and MS in Aerospace Engineering and PhD in Computational Mathematics. He has over three decades of experience in modeling & simulation software development and over two decades of experience in HPC, parallel processing, and C++ software development. His recent (6 year) HPC focus is on algorithms and programming models for... Read More →
avatar for Bryce Lelbach

Bryce Lelbach

Lawrence Berkeley National Laboratory
Bryce Adelstein Lelbach is a researcher at Lawrence Berkeley National Laboratory (LBNL), a US Department of Energy research facility. Working alongside a team of hardware engineers, mathematicians and physicists, he develops and analyzes new parallel programming models for exascale and post-Moore architectures. Bryce is one of the developers of the HPX C++ runtime system; he spent five years working on HPX while he was at Louisiana State... Read More →


Wednesday May 11, 2016 11:00am - 12:30pm
Flug Auditorium

11:00am

Documenting C++ Using the Right Tools
We will present a short overview of the DoxyPress project covering good documentation practices. The existing approach for parsing C++ was to use lex and hand write all of the syntax rules. This approach does not scale and is difficult to maintain as C++ evolves and becomes even more complex to parse. Thankfully libClang provides a front end solution. We will present our work regarding the integration of libClang into DoxyPress. We will show how to use the libClang AST to parse the source, retrieve the comments, and generate high quality documentation. We will demonstrate our progress by showing how DoxyPress can be used to document a modern C++ application.

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 including medical billing, transportation, and construction. | | My degree is in Electrical Engineering from Cal Poly Pomona with additional studies in Computer... Read More →
avatar for Ansel Sermersheim

Ansel Sermersheim

Co-Founder, CopperSpice
I have been working as a programmer for over fifteen years. My degree is in Computer Science from Cal Poly San Luis Obispo. | | Currently I work as a software engineer designing scalable, high performance, multi-threaded network daemons in C++. The daemons I have developed are used at a Tier 1 carrier serving static and live content to customers around the world. I am a Co-founder of CopperSpice, a C++ library derived from the existing Qt... Read More →


Wednesday May 11, 2016 11:00am - 12:30pm
Booz Allen Hamilton

11:00am

Come Stream with Me: build performant, simple, parallel applications in C++ using RaftLib
RaftLib aims to make authoring performant parallel applications in C++ simple. It utilizes the familiar semantics of stream operators to link multiple parallel actors into a single multi-threaded, streaming application. Stream processing is a compute paradigm that has been around for decades, yet until recently has failed to garner the same attention as other mainstream languages and libraries for parallel processing (e.g., C++, OpenMP, MPI). RaftLib aims to fully exploit the stream processing paradigm, enabling a full spectrum of streaming graph optimizations, while providing a platform for the exploration of integrability with legacy C/C++ code. RaftLib is built as a C++ template library, enabling programmers to utilize the robust C++ standard library, and legacy code, along with RaftLib’s parallelization framework. This session covers what RaftLib is, how it works, how to use it, and lastly we'll have some hands on application building.

Speakers
avatar for Jonathan Beard

Jonathan Beard

Senior Research Engineer, ARM Inc.
Jonathan Beard received a BS (Biology) and BA (International Studies) in 2005 from the Louisiana State University, MS (Bioinformatics) in 2010 from The Johns Hopkins University, and a PhD in Computer Science from Washington University in St. Louis in 2015. Jonathan served as a U.S. Army Officer through 2010 where he served in roles ranging from medical administrator to acting director of the medical informatics department for the U.S. Army in... Read More →


Wednesday May 11, 2016 11:00am - 12:30pm
Bethe

12:30pm

Boost Operations: C++Now Program Committee
This is an information/work session for the C++Now Program Committee.

We will discuss the review the Reviewers' Guide ways to impove our process and product:
https://docs.google.com/document/d/1Z1PXETemPj0FP_i_zqt1YFHK4KiFYAiGTvbpVa2kKE0/edit?usp=sharing

Note: Boost will cater this meeting for attendees that sign up by the end of Wednesday morning's break. 

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!

Wednesday May 11, 2016 12:30pm - 2:30pm
Bethe

12:30pm

Lunch Break
On your own.

The lunch truck will be available at 12:45.

The Boost Operations session is catered if you sign up by the end of morning break.

Most attendees go into town.

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Wednesday May 11, 2016 12:30pm - 2:30pm
Flug Auditorium

2:30pm

Metaprogramming for the brave
In this session crafted exclusively for the core audience of C++Now library writers, we will explore creative techniques using modern C++ to implement metaprogramming idioms. We will see how we can work with the compiler, not against it, to produce code that compiles faster and is more easily optimized. We will see some of the trickiest uses of generalized constant expressions to optimize algorithms on heterogeneous sequences. If you feel ready to push the compiler beyond its limits and be blown away by some hardcore C++ dark magic, this is your session.

Speakers
avatar for Louis Dionne

Louis Dionne

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


Wednesday May 11, 2016 2:30pm - 4:00pm
Flug Auditorium

2:30pm

Pulling Visitors
In this talk we illustrate how to use the Boost.Coroutine library to invert visitor-based control flows. We show this technique by combining Boost.Coroutine with Boost.Graph to step through and resume visitor-based algorithms. In doing so we highlight a different interface to the visitor-based approach that is more readable, more maintainable and highly performant. The audience need not already be familiar with Boost.Coroutine or Boost.Graph.

Supplementary material is available at: https://github.com/daniel-j-h/cppnow2016

Speakers
avatar for Nat Goodspeed

Nat Goodspeed

Linden Lab
Nat Goodspeed first read about C++ shortly after implementing a medium-sized language interpreter in classic C. Almost every C++ feature led to forehead smacking accompanied by muttered remarks about how the language could have solved THIS problem... He has been fascinated (sometimes infuriated) by C++ ever since. | | When he first encountered Boost libraries, a light shone from the heavens and choirs of angels sang "AAAAAAH..." The idea... Read More →
avatar for Daniel J H

Daniel J H

Mapbox
Daniel is a Software Engineer at Mapbox working on the Directions team, where he builds and improves high quality graph partitioners and routing engines in modern and idiomatic C++.


Wednesday May 11, 2016 2:30pm - 4:00pm
Bethe

2:30pm

Thread-safe Observer Pattern - You're doing it wrong
We've all written an Observer Pattern or list of Listeners at some point or another. And then later had to make it "thread safe". So we put a lock around the list of listeners...

So which evil did you choose:

1. potential deadlocks
2. potential post-death calls

Or did you not realize those were your typical choices?

In this talk we will look at what the problems are, and use them to highlight some of the fundamental problems of threading, and the things you can't take for granted with threads. And, of course, show some solutions to the problems.

Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Christie Digital
Tony Van Eerd has been coding for well over 25 years, and hopefully coding well for at least some of that. Most of that time has been in the graphics/video/film/broadcast industry (at Inscriber/Adobe), writing low level pixel++, high level UI, as well as threading and everything else in between. After a few years of being "the C++ Guy" at BlackBerry, he is back to doing math and pixel++, now at Christie Digital.


Wednesday May 11, 2016 2:30pm - 4:00pm
Booz Allen Hamilton

4:00pm

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Wednesday May 11, 2016 4:00pm - 4:30pm
Aspen Center for Physics Patio

4:30pm

Friendship in Service of Testing
Unit testing of object-oriented code requires two fundamental artifacts: replacing some of the original code with some kind of test doubles (aka dependency injection), and providing extra access to these private dependencies. In most cases we cannot apply link-time or preprocessor based dependency injection, therefore a typical testable unit uses additional interfaces or template type parameters for pure testing purposes. Thus a unit which we developed without testing in mind might have to be changed intrusively for testing. These changes can take us far away from the original natural design of the unit. As a result, in C++, test code is often badly interwoven with the unit we want to test. We've seen such interleaving in the software world before: exceptions and aspect oriented programming were both invented to try to eliminate this kind of interleaving of independent aspects. In this talk I'd like to demonstrate the above problems using code examples to show the decay of original intentions. I briefly discuss current possible directions to solve the dependency injection problem: e.g. using compile-time seams. Then, I will overview the current (partial) solutions for adding extra access for private data, like using friends, the Attorney-Client idiom, or exploiting privates using explicit template instantiations. Regarding to extra access of private data, I will present how a minimal language extension would help and make the testing code less intrusive. Open non-intrusive friend declarations could provide a good method to separate the test related code from the original intentions. We implemented a proof-of-concept solution, based on LLVM/Clang to show that such constructs can be established with a minimal syntactical and compilation overhead.

Speakers
avatar for Gábor Márton

Gábor Márton

PhD Student, Eötvös Loránd University
Gábor has been working with C++ since 2000. Currently he is working in the finance industry. In 2013 he started his PhD studies at Eötvös Loránd University, Budapest, Hungary . His topic is to reveal methods making C++ testing easier. He is also interested in compilers, coroutines, ASIO and in lock-free programming.
avatar for Zoltán Porkoláb

Zoltán Porkoláb

Ericsson & Eötvös Loránd University
Dr. Zoltán Porkoláb is an Associate Professor of Faculty of informatics at Eötvös Loránd University (ELTE), Budapest, Hungary. At the same time, he holds Principal C++ Developer position at Ericsson Hungary Ltd.


Wednesday May 11, 2016 4:30pm - 5:15pm
Flug Auditorium

4:30pm

Implementation of a multithreaded compile-time ECS in C++14
An alternative to deep inheritance trees for game and application architecture design is "composition". Separating data from logic allows the code to be more reusable and more efficient, alongside additional benefits. Using modern C++14 features and heavy metaprogramming, it is possible to design an efficient and user-friendly compile-time multithreaded component-based entity system library, striving for intuitive syntax and cost-free abstractions. By leveraging the compile-time knowledge regarding components and systems, the implementation can figure out what computations can run in parallel and how to efficiently store and manage components.

Speakers
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg LP
Vittorio Romeo is an Italian 21 year old Computer Science student at "Università degli Studi di Messina". He began programming at a very young age and is now a C++ enthusiast. While following the evolution of the C++ standard and embracing the newest features, he worked on several open-source projects, including modern general-purpose libraries and free cross-platform indie games. Vittorio is an active member of the C++ community: he... Read More →


Wednesday May 11, 2016 4:30pm - 6:00pm
Bethe

4:30pm

Implementing a lock-free atomic_shared_ptr
In this session, we will explore some of the possible implementation options for atomic_shared_ptr. In particular, we will examine a lock-free implementation and discuss the performance ramifications of this implementation choice.

Speakers
MM

Michael McCarty

Principal Software Engineer, Siemens PLM Software
I have been a professional C++ developer for the last 20+ years with | experience in 3D graphics, software design, and concurrency.


Wednesday May 11, 2016 4:30pm - 6:00pm
Booz Allen Hamilton

5:15pm

Design Patterns in the 21st Century
Design patterns started with Smalltalk and "old" C++. Since then, programming languages and paradigms have advanced quite a bit, and C++ is no exception. In this presentation, we'll take a look at how classic Gang of Four design patterns can be improved via Modern C++. We'll also take a look at functional programming patterns and how C++ functional literals and lambda expressions make monads possible.

Speakers
avatar for Dmitri Nesteruk

Dmitri Nesteruk

Technology Advocate, JetBrains


Wednesday May 11, 2016 5:15pm - 6:00pm
Flug Auditorium

6:00pm

Social Event: Picnic
Bring your family and friends and your appetite!

The Aspen Center for Physics and the Aspen Meadows Resort are providing a us with cake and ice cream as a tenth anniversary gift to the conference.

Wednesday May 11, 2016 6:00pm - 8:30pm
Picnic Area
 
Thursday, May 12
 

7:00am

"Meet the Volunteers" Breakfast
Limited Capacity filling up

Note: By Invitation Only

This opportunity to meet this year's Student/Volunteers is open to individuals that are Gold Level Boost Scholarship Sponsors (and some other VIPs). Students will introduce themselves and briefly discuss their studies and interest in C++.

If you would like to join us as an indvidual sponsor, please contact us at sponsorship@cppnow.org
 

Thursday May 12, 2016 7:00am - 8:30am
Aspen Meadows Resort 845 Meadows Rd, Aspen, CO 81611

8:00am

Library in a Week
Library in a week 2018

Speakers

Thursday May 12, 2016 8:00am - 9:00am
Flug Auditorium

9:00am

Multithreading is the answer. What was the question? 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, how to mitigate them, and when to consciously avoid writing multithreaded code. Topics will range from high-level architecture to low-level C++ classes which improve readability and maintainability of multithreaded code. The discussion will include C++11 multithreading, C++17 concurrency TS, and new abstractions we can build on top of these features. Basic familiarity with the C++11 threading library will be helpful.

Speakers
avatar for Ansel Sermersheim

Ansel Sermersheim

Co-Founder, CopperSpice
I have been working as a programmer for over fifteen years. My degree is in Computer Science from Cal Poly San Luis Obispo. | | Currently I work as a software engineer designing scalable, high performance, multi-threaded network daemons in C++. The daemons I have developed are used at a Tier 1 carrier serving static and live content to customers around the world. I am a Co-founder of CopperSpice, a C++ library derived from the existing Qt... Read More →


Thursday May 12, 2016 9:00am - 10:30am
Booz Allen Hamilton

9:00am

Variadic expansion in examples
Templates - and variadic templates - are an important aspect of writing a successful library in C++; libraries that can deal with custom types the user creates greatly eases their use. Variadic templates specifically are still a new, relatively unknown and at the same time quite a buggy (in the sense of bugs in their implementations) tool, but nevertheless, they offer much easier ways of creating truly generic types and functions. This talk will focus slightly less on variadic templates in general; the common pitfalls will be discussed, but more attention will be given to the tool of parameter pack expansion and all the contexts where it can be used, especially as a code generation tool. The talk will start mostly from scratch, assuming the audience's general knowledge about templates. It'll introduce the idea of variadic templates and general syntax and typical techniques for their use. Next, it will head into the (mostly) unknown and buggy lands of the interesting uses of variadic packs, like unpacking a tuple into a function call using `std::integer_sequence`, the use of empty packs for a slightly easier way to work with `enable_if`. The final examples will explain the way of invoking an expression per every argument in a pack, and dispatch to appropriate version of code for each of the argument types based on runtime values, which will be used to more easily create variant visitors.

Speakers
avatar for Michał Dominiak

Michał Dominiak

Software Engineer, Nokia Networks
Bachelor of Engineering in Computer Science, studied at Faculty of Electronics at Wrocław University of Technology. Loves metaprogramming and doing as much as possible during compile time, instead of wasting precious cycles at runtime.


Thursday May 12, 2016 9:00am - 10:30am
Flug Auditorium

9:00am

Let's make a web match-3 game in C++14 using Dependency Injection(experimental Boost.DI), Meta State Machine(experimental Boost.MSM-lite) RangeV3 and MSVC and Emscripten
Developers often complain that there is no practical usage for some design patterns like Dependency Injection. This tutorial will prove them wrong. It will show them how to use the whole potential of Dependency Injection/Meta State Machine/MSVC to make a game/app quickly with minimal maintenance as well as testing support. During this tutorial we are going to create a match-3 game for the WEB using only C++14 features, Emscripten and mentioned experimental Boost.DI/Boost.MSM-lite libraries. After this tutorial you will have more knowledge about Dependency Injection/Meta State Machine and how they fit together. On top of that you will see how to use Emscripten and C++14 in order to create cross-platform games/apps. Experimental Boost.DI Although Dependency Injection is a popular concept in Java and C# it's not a first class citizen in C++. The reasons behind this are mostly related to the missing C++ features like reflection and popular believing that Dependency Injection will slow down the execution. Well, that could have been true a few years ago, however experimental Boost.DI is going to change this belief! During this lecture you will be exposed to main features of experimental Boost.DI, such as: - how it is possible to create objects without macros and reflection support? - how there is no performance overhead when using experimental Boost.DI? - how experimental Boost.DI provides a compile time guarantee when creating objects? - how experimental Boost.DI compiles so fast? - how experimental Boost.DI gives short error messages without using concepts? After this part you would have a better understanding of the Dependency Injection and how C++14 made it possible. Experimental Boost.MSM-lite Boost has a great Boost.MSM library. Boost.MSM - eUML is even better because it provides a DSL for creating transition tables. However, it is really hard to use Boost.MSM library on a larger scale due to horrible compilation times and big executable files. Guess what, experimental Boost.MSM-lite is going to change it! During this lecture you will be shown how C++14 was used to achieve the following: - faster compilation times - up to 60x times faster than Boost.MSM - smaller executable size - up to 15x smaller - slightly better performance than Boost.MSM! - smaller memory usage - short error messages After this part you will understand what Meta State Machine is, why it is so useful and how experimental Boost.MSM-lite can achieve the above goals.

Speakers
avatar for Kris Jusiak

Kris Jusiak

King
Kris is a software engineer focused on modern C++ development, especially for embedded systems. He is currently working for King, making mobile games for living, whilst contributing to the open source community at his free time.


Thursday May 12, 2016 9:00am - 10:30am
Bethe

10:30am

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Thursday May 12, 2016 10:30am - 11:00am
Aspen Center for Physics Patio

11:00am

IoC++ - A IoC framework for C++
IoC++ is a library for doing dependency injection in C++. It is designed to allow configuration of object graphs at runtime via code or configuration files, with high flexibility in the creation and lifetime management of objects. The library was developed in-house at the Symena branch of TEOCO, but is in the process of being open-sourced and will, if sufficient interest is generated, be proposed for inclusion in Boost. The concepts and workings of the library will be explained, and the library will be compared to similar ones in the field such as the proposed Boost.DI.

Speakers
avatar for Sebastian Redl

Sebastian Redl

Senior Programmer, Teoco
Sebastian holds a BSc in Software Engineering from the Technical University of Vienna and is currently finishing an MSc. He is working at a small software company called Symena (part of Teoco), and recently spent a year's sabbatical working at Google. He has contributed heavily to the Clang C++ compiler and maintains the Boost.PropertyTree library.


Thursday May 12, 2016 11:00am - 12:30pm
Bethe

11:00am

Multithreading is the answer. What was the question? Part II
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, how to mitigate them, and when to consciously avoid writing multithreaded code. Topics will range from high-level architecture to low-level C++ classes which improve readability and maintainability of multithreaded code. The discussion will include C++11 multithreading, C++17 concurrency TS, and new abstractions we can build on top of these features. Basic familiarity with the C++11 threading library will be helpful.

Speakers
avatar for Ansel Sermersheim

Ansel Sermersheim

Co-Founder, CopperSpice
I have been working as a programmer for over fifteen years. My degree is in Computer Science from Cal Poly San Luis Obispo. | | Currently I work as a software engineer designing scalable, high performance, multi-threaded network daemons in C++. The daemons I have developed are used at a Tier 1 carrier serving static and live content to customers around the world. I am a Co-founder of CopperSpice, a C++ library derived from the existing Qt... Read More →


Thursday May 12, 2016 11:00am - 12:30pm
Booz Allen Hamilton

11:00am

Implementing `static` control flow in C++14
There has always been great interest in imperative compile-time control flow: as an example, consider all the existing `static_if` proposals and the recently accepted `constexpr_if` construct for C++17. What if you were told that it is actually possible to implement imperative control flow in C++14? In this tutorial, the implementation and design of a compile-time `static_if` branching construct and of a compile-time `static_for` iteration construct will be shown and analyzed. These constructs will then be compared to traditional solutions and upcoming C++17 features, examining advantages and drawbacks.

Speakers
avatar for Vittorio Romeo

Vittorio Romeo

Software Engineer, Bloomberg LP
Vittorio Romeo is an Italian 21 year old Computer Science student at "Università degli Studi di Messina". He began programming at a very young age and is now a C++ enthusiast. While following the evolution of the C++ standard and embracing the newest features, he worked on several open-source projects, including modern general-purpose libraries and free cross-platform indie games. Vittorio is an active member of the C++ community: he... Read More →


Thursday May 12, 2016 11:00am - 12:30pm
Flug Auditorium

12:30pm

Lunch Break
On your own.

The lunch truck will be available at 12:45.

The Boost Operations session is catered if you sign up by the end of morning break.

Most attendees go into town.

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Thursday May 12, 2016 12:30pm - 2:30pm
Flug Auditorium

2:30pm

Exceptional Performance
When many of us choose C++, performance is one of the most important factors. It is so ingrained in the culture of C++ that the single most important tenant of C++ is probably "You don't pay for what you don't use". This shows up in almost all components of modern C++: zero-cost abstractions backed by a powerful optimizing compiler. Yet there is one component of the language that appears to violate this rule: exceptions. The mere possibility of exceptions can force the compiler to generate different, slower, code than it otherwise would have. Throwing an exception is a slow operation, and exceptions can lead to an increase in code size. There is a lot of conflicting advice on what exactly the programmer can do to make sure that they only pay for what they use that runs the gamut from "Don't worry about it" to "Pass this special flag to your compiler to turn off exceptions". The situation is only made more complicated by the introduction of the noexcept keyword. In this presentation, we will discuss exactly what effect exceptions have on the performance of an application, backed up by numbers from both benchmarks and real world applications. We will go into the details of hardware architecture and memory hierarchy to try to understand exactly why code performs the way it does. Could it ever make sense to say that you using exceptions for performance reasons?

Speakers
avatar for David Stone

David Stone

Vice President, Markit
David Stone has spoken at C++Now and Meeting C++. He is the author of the bounded::integer library: http://doublewise.net/c++/bounded/ and has a special interest in compile-time code generation and error checking, as well as machine learning. He works at Markit integrating real-time financial data. | | He has written an algorithm that solved the traveling salesman problem in polynomial time. He can square the circle and divide by zero. He... Read More →


Thursday May 12, 2016 2:30pm - 4:00pm
Flug Auditorium

2:30pm

Implementing A Modern C++ MQTT Client for Embedded Devices
Many IoT (Internet of Things) devices have adopted MQTT as an efficient protocol for communication. Few IoT devices have embraced modern C++ as a viable language for implementations. MQTT (Message Queueing Telemetry Transport) is a reliable publish-subscriber based messaging protocol that can be found in diverse ecosystems such as servers, cell phones, and light bulbs. Unfortunately, existing open source libraries leave much to be desired and many are a rich source of bad practices when compared to modern techniques. This session will unveil a CiereLabs open source MQTT client library written for embedded systems in modern C++ . There will be a brief demonstration of the library followed by digging into the design and implementation. As we explore the C++14 code base to illustrate useful idioms and techniques for your own code we will answer the question, what does is take to put modern C++ on a small OS-less device or a cell phone? Are there features to avoid? Join us and see how libraries can be elegantly designed and implemented for big or small targets.

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for 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 Project Recovery for failing multidisciplinary engineering projects. When he isn't fighting with compilers or robots, he enjoys fencing with a sabre. :: ciere.com


Thursday May 12, 2016 2:30pm - 4:00pm
Booz Allen Hamilton

4:00pm

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Thursday May 12, 2016 4:00pm - 4:30pm
Aspen Center for Physics Patio

4:30pm

C++ Tool Support: Where We Are and Where We Are Heading
As Bjarne Stroustrup stated in his opening address at CppCon 2015, "we need tools". But what can those tools actually do? What's the point of having an IDE when we have Notepad, VIM/Emacs, Sublime and others? This talk attempts to answer the question by showing how tools allow us to gain more insight into how the code is going to behave and how it can be improved. We'll take a look at a scenario which is made progressively better through the use of code generation, refactorings as well as the insights provided by fast navigation and hierarchical visualization. We'll also take a look at extraneous facilities, such as the support for CMake, built-in unit testing as well as the ways in which interoperation with other tools (e.g., Cling), as well as different programming languages (e.g., Python), makes an IDE an excellent choice for productive development.

Speakers
avatar for Dmitri Nesteruk

Dmitri Nesteruk

Technology Advocate, JetBrains


Thursday May 12, 2016 4:30pm - 5:15pm
Flug Auditorium

4:30pm

The Effective Structured Data Marshalling/Demarshalling Through Boost.Fusion Introspection In A High Performance Web Service
The Effective Structured Data Marshalling/Demarshalling Through Boost.Fusion Introspection In A High Performance Web Service The Yandex company is the one of the biggest internet companies in Russia. We provide various users' network interactive services, such as: web-search, e-mail, maps, photohosting and so on. Our team is developing e-mail backend. Message receiving, handling, sending are most typical tasks in backend service. At C++Now 2014 we talked about the optimization of a Boost.Asio-based networking server. Now we want to talk about effective data marshalling and demarshalling which is taking a significant part of our internal web services workload. In this talk we are looking for generic solution of effective marshalling and demarshalling of a structured data like instances of structures, STL containers, classes and so on. We start from the simple implementation which is based on the Boost.Fusion framework, discuss the problems and limitations of this solution. Then we propose different workarounds and optimisations of the solution to achive the performance. We propose solutions based on following key points: * minimization of data copying in order to decrease CPU and memory usage; * elimination of hidden synchronization and locks to provide maximum parallelism and independed work of the solution in different threads; * asynchronous interfaces to use callbacks and/or coroutines for the IO events handling; * stream-like raw data and structured objects processing. For each of these points we provide overview on how it affects total performance.

Speakers
avatar for Sergei Khandrikov

Sergei Khandrikov

Internet search and personal services, Yandex
Sergei Khandrikov has over 10 years of experience in software engineering and C++ development. He has been a backend C++ developer on the Web Mail Interface team at Yandex, LLC, since 2011. Sergei graduated from Bauman Moscow State Technical University as a specialist in robotics and automation systems in 2004. His career started as software engineer and system architect in automation and robotics. He conducted development and research in several... Read More →
avatar for Piotr Reznikov

Piotr Reznikov

Yandex.Mail developer, Yandex
Peter has been a backend developer at Yandex LLC since 2011. He is working at Web Mail Interface team for Yandex.Mail service, maintaining and developing various backend applications, using C++ (and other languages, like PL/SQL or Python, where applicable). | Peter is constantly expanding and revising his knowledge of modern C++, including upcoming C++17 proposals. Metaprogramming and functional programming in C++ is in field of his special... Read More →


Thursday May 12, 2016 4:30pm - 5:15pm
Bethe

4:30pm

Preprocessor-aware Automated Refactoring
The arrival of C++11/14 and the emergence of sophisticated refactoring tools based on Clang have generated a lot of interest in using automated methods to update code to modern coding styles. One stumbling block has been the widespread use of preprocessor constructs to implement older idioms. Clang-based tools "see" the source AST after it has been preprocessed and then parsed, so they have a limited ability to refactor preprocessor-based (or interacting) idioms. Fortunately, we have some tools available that focus on the preprocessor step. The Boost.Wave library, introduced in 1.33, provides both a fully functional preprocessor and hooks for modifying generated output, or performing other actions, as it runs. Clang provides similar functionality with the pp-trace tool and PPCallbacks interface. The presenter will give an introduction to these two preprocessor tools and then demonstrate how each can be leveraged, in concert with Clang's AST rewriter, to modernize some popular preprocessor-based code idioms.

Speakers
avatar for Jeff Trull

Jeff Trull

Trull Consulting
Electronic CAD algorithms | Modern C++ design patterns


Thursday May 12, 2016 4:30pm - 5:15pm
Booz Allen Hamilton

5:15pm

Extending C++ with Co-Array semantics
The current trend of large scientific computing problems is to to align as much as possible to Single Programming Multiple Data (or SPMD) scheme when the application's algorithms are conducive to vectorization. This reduces the complexity of code because the processors or (computation nodes) perform the same instructions, and allows for better performance as algorithms work on local data sets instead of transferring the data from one node to another. However, certain problems such as, stencils problems, demonstrate the need to move data to or from remote localities. It involves an additional degree of complexity, if only to know with which locality to interact to send/receive a given data. To solve both these two issues, Fortran has extended its scalar element indexing approach for distributed structures of elements. In this extension, a structure of element is attributed a "co-index" and lives in a specific locality. A co-index provides the application with enough information to retrieve the corresponding data reference. In C++, containers present themselves as a "smarter" alternative of Fortran arrays but there are still no corresponding features similar to the Fortran co-indexing approach. In this paper, we present an implementation of such features in HPX, a general purpose C++ runtime system for applications of any scale. We describe how the combination of the HPX concepts and new features from C ++ language makes it easy to define a high performance API similar to coarray FORTRAN.

Speakers
avatar for Antoine TRAN TAN

Antoine TRAN TAN

Postdoctoral researcher, Center for Computation and Technology
I am a postdoctoral researcher in Computer Science at the Louisiana State University and work for the Ste||ar Group at the Center for Computation and Technology. I have obtained my doctor's degree in Computer Science at the University of Paris Saclay (France). My interests include parallel programming, high performance computing and C++ template metaprogramming.


Thursday May 12, 2016 5:15pm - 6:00pm
Bethe

5:15pm

Progress on Contract Support for C++17
Contract Support in a language helps library authors and library users work together to make better programs, catching usage mistakes early, preventing spurious bug reports, improving security and performance.

Every library has incidental behaviors and interpretations of arguments that are not in the specification, and could easily be different in the next release. It is very easy to come to accidentally depend on these incidental details. When details can be spelled out directly in C++, and automatically verified during testing, there is much less room for misunderstandings.

The process of getting contract support into C++ has been long and contentious, because the name actually refers to several nearly disjoint goals, with different champions, and conflicting priorities. Some are most interested in static, compile-time verification, others in runtime checking and controlled response to violations, defense against security abuses, or improved optimization opportunities. The annotations programmers would add could certainly be used for all of these things, but where to add them and what to say vary by the intended use.

The factions have come together to present a common proposal meant to address all the disparate needs, with the minimum burden on programmers. This presentation explores the unified proposal and how it meets the needs of each group, and of programmers in general. Many surprises surfaced while merging the designs and simplifying.

Speakers
avatar for Nathan Myers

Nathan Myers

staff, Bloomberg LP
Nathan joined the ISO C++ Standard effort in 1993. He is responsible for keyword "explicit" in the core language. He invented traits, empty-base optimization, and indexing type-erased containers by type, holds the record for longest sentence using only C++ keywords (once each) and still thinks of the STL containers as just examples. Now he works on Foundation Libraries at Bloomberg.


Thursday May 12, 2016 5:15pm - 6:00pm
Booz Allen Hamilton

5:15pm

Why and How To Add Scripting
We will demonstrate why every C++ application can benefit from having scripting engine integration. We will then walk through the different tools you can use to integrate scripting in your C++ application. This will include the binding generator SWIG, tools such as sol2 and boost::python, and the speaker's own ChaiScript.

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://cppbestpractices.com. | | I'm available for contracting and onsite training.


Thursday May 12, 2016 5:15pm - 6:00pm
Flug Auditorium

6:00pm

Dinner Break
Suggested Venue: Hickory House or Brunelleschi

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Thursday May 12, 2016 6:00pm - 9:00pm
Flug Auditorium

8:30pm

Lightning Talks
Lightning talks are 5-10 minute talks on something of interest to C++ programmers. Presentation is open to any C++Now attendee, including Student/Volunteers.

Have a favorite technique or library to share? Employed some C++11/14 feature in a project with amazing/horrible results? Want to start a conversation on Boost 3.0? Submit your proposal for a 5 or 10-minute talk to Michael at lightning@cppnow.org. Be sure to include a title, 3-sentence abstract, and something about yourself.

Come to be amused, enlightened, outraged, or inspired!

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere, Inc.
Michael Caisse has been crafting code in C++ for 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 Project Recovery for failing multidisciplinary engineering projects. When he isn't fighting with compilers or robots, he enjoys fencing with a sabre. :: ciere.com

Thursday May 12, 2016 8:30pm - 10:30pm
Flug Auditorium
 
Friday, May 13
 

8:00am

Library in a Week
Library in a week 2019

Speakers

Friday May 13, 2016 8:00am - 9:00am
Flug Auditorium

9:00am

C++ Performance in Practice: Align, Vectorise, Cache, Jump!
This talk is the next installment in the series "C++ In the Audio Industry”. However, the talk presented here does not contain material specific to the audio industry and is intended for a general C++ audience interested in performance and low latency.

The first part of the series, presented at CppCon 2015, covered real-time programming and lock-free thread synchronisation. In this talk, I will instead focus on raw performance and how your hardware architecture can impact it, sometimes in surprising ways. I will discuss the following topics: memory alignment, SIMD and (auto-)vectorisation, cache-friendliness, and the impact of branch prediction. I will present the concepts, C++ code examples with performance benchmarks, and relevant modern C++11/14 techniques. I will also give an insight into the challenges of designing and implementing a generic, modern C++ framework dealing with those topics.

Speakers
avatar for Timur Doumler

Timur Doumler

JUCE Senior Software Engineer, ROLI Ltd.
Timur Doumler is Senior Software Developer at London-based technology company ROLI. He is currently working on JUCE, the leading cross-platform framework for creating audio applications used by hundreds of companies in the audio industry. After five years of writing high-performance code in Fortran, C, and C++ for numerical simulations of the cosmic structure formation, Timur became committed to audio and music production software. Before joining... Read More →


Friday May 13, 2016 9:00am - 10:30am
Booz Allen Hamilton

9:00am

Goodbye metaprogramming, and hello functional: Living in a post-metaprogramming era in C++.
C++ has had a long history with metaprogramming ever since it was discovered that C++ templates were Turing complete. However, many features of modern C++ now make the awkward syntax obsolete that we have grown to love. With constexpr, type deduction, and functional idioms, we can now leave behind typename disambiguations and template template parameters. In this talk, we will look out how we can utilize functional constructs from the Fit library to simplify how metaprogramming is achieved in C++ and how a functional library will be essential in a C++ programmer's toolbox.

Speakers
avatar for Paul Fultz II

Paul Fultz II

Software Engineer, AMD


Friday May 13, 2016 9:00am - 10:30am
Flug Auditorium

9:00am

The Design of a New C++ Build Toolchain
At C++Now 2015 I introduced build2, a new C++ build system. A year later, a lot has happened. Most significantly, there is now a package manager (bpkg), a repository web interface (brep), and a public repository of open source C++ packages, cppget.org. Also, the build system has seen a lot of development. But in this talk I don't want to give you a run down of the new features. Ok, maybe just a short introduction, to set the context. Instead, I would like to talk about interesting problems in the cross-platform C++ building and distribution process, how we decided to tackle them in build2 (and then, I am sure, someone from the audience will tell me why it's all wrong ;-)). What are the interesting problems? Cross-compilation (something is wrong with your build system if it's harder to cross-compile than build natively on Windows), in/out-of-source builds, interaction of generated source code with automatic dependency extraction, or high fidelity builds (what if I changed my compiler options), just to name a few. Seemingly benign decisions, such as relative vs absolute paths, can open (or close) doors to really powerful features, like updating multiple, unrelated projects or even multiple configuration of the same project with a single build tool invocation. A C++ build system also rarely handles just building. There is testing, installation (do we really have to run the whole process as sudo?), and preparation of distributions (no, shipping your .gitignore files is not cool). When it comes to packaging, how do we capture requirements (like C++11 or Linux-only) and conditional dependencies? How do we ensure package authenticity? And what should the submission policies and procedures be for a package repository like cppget.org?

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-specific languages (DSL), C++ parsing, source-to-source | translation, and code generation. His notable projects to date | include ODB (ORM for C++), XSD... Read More →


Friday May 13, 2016 9:00am - 10:30am
Bethe

10:30am

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Friday May 13, 2016 10:30am - 11:00am
Aspen Center for Physics Patio

11:00am

An Interesting Lock-free Queue - Part 2 of N
This is a continuation of last year's talk 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 last year's talk is completely NOT required. This time we will not just review where we left off last year, 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.

Speakers
avatar for Tony Van Eerd

Tony Van Eerd

Christie Digital
Tony Van Eerd has been coding for well over 25 years, and hopefully coding well for at least some of that. Most of that time has been in the graphics/video/film/broadcast industry (at Inscriber/Adobe), writing low level pixel++, high level UI, as well as threading and everything else in between. After a few years of being "the C++ Guy" at BlackBerry, he is back to doing math and pixel++, now at Christie Digital.


Friday May 13, 2016 11:00am - 12:30pm
Flug Auditorium

11:00am

Simple hand written parsers
While tools like yacc/bison or Boost.Spirit are certainly very useful when getting a parser for a simple language working quickly, the need for hand-written parsers still prevails. Getting custom behavior with parser generators can sometimes be painful, and they aren't exactly designed for the debuggability of the resulting code. Additionally, error reporting and recovery can get troublesome. This talk will focus on recursive descent parsers and some of techniques that author found useful when implementing that kind of parsers. The primary focus will stay on the simplest case - LL(1) grammars - but LL(k) and LL(*) grammars will also be discussed. Other important and related topics, including designing an AST that makes sense, parser combinators, and tokenizing the input before actual parsing takes place, will also be featured. No prior experience with parsing is necessary to understand the contents of this talk.

Speakers
avatar for Michał Dominiak

Michał Dominiak

Software Engineer, Nokia Networks
Bachelor of Engineering in Computer Science, studied at Faculty of Electronics at Wrocław University of Technology. Loves metaprogramming and doing as much as possible during compile time, instead of wasting precious cycles at runtime.


Friday May 13, 2016 11:00am - 12:30pm
Booz Allen Hamilton

11:00am

Understanding Boost.Build
Boost.Build is the build system used by the Boost C++ libraries. A basic understanding of this tool is a must for anyone who intends to submit a library to Boost. In this session, I will discuss basic usage, advanced usage, and troubleshooting.

Speakers
SW

Steven Watanabe

Steven is the author of two Boost libraries and has been an active member of the Boost community since 2005. He helps to maintain several Boost infrastructure components including Boost.Build.


Friday May 13, 2016 11:00am - 12:30pm
Bethe

12:30pm

Boost Operations: CMake/Boost Exploration
This is an information/work session for Boost.

Open to anyone interested in exploring the use of CMake in addition to Boost Build.

Note: Jeff Garland will be cooking chicken and burgers from the picnic.

Moderators
Friday May 13, 2016 12:30pm - 2:30pm
Bethe

12:30pm

Lunch Break
On your own.

The lunch truck will be available at 12:45.

The Boost Operations session is catered if you sign up by the end of morning break.

Most attendees go into town.

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Friday May 13, 2016 12:30pm - 2:30pm
Flug Auditorium

2:30pm

HPX and GPU parallelized STL
The concept of executors, introduced by proposal N4406, has created a possibility for a flexible and dynamic choice of execution platform for STL algorithms. HPX implements executors to support serial and parallel execution of algorithms on CPUs. However, current solutions do not utilize the power of GPUs. The support for GPGPU frameworks has become a standard in modern graphic processors, but the usage of computing power provided is still far from common. The most frequent reasons include: less intuitive programming model, more complex architecture of both memory and streaming processors, and the host-device paradigm which enforces manual data transmission and synchronization. There is a need for parallelization including not only CPUs which can be easily introduced into applications, even by programmers who are not experienced in neither architecture nor programming languages of GPUs. We have been working on bringing GPU parallelization into HPX implementation of parallel STL. For this task, we have chosen two industrial standards for automatic parallelization of C++ into the device code: C++AMP, an open standard proposed by Microsoft, and SYCL, which has been recently introduced by the Khronos Group. Our approach is based on code generated for OpenCL which makes it fully portable and platform independent. Our solution includes the extension of existing implementation with both synchronous and asynchronous GPU executors. This approach allows for minimizing developer’s work, who is not forced to write code responsible for data transfers. Templated design of algorithms encapsulates all buffering and synchronization which is necessary for execution on GPU. An additional configuration allows the optimization of performance by choosing a block size for a GPU thread. HPX has been integrated and tested with the latest and still developed Clang-based compilers, open source Kalmar, which implements AMP standard, and commercial ComputeCpp providing support for Khronos SYCL. Although both compilers are not bug-free and ready for release, the results of our project prove that these standards can be integrated with an existing, complex and mature C++ project.

Speakers
avatar for Marcin Copik

Marcin Copik

I am a final year Master student at the German Research School for Simulation Sciences/RWTH Aachen. I have obtained my Bachelor's degree in Computer Science from the Silesian University of Technology. I have worked with the STE||AR Group during Google Summer of Code 2015 and I came to Louisiana in April to work with them for next few months. | | My previous work experience includes: Jülich Supercomputing Centre, GSoC 2014, Silesian... Read More →


Friday May 13, 2016 2:30pm - 4:00pm
Bethe

2:30pm

Implementing tuple in C++17
C++17 adds new language features that might affect the design and implementation of 'std::tuple', such as fold expressions for templates. Several other features still pending as this proposal is written, such as concepts and implicit comparison operators. In addition, the standard library itself pushes the interface of the 'tuple' template itself, while providing additional metaprogramming utilities that might help both the implementation, and users. This session will review the tuple interface, as specified for C++17, highlighting any changes since C++11 and C++14. It will then look into the design of several implementations of tuple, explored through several testing and benchmarking scenarios, before looking to draw conclusions. Note that the code shown in this session will require a recent version of a C++ compiler that implements an experimental C++17 mode. The latest Clang and gcc compilers should be capable, although the latest development compilers may be needed for new language features added in 2016.

Speakers
AM

Alisdair Meredith

Bloomberg LP
Alisdair Meredith is a software developer at BloombergLP in New York, and the C++ Standard Committee Library Working Group chair. | | He has been an active member of the C++ committee for just over a decade, and by a lucky co-incidence his first meeting was the kick-off meeting for the project that would become C++11, and also fixed the contents of the original library TR. | | He is currently working on the BDE project, BloombergLP's open... Read More →


Friday May 13, 2016 2:30pm - 4:00pm
Flug Auditorium

2:30pm

The Fiber Library
The Boost.Fiber library supports fine-grained concurrency within a single thread. It permits you to make efficient use of a given thread's CPU, keeping it busy with other work while a particular fiber waits for asynchronous results. Most significantly, the Fiber library permits you to write and maintain what looks and behaves like simple sequential code, building a hierarchy of abstraction layers per industry best practices, while at the same time reaping the full benefits of asynchronous I/O concurrency. This talk presents an overview of the library, discusses integration with event-driven frameworks and illustrates several useful patterns, including load-balancing work among a pool of threads. Developers who have had to maintain application logic structured as a chain of callbacks, or then() calls, may find this library particularly welcome.

Speakers
avatar for Nat Goodspeed

Nat Goodspeed

Linden Lab
Nat Goodspeed first read about C++ shortly after implementing a medium-sized language interpreter in classic C. Almost every C++ feature led to forehead smacking accompanied by muttered remarks about how the language could have solved THIS problem... He has been fascinated (sometimes infuriated) by C++ ever since. | | When he first encountered Boost libraries, a light shone from the heavens and choirs of angels sang "AAAAAAH..." The idea... Read More →


Friday May 13, 2016 2:30pm - 4:00pm
Booz Allen Hamilton

4:00pm

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Friday May 13, 2016 4:00pm - 4:30pm
Aspen Center for Physics Patio

4:30pm

No Sane Compiler Would Optimize Atomics
False. Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. My hobby is to encourage compilers to do more of this, programmers to rely on it, and hardware vendors to give us new atomic toys to optimize with. Oh, and standardize yet more close-to-the-metal concurrency and parallelism tools. But, you say, surely volatile always means volatile, there’s nothing wrong with my benign races, nothing could even go wrong with non-temporal accesses, and who needs 6 memory orderings anyways‽ I’m glad you asked, let me tell you about my hobby…

Speakers
avatar for JF Bastien

JF Bastien

Jest-in-Time Compiler, template
JF Bastien is a compiler engineer, currently focusing on performance and security to bring portable, fast and secure code to the Web. JF is a member of the C++ standards committee, where his mechanical engineering degree serves little purpose. He’s worked on startup incubators, business jets, flight simulators, CPUs, dynamic binary translation, systems, and compilers.


Friday May 13, 2016 4:30pm - 6:00pm
Flug Auditorium

4:30pm

The CPU Cache: Instruction Re-Ordering Made Obvious
The CPU cache has been described as one of the greatest inventions in the history of computer science. In the era of the modern multi-core CPU, software design increasingly relies upon the CPU cache to enable performance, and to forgive our software implementation transgressions. This performance comes at a cost: To make best use of underlying CPU resources, the CPU and compiler will conspire to re-order the instructions specified in our source code algorithms -- at compile-time, and at run-time. This re-ordering can be perplexing to new programmers, and confusing when debugging real-world scenarios. However, re-ordering is explicitly allowed by the C++ Standard under the “As-If” rule, with C++11 providing the programmer additional tools through language and library features such as the C++11 memory model, atomics, memory fences, and threading libraries.

This is a, “First Principles” (i.e., “introductory”) discussion of the CPU cache, its anatomy, and its ever-growing role in hardware and software design. Modern performant systems are implemented with explicit knowledge of the CPU cache’s structure and behavior. Discussion is made of CPU registers, CPU cache levels, the cache line, the data bus, the CPU instruction pipeline, the compiler’s duty, and the tremendous hijinks performed by execution units within the processor core at runtime which leads to instruction re-ordering -- for which the knowledgeable C++ programmer is grateful.

No programmer can be an expert on everything. However, increasingly most C and C++ programmers need to be conversant with CPU cache issues and terminology at this level, and such understanding will make compiler and runtime behavior (and especially instruction re-ordering) much more obvious. From here, one begins to think about how to leverage parallelism and be concerned with concurrency.

Speakers
avatar for Charles Bay

Charles Bay

Senior Software Engineer, F5 Networks
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, and instrument/process/sub-assembly monitoring.



Friday May 13, 2016 4:30pm - 6:00pm
Booz Allen Hamilton

4:30pm

What is the basic interface?

When we read a function declaration, what expectations do we have of the function? What requirements and limitations do we take for granted? Our unspoken assumptions about function interfaces present an obstacle to precise reasoning about programs. 

Here, I will delve into the nitty-gritty procedural logic of function calls in C++, with particular emphasis on the things that often go without saying. I will present some suggestions about how we can make these implicit expectations precise, and how we can express deviation from these expectations in current and future versions of C++. 

This presentation will be a companion to my C++Now 2015 session, "How we reason about procedural programs," but no knowledge of that material will be necessary.


Speakers
avatar for Lisa Lippincott

Lisa Lippincott

Chief Software Architect, Tanium
Lisa Lippincott is Chief Software Architect at Tanium, a bay-area startup. Her claim to fame is writing one phrase appearing in the C++ standard. In her spare time, she studies mathematical logic with a category-theoretic approach.


Friday May 13, 2016 4:30pm - 6:00pm
Bethe

6:00pm

Dinner Break
On your own.

Mention “Physics” and you’ll be seated together. Some will offer a free appetizer. They expect a group but you don’t have a reservation and if they can’t accommodate you, please see http://eataspen.com for more restaurant ideas and off-season specials. 

Friday May 13, 2016 6:00pm - 9:00pm
Flug Auditorium

8:30pm

C++Now 2017 Planning Session
The planning committee for next year's conference gets started early. Join us if you'd like 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!

Friday May 13, 2016 8:30pm - 10:00pm
Flug Auditorium
 
Saturday, May 14
 

8:00am

Library in a Week
Library in a week 2020

Speakers

Saturday May 14, 2016 8:00am - 9:00am
Paepke Auditorium

9:00am

Future of Boost
The people who bring you Boost and C++ Now! talk and answer questions about what they see coming.


Saturday May 14, 2016 9:00am - 10:30am
Paepke Auditorium

10:30am

Break
Join us on the patio at the ACP for light snacks, drinks, and gossip.

Saturday May 14, 2016 10:30am - 11:00am
Aspen Center for Physics Patio

11:00am

Lagniappe: C++ Today: The Beast is Back
This talk will cover why engineers looking for performance choose C++. Jon will present an historical perspective of C++ focusing on what’s going on in the C++ community right now and where the language and its user base is heading. With a renewed interest in performance for both data centers and mobile devices, and the success of open source software libraries, C++ is back and it is hot. This talk will explain why C++ is most software engineers’ go-to language for performance. You will receive a rough historical sketch that puts C++ in perspective and covers its popularity ups and downs.

This talk is based, in part, on the book "C++ Today: The Beast is Back" published by O'Reilly.

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


Saturday May 14, 2016 11:00am - 12:30pm
Paepcke