Loading…
C++Now 2015 has ended
Please visit the C++Now website.
Monday, May 11
 

4:00pm MDT

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

Monday May 11, 2015 4:00pm - 6:00pm MDT
Aspen Meadows Resort 845 Meadows Rd, Aspen, CO 81611

6:30pm MDT

Dinner Break
Suggested Venue: 

Monday May 11, 2015 6:30pm - 8:30pm MDT
Flug Auditorium

8:30pm MDT

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

Monday May 11, 2015 8:30pm - 10:00pm MDT
Aspen Meadows Resort 845 Meadows Rd, Aspen, CO 81611
 
Tuesday, May 12
 

8:00am MDT

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

Speakers
avatar for Jon Kalb

Jon Kalb

Conference Chair, Jon Kalb, Consulting
Jon Kalb is using his decades of software engineering experience and knowledge about C++ to make other people better software engineers. He trains experienced software engineers to be better programmers. He presents at and helps run technical conferences and local user groups.He is... Read More →


Tuesday May 12, 2015 8:00am - 8:15am MDT
Paepcke Auditorium

8:15am MDT

Library in a Week: C++ Application Configuration
Library in a week 2015 will attempt to build a C++ application configuration library.  The simplest of programs require options, but modern C++ applications often have tens if not hundreds of configuration options that users can specify.  These options can be specified in a myriad of ways - command line parameters, configuration files of various forms (xml, json, ini), environment settings, and other platform specific options. Each option setting needs string to c++ type conversion, default values, validation checked, error messages provided, and documented for users.  In addition, it's typical that options can be specified in multiple locations - command line and configuration files -- so options from multiple sources need to be prioritized and merged. 

What is seemingly a simple problem can suddenly spiral into a large amount of code - often poorly organized and only vaguely related to the application at hand.  And that code often provides one of the primary interfaces of the application to users. What we'd really like is a library that provides a succinct way for the programmer to define and organize options with a minimum amount of custom code. Ideally an all header library that supports modern C++ and modern configuration formats like JSON.

Of course for many years boost has had libraries to help. Program options being the primary library targeted at the domain.  
http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html

Another is property tree 
http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html

Unfortunately neither library covers all the ground by itself.  So maybe all we need is to modernize and mashup property tree and program options? Or modernize and add to one or the other. Or maybe there's something more needed -- that's what the workshop will explore.

The workshop will work like this.  On day 1 I will provide motivation and an overview of the library development. We will split into individuals and groups to attack various aspects of the library.  Some groups may look at existing libraries for inspiration providing presentations on the best aspects of the other libraries. From that point forward it will be up to the group to direct the remainder of the workshop.

Collaboration Tools: 

Library in a week 2015 will use a git repository for collaboration and sharing
of information.

git clone https://github.com/JeffGarland/liaw2015.git

Also the group will use an email list for discussions beyond face to face meetings.
 
Level: Beginner to Expert 

Attendees should have a basic background in C++.

Slides

Speakers

Tuesday May 12, 2015 8:15am - 9:00am MDT
Paepcke Auditorium

9:00am MDT

Generic Programming with Concepts

Generic programming is widely practiced in the C++ community as a means of providing efficient, reusable libraries. This style of programming is characterized by the use of templates to define data structures and algorithms in terms of template parameters that can be replaced by user-supplied types and values later. Today, C++ templates are unconstrained, meaning that any type or value could potentially be substituted for a template parameter. This is clearly not the case, since for example, taking the arithmetic mean of a sequence of strings is almost certainly meaningless. The Concepts Lite Technical Specification extends the C++ programming language with features that support the specification and checking of constraints on template arguments. This talk focuses on principles of generic programming using concepts.


Speakers
avatar for Andrew Sutton

Andrew Sutton

Owner, Lock3 Software, LLC
Andrew Sutton is an owner of Lock3 Software, LLC, a software research and development company in Kent, Ohio. His spends his days working on C++ language extensions in Clang and GCC and working on various WG21 language proposals.His past work included the design, specification, and... Read More →


Tuesday May 12, 2015 9:00am - 10:30am MDT
Paepcke Auditorium

11:00am MDT

Parallel Computing: Strategies and Implications
Multi-core architecture is the present and future way in which the market is addressing Moore’s law limitations. Multi-core workstations, high performance computers, GPUs and the focus on hybrid/public cloud technologies for offloading and scaling applications is the direction development is heading.
Leveraging multiple cores in order to increase application performance and responsiveness is expected especially from classic high-throughput executions such as rendering, simulations and heavy calculations.
Choosing the correct multi-core strategy for your software requirements is essential. Making the wrong decision can have serious implications on software performance, scalability, memory usage and other factors.
In this overview we’ll explore various considerations for choosing the correct multi-core strategy for your application’s requirement and investigate the pros and cons of multi-threaded development vs multi-process development.
For example, Boost’s GIL (Generic Image Library) provides the ability to efficiently code image processing algorithms. But deciding whether your algorithms should be executed as multi-threaded or multi-process has a high impact on your design, coding, future maintenance, scalability, performance and other factors.
A partial list of considerations that should be taken into account before taking this architectural decision can look like:
• How big are the images I need to process 
• What risks can I have in terms of race-conditions, timing issues, sharing violations – does it justify multi-threading programming?
• Do I have any special communication and synchronization requirements?
• How much time would it take my customers to execute a large scenario?
• Would I like to scale processing performance by using the cloud or cluster?
In order to learn how this issue is being addressed in a real-world scenario, we will examine common development and testing environments we are using in our daily work and compare the multi-core strategies they’ve implemented in order to support higher development productivity.

Speakers
GS

Guy Shattah

Principle Engineer, Incredibuild (xoreax)
I am a veteran software engineer with expertise in the fields of multi-threaded, distributed development of mission critical real-time systems. such as storage, networking, security and more. My Professional and academic experience is focused on innovations in the fields of high-availability... Read More →


Tuesday May 12, 2015 11:00am - 12:30pm MDT
Hudson

11:00am MDT

Testing Battle.net (before deploying to millions of players)
Battle.net is the online service that runs Blizzard's games. As such, it is a large scale distributed system with many interacting parts and dependencies on various services and data. While developing Battle.net servers, I needed a way to isolate and test functionality that I was working on.

In this talk I will cover my experience designing for testability of components in a distributed system, and practical ways to structure classes and data to facilitate testing. I will also present my solution to the problem of testing my code for correctness, performance and scalability without having to deploy a full-scale environment and spin up a million clients.

Slides 

Speakers
avatar for Ben Deane

Ben Deane

Quantlab
Ben was in the game industry for 23 years, at companies like EA and Blizzard. For the last couple of years he's been working in the finance industry at Quantlab. He's always looking for useful new techniques in C++, and he geeks out on algorithms, APIs, types and functional progr... Read More →


Tuesday May 12, 2015 11:00am - 12:30pm MDT
Flug Auditorium

11:00am MDT

Your CPU Is Binary
The modern CPU is binary, which has so influenced the evolution of programming languages that software engineers think in bivalent (Boolean) logic and are sometimes blind to alternative systems. In contrast, three-value logic (3VL) is an example of multi-valued logic which is increasingly embraced on some modern hardware, such as for communications and memory storage.

This is principally a speculative discussion of the modern multi-core (binary) CPU as it is seen by the programmer, and how and why it may evolve to a 3VL CPU to achieve greater efficiencies, higher radix economy, and enable more correct software. A historical review is made of the ternary CPU, attention is drawn to problems with bivalent logic in creating APIs, and light discussion is made for how a practical transition may be made to ternary logic in source code, and the eventual effect it may have on the C++ language standard.

Slides 

Speakers
avatar for Charley Bay

Charley Bay

Charley Bay
Charley is a software developer with over three decades of experience using C++ in multiple regulated and high-performance fields focused on large-scale and distributed systems in performance-sensitive environments including time-sensitive processing of large data sets, performance... Read More →


Tuesday May 12, 2015 11:00am - 12:30pm MDT
Bethe

2:30pm MDT

Functional Geometry: Producing Pure Spaces
Continuing our investigation of generic compile-time synthesis of geometric spaces from last year's conference, we formalize our approach to designing a spatial computation engine using category theory and functional programming paradigms. We examine cartesian product spaces and develop a theory of computable movements, categorizing our geometric structs as we go, providing a case-study lesson in category theory, geometric algebra, differential geometry, C++ template metaprogramming, and generic lambdas. Specifically, we use C++14 to combine two formalisms: the first is Geometric Algebra, a mathematical system for multidimensional synthesis and analysis. It serves as a unifying substrate for modeling physical relationships in any dimension, and within any ambient metric. The second, Functional Programming, organizes the system of constructions, coincidences, and causes that generate our geometric world. With this union of form and process we demonstrate how morphing structures - kinematic chains, curved-crease origami, knotted weaves and braids, organic forms - can be deductively modeled by structured morphisms - algebras, monadic continuations, declarative constraint networks, and metaprogramming techniques. Developing these programmable abstractions into a C++ template library, we achieve a dimensional fluency - an ability to solve complex geometric problems visually and intuitively. The result is a compact, expressive and extendable system for articulating spatial configurations, and a potential contribution to the Boost library.

Slides 

Speakers
PC

Pablo Colapinto

Head of Immersive, Nexus Studios
Pablo leads the development of next-generation XR spatial interactions, behaviors, experiences, games and narratives for innovation-led clients including Disney, Niantic, Google, Facebook, Samsung, MLB, NBA, T-Mobile, Verizon, and AT&T.  His background bridges filmmaking, immersive... Read More →


Tuesday May 12, 2015 2:30pm - 4:00pm MDT
Bethe

2:30pm MDT

Lessons Learned
A cornucopia of small insights, and the stories behind them, that attempt to explain how I code day to day. They work for me - I can only hope you find them insightful and helpful as well. Let's discuss!

Including:

- Commenting - Is the Queen of Clubs a Value or an Object? - Error handling - know your audience - How to NOT call assert - That one simple rule to writing better code NOW! - And more

Slides 

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.Follow @tvaneerd... Read More →


Tuesday May 12, 2015 2:30pm - 4:00pm MDT
Hudson

2:30pm MDT

Type Deduction in C++14
C++14 has many ways of naming a type. In addition to using the type's name directly, we have auto, auto &, auto const &, auto &&, decltype(auto), and decltype(some-expression). In C++11, these methods of type deduction only applied to variable declarations, but C++14 adds return type deduction for normal functions.

When should we use this powerful feature, and when should we be more explicit with our types? What new types of libraries do these features allow, and what are the risks?

We will talk about how to design a modern C++ library that takes advantage of type deduction without harming readability.

Slides 

ODP File

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


Tuesday May 12, 2015 2:30pm - 4:00pm MDT
Flug Auditorium

4:30pm MDT

Yomm11: Open Multi-Methods for C++11
Open methods - virtual functions declared outside a class - solve many important problems: they make components more extensible; they help reduce coupling by allowing a better partitioning of responsibilities; and they solve the problem of sewing together layers in multi-tier architectures. Multi-methods - methods dispatched based on the dynamic type of more than one argument - sometimes come handy when dealing with situations like matrix addition or as a replacement for the Visitor pattern. Multi-methods extend to run time the multi-argument selection found in function overloading and template specialization.

A proposal to support open multi-methods was submitted by Bjarne Stroustrup and col. but failed to gain acceptance so far. C++11 makes it possible to support them in a library with a reasonable syntactic burden.

Slides 

Speakers
avatar for Jean-Louis Leroy

Jean-Louis Leroy

Senior Software Engineer, Bloomberg LP
I am the author of yomm2, a library that implements open multi-methods. See https://github.com/jll63/yomm2


Tuesday May 12, 2015 4:30pm - 6:00pm MDT
Hudson

4:30pm MDT

constexpr: C++ At Compile Time
I'm excited about constexpr. It's probably my favorite C++11 feature, and it has become even better with C++14. But when I talk to other developers about constexpr they seem puzzled. What sorts of useful computations can the compiler possibly do before runtime?

I'd like to take this session to explore some of the capabilities that constexpr brings to the table. We'll be looking at compile-time parsing, floating-point computations, containers, and maybe even explore what it would take to make a compile-time std::string. We'll also look at a possible way to work around one of constexpr's limitations.

Slides 

Speakers
avatar for Scott Schurr

Scott Schurr

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


Tuesday May 12, 2015 4:30pm - 6:00pm MDT
Flug Auditorium

4:30pm MDT

Biicode, a C/C++ dependency manager with a hosting service
In this workshop session, the biicode C++ (and C) dependency manager and automation tool will be used, hands on. An initial introduction to the problem and the general ideas will be done, but soon proceed to real usage: - Developing a simple package, retriving google gtest from the servers automatically to develop unit tests, publishing such package to biicode servers, and reusing the published code in a new, different project. This project will also use another library, a OpenGL window manager. - It will be shown howtos: Versions of dependencies, managing different alternate packages. Deps overriding and conflict resolution. Managing and reusing cmake configuration files.

Slides 

Speakers
avatar for Diego Rodriguez-Losada Gonzalez

Diego Rodriguez-Losada Gonzalez

Lead Architect, 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 →


Tuesday May 12, 2015 4:30pm - 6:00pm MDT
Bethe

6:30pm MDT

Dinner Break
Suggested Venue: 

Hickory House
 or White House Tavern 

Tuesday May 12, 2015 6:30pm - 8:30pm MDT
Flug Auditorium

8:30pm MDT

Boost 2.0
Boost’s original mission was to save C++ from extinction in the face of Java, C# et.al. by providing high quality enhancements to the C++ standard library. I argue that this mission has been accomplished, so that Boost needs a updated new mission. I will propose such a mission to motivate the continuing evolution of Boost and C++ over the next 10 years.  This will be to:
  • Facilitate creation of quality C++ libraries by and for a wider audience
  • Demonstrate standards and promote practices which result in quality code.
An evolution of mission will require changes Boost’s practices.  I will present specific proposals encompassing the following:
  • Reviews and review management
  • Library deployment and deprecation
  • Testing
  • Economic support for library development
By proposing specific mission and evolution of practices, I hope to provide a framework around which alternatives can be proposed and debated in the best of Boost tradition. Some other presentations at this conference touch on related themes.  I will invite presenters to refer to these topics in their own presentation and for other interested parties to make their own proposals in the “lightening talks” sessions later in the week. The goal is that by the last session - “The Future of Boost” we might have some consensus on where to take Boost in the coming decade.

Link to slides 

Speakers
avatar for Robert Ramey

Robert Ramey

Software Developer, RRSD
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 development. Lately, he has been mostly interested in C++ library design and implementation related to Boost... Read More →


Tuesday May 12, 2015 8:30pm - 10:00pm MDT
Flug Auditorium
 
Wednesday, May 13
 

8:00am MDT

Library in a Week: C++ Application Configuration
Library in a week 2015 will attempt to build a C++ application configuration library.  The simplest of programs require options, but modern C++ applications often have tens if not hundreds of configuration options that users can specify.  These options can be specified in a myriad of ways - command line parameters, configuration files of various forms (xml, json, ini), environment settings, and other platform specific options. Each option setting needs string to c++ type conversion, default values, validation checked, error messages provided, and documented for users.  In addition, it's typical that options can be specified in multiple locations - command line and configuration files -- so options from multiple sources need to be prioritized and merged. 

What is seemingly a simple problem can suddenly spiral into a large amount of code - often poorly organized and only vaguely related to the application at hand.  And that code often provides one of the primary interfaces of the application to users. What we'd really like is a library that provides a succinct way for the programmer to define and organize options with a minimum amount of custom code. Ideally an all header library that supports modern C++ and modern configuration formats like JSON.

Of course for many years boost has had libraries to help. Program options being the primary library targeted at the domain.  
http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html

Another is property tree 
http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html

Unfortunately neither library covers all the ground by itself.  So maybe all we need is to modernize and mashup property tree and program options? Or modernize and add to one or the other. Or maybe there's something more needed -- that's what the workshop will explore.

The workshop will work like this.  On day 1 I will provide motivation and an overview of the library development. We will split into individuals and groups to attack various aspects of the library.  Some groups may look at existing libraries for inspiration providing presentations on the best aspects of the other libraries. From that point forward it will be up to the group to direct the remainder of the workshop.

Collaboration Tools: 

Library in a week 2015 will use a git repository for collaboration and sharing
of information.

git clone https://github.com/JeffGarland/liaw2015.git

Also the group will use an email list for discussions beyond face to face meetings.
 
Level: Beginner to Expert 

Attendees should have a basic background in C++.

Speakers

Wednesday May 13, 2015 8:00am - 9:00am MDT
Paepcke Auditorium

9:00am MDT

Numerical Weather Prediction: Facing the Future with C++

Numerical Weather Prediction (NWP) is a field that is highly data-intensive. Meteorological data is produced and processed in enormous amounts with very tight, time-critical, constraints. To produce a global forecast, millions of world-wide measurements and satellite images must be analysed and then fed into a model of the atmosphere to compute raw solution fields that are subsequently post-processed to generate millions of specialised user-driven products.

Historically, the tools and models that make up this complex chain have been hand-tuned and parallelised with MPI/OpenMP and run on special, purpose-built supercomputers. Written in monolithic Fortran, the code base for these models has become hard to maintain and difficult to adapt to rapidly evolving concurrent hardware like GPGPUs and many-core CPUs. The NWP community has started to recognise the need to embrace modern software techniques for the many-core era, with special emphasis on high-performance languages like C++ and the use of DSL's.

In a way, H. Sutter's "free-lunch" has been paid for in advance by NWP: its software models have been concurrent and distributed since the ‘90s. While there is still much work to do in model scalability, the challenges ahead also include: electrical power limits, data I/O rates, exponential volume growth, etc.

We will show how we are addressing these challenges, and present some solutions to modernise our software stack. In particular we will present a C++ DSEL inspired in functional programming, for building pipelines for parallel processing of meteorological data. Scientists with little or no knowledge of C++, can extend this DSEL to pre-process meteorological observations and post-process model output to generate meteorological products.

Slides 


Speakers
avatar for Tiago Quintino

Tiago Quintino

ECMWF
Dr. Tiago Quintino is an Analyst and Team Leader for Data Handling software development at ECMWF (European Centre for Medium-range Weather Forecasting), where he develops software for analysing, processing and storing metereological data. He holds a Master in Aerospace Engineering... Read More →


Wednesday May 13, 2015 9:00am - 10:30am MDT
Paepcke Auditorium

11:00am MDT

A Brief History of Time at the Aspen Center for Physics
Patty share the history and mission of the Aspen Center for Physics.

Speakers

Wednesday May 13, 2015 11:00am - 11:30am MDT
Bethe

11:00am MDT

On the design and Boost-based implementation of two new C++ libraries for atmospheric research
Atmospheric science has traditionally been one of the toughest strongholds of Fortran. This talk will summarise experiences from development of two C++ libraries aimed at the atmospheric community. The libmpdata++ [1] implements state-of-the-art numerics for partial differential equations. The libcloudph++ [2] features a collection of algorithms for modelling clouds and precipitation.

The story begins with obtaining research funding for software development, goes on to the design and implementation -- the focus of the presentation, and concludes with public peer-review of the journal-paper-structured documentation of the libraries. The libraries are free and open source software and were implemented using several C++ libraries including: Blitz++, Thrust, Boost.Units, Boost.Thread, Boost.odeint and Boost.Python. The talk will give details on how and why these libraries were used and how their use contributed to a level of maintainability hardly attainable with other languages.

Slides

[1]: http://libmpdataxx.igf.fuw.edu.pl [2]: http://libcloudphxx.igf.fuw.edu.pl

Speakers
avatar for Sylwester Arabas

Sylwester Arabas

Researcher, University of Warsaw
I work in the Atmospheric Physics Division, Faculty of Physics, University of Warsaw, Poland. I study aerosol, cloud, and precipitation microphysics, mostly by means of numerical modelling. I'm an atmospheric physicist by training working as a research software engineer, coding... Read More →


Wednesday May 13, 2015 11:00am - 11:45am MDT
Hudson

11:00am MDT

Thinking Portable: How and why to make your C++ cross platform
Designing your application to be portable, even if you never intend to go beyond one platform, will lead to cleaner more stable code. We will cover how considering portability will improve your code base; and address the practical considerations you should make to ensure portability if you need it in the future.

Slides 

Speakers
avatar for Jason Turner

Jason Turner

Owner, Jason Turner
Jason is host of the YouTube channel C++Weekly, co-host emeritus of the podcast CppCast, author of C++ Best Practices, and author of the first casual puzzle books designed to teach C++ fundamentals while having fun!


Wednesday May 13, 2015 11:00am - 11:45am MDT
Flug Auditorium

11:45am MDT

Why in heaven there is no dependency management for C++?
C++ (and C) are the larger and older mainstream languages, but they lack an important devtool: a dependency manager, which other languages have.

This talk will analyse the state of the art, and deep dive into existing solutions, possible problems and difficulties and the possible implications for the future of the language.

Slides 

Speakers
avatar for Diego Rodriguez-Losada Gonzalez

Diego Rodriguez-Losada Gonzalez

Lead Architect, 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 →


Wednesday May 13, 2015 11:45am - 12:15pm MDT
Hudson

11:45am MDT

Boost.Compute: A library for GPU/parallel-computing
Boost.Compute is a library for GPU/parallel-computing. It provides a high-level, STL-like API and is portable to a wide variety of parallel accelerators including GPUs, FPGAs, and multi-core CPUs. This talk will give an overview of the library and demonstrate how to write and execute high-performance C++ applications on modern GPU hardware.

Slides 

Speakers

Wednesday May 13, 2015 11:45am - 12:30pm MDT
Flug Auditorium

11:45am MDT

Developing EDSL's for Boost.Spirit
Teach how to develop Embedded Domain Specific Languages using Boost.Spirit support and how to convert these grammars to parsers and generators from the same grammar.

We will use General Inter-Orb Protocol from CORBA as example of generating parsers and generators from structured heterogenous sequences. Also how to deal with alignment and endianness with the use of Boost.Spirit's grammar locals and parameters.

Speakers
avatar for Felipe Magno de Almeida

Felipe Magno de Almeida

Expertise Solutions


Wednesday May 13, 2015 11:45am - 12:30pm MDT
Bethe

12:45pm MDT

Boost Operations: Community Maintenance Team
This is an information/work session for the Boost Community Maintenance Team.

    http://svn.boost.org/trac/boost/wiki/CommunityMaintenance 

If you would like to help with or find out more about the CMT, please attend.

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

Moderators
Wednesday May 13, 2015 12:45pm - 2:15pm MDT
Bethe

2:30pm MDT

Back to the Future
In today's computing, where multi-core is the new modality and parallelism is clearly here to stay, we have to look into finding higher level abstractions in C++ allowing to easily write applications which utilize all of the available parallelism. Ideally, those abstractions provide uniform access to various types of parallelism: be it local (shared memory), remote (distributed memory), or heterogeneous (using accelerators and coprocessors). The current work being done in the context of the C++ standardization efforts provides a good starting point, but is not sufficient to uniformly cover the bulk of those use cases. This talk will give an introduction to a reference implementation of a heterogeneous, and extensible future. We will focus on giving a walkthrough through the various components and showcase the general structure of our library by outlining specific implementation techniques ranging from general API design, serialization and high speed network support. This is in contrast to exisiting parallel programming models such as OpenMP or MPI which tend to be unable to fully exploit all available hardware resources. Especially for modern hardware architectures, and even more for the architectures to come, this poses a big challenge for application developers who want to fully employ the existing hardware resources. We will present results from our work on a new programming model targeting best possible application scalability. This programming model is maximally aligned with the current C++ standard and the related standards proposals. This ensures an easy learning curve for new programmers. We will demonstrate that this programming model enables to write application which consistently out-scale and out-perform existing ones. The resulting codes enable performance portability towards future architectures.

Slides 

Speakers
avatar for Agustin Berge

Agustin Berge

Fusion Fenix
Does C++ stuff.
avatar for Thomas Heller

Thomas Heller

Researcher, Friedrich-Alexander-University Erlangen-Nuremberg
Thomas is a member of the research staff at the institute for computer architectures at the Friedrich-Alexander-University Erlangen Nuremberg. His interests are in High Performance Computing, more specifically in how to exploit parallelism of current and new architectures, mainly... Read More →
HK

Hartmut Kaiser

STE||AR Group, CCT/LSU
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 best... Read More →


Wednesday May 13, 2015 2:30pm - 4:00pm MDT
Hudson

2:30pm MDT

Large-Scale C++: Advanced Levelization Techniques, Part I
Developing a large-scale software system in C++ requires more than just a sound understanding of the logical design issues covered in most books on C++ programming. To be successful, one also needs a grasp of physical design concepts that, while closely tied to the technical aspects of development, include a dimension with which even expert software developers may have little or no experience.In this talk we begin by briefly reviewing the basics of physical design. We then present a variety of levelization and Insulation techniques, and apply them in present-day, real-word examples to avoid cyclic, excessive, or otherwise inappropriate dependencies. Along the way, we comment on how to make the best use of what the C++ language has to offer.

Slides for Part I & II
 

Speakers
avatar for John Lakos

John Lakos

Software Engineer, Bloomberg
John Lakos, author of Large-Scale C++ Software Design [Addison-Wesley, 1996], serves at Bloomberg LP in New York City as a senior architect and mentor for C++ software development worldwide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working... Read More →


Wednesday May 13, 2015 2:30pm - 4:00pm MDT
Bethe

2:30pm MDT

switchAny - A Practical Exercise in Template Metaprogramming
Have you heard about template metaprogramming? Have you seen how you can use it to calculate factorials at compile time? Have you thought to yourself that this sounds completely useless?

In this tutorial I present a small but real-world application of template metaprogramming. I show switchAny, a tool to dispatch to different code pieces based on the type contained in a Boost.Any holder. I demonstrate a number of TMP techniques used to develop this tool, including new techniques possible only in C++14 and C++1z.

Link to github repo 

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


Wednesday May 13, 2015 2:30pm - 4:00pm MDT
Flug Auditorium

4:30pm MDT

New Build System for New C++
At CppCon 2014 I gave a lightning talk trying to convince the audience that C++ needed a package manager. As it turned out, no convincing was necessary. I was also surprised by the number of people who told me after the presentation how desperately they needed this. In particular, it made me realize that this is not only a problem for a relatively few cross-platform library developers but also for organizations that struggle to manage their build configurations on a single platform using one C++ compiler.

Once you start thinking about a cross-platform C++ package manager, it won't be long before you realize that you also need a cross-platform build system to match. And when it comes to the existing tools, things don't look very promising. The more I thought about this the clearer it became that in order to create a C++ package manager we will first need to solve the build system problem.

So in this talk I would like to present the design of the new C++ build system I am working on and show lots of examples. As it is still work in progress, I am looking to get feedback and hear your ideas as much as to show what I have done so far. The discussion and choice of a build system can often have a religious aspect to it. But we are not going to hide from that. So if you don't think we need yet another build system, come and convince us why the whole thing is a bad idea.

Slides 

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


Wednesday May 13, 2015 4:30pm - 6:00pm MDT
Flug Auditorium

4:30pm MDT

Large-Scale C++: Advanced Levelization Techniques, Part II
Developing a large-scale software system in C++ requires more than just a sound understanding of the logical design issues covered in most books on C++ programming. To be successful, one also needs a grasp of physical design concepts that, while closely tied to the technical aspects of development, include a dimension with which even expert software developers may have little or no experience.In this talk we begin by briefly reviewing the basics of physical design. We then present a variety of levelization and Insulation techniques, and apply them in present-day, real-word examples to avoid cyclic, excessive, or otherwise inappropriate dependencies. Along the way, we comment on how to make the best use of what the C++ language has to offer.

Slides for Part I && II
 

Speakers
avatar for John Lakos

John Lakos

Software Engineer, Bloomberg
John Lakos, author of Large-Scale C++ Software Design [Addison-Wesley, 1996], serves at Bloomberg LP in New York City as a senior architect and mentor for C++ software development worldwide.  He is also an active voting member of the C++ Standards Committee’s Evolution Working... Read More →


Wednesday May 13, 2015 4:30pm - 6:00pm MDT
Bethe

4:30pm MDT

The Price of Shared Pointers or Why Passing them by-reference can be Useful
Shared pointers play a fundamental part of modern C++ programming. However, they come with a price. The price usually known is the overhead of the control object, which can became even more expensive if make_shared() is used. But there is an additional price that can play an important role if good performance is key: synchronization. As a consequence counter-intuitive things such as passing shared pointers by reference can become important. This talk discusses the whole story of shared pointers.

Speakers
avatar for Nicolai Josuttis

Nicolai Josuttis

IT Communication
Nicolai Josuttis (http://www.josuttis.com) 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 (www.cppstdlib.com), C++ Templates (www.tmplbook.com), C++1... Read More →


Wednesday May 13, 2015 4:30pm - 6:00pm MDT
Hudson

6:30pm MDT

Dinner Break
Suggested Venue: 

Mezzaluna or Campo de Fiori (both 25% off specials) 

Wednesday May 13, 2015 6:30pm - 8:30pm MDT
Flug Auditorium

8:30pm MDT

Lightning Talks

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere Consulting
Michael Caisse has been crafting code in C++ for nearly 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... Read More →


Wednesday May 13, 2015 8:30pm - 10:00pm MDT
Flug Auditorium
 
Thursday, May 14
 

8:00am MDT

Library in a Week: C++ Application Configuration
Library in a week 2015 will attempt to build a C++ application configuration library.  The simplest of programs require options, but modern C++ applications often have tens if not hundreds of configuration options that users can specify.  These options can be specified in a myriad of ways - command line parameters, configuration files of various forms (xml, json, ini), environment settings, and other platform specific options. Each option setting needs string to c++ type conversion, default values, validation checked, error messages provided, and documented for users.  In addition, it's typical that options can be specified in multiple locations - command line and configuration files -- so options from multiple sources need to be prioritized and merged. 

What is seemingly a simple problem can suddenly spiral into a large amount of code - often poorly organized and only vaguely related to the application at hand.  And that code often provides one of the primary interfaces of the application to users. What we'd really like is a library that provides a succinct way for the programmer to define and organize options with a minimum amount of custom code. Ideally an all header library that supports modern C++ and modern configuration formats like JSON.

Of course for many years boost has had libraries to help. Program options being the primary library targeted at the domain.  
http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html

Another is property tree 
http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html

Unfortunately neither library covers all the ground by itself.  So maybe all we need is to modernize and mashup property tree and program options? Or modernize and add to one or the other. Or maybe there's something more needed -- that's what the workshop will explore.

The workshop will work like this.  On day 1 I will provide motivation and an overview of the library development. We will split into individuals and groups to attack various aspects of the library.  Some groups may look at existing libraries for inspiration providing presentations on the best aspects of the other libraries. From that point forward it will be up to the group to direct the remainder of the workshop.

Collaboration Tools: 

Library in a week 2015 will use a git repository for collaboration and sharing
of information.

git clone https://github.com/JeffGarland/liaw2015.git

Also the group will use an email list for discussions beyond face to face meetings.
 
Level: Beginner to Expert 

Attendees should have a basic background in C++.

Speakers

Thursday May 14, 2015 8:00am - 9:00am MDT
Paepcke Auditorium

9:00am MDT

Ranges for the Standard Library
Work has begun on the so-called Ranges TS, which promises to bring concept checking and range support to the standard library. In this talk, I describe the ideas behind ranges, what new idioms they enable, and where we are in the process. Come get a peek at what STL 2.0 might look like.

Conference Keynote: Ranges for the Standard Library
 ||| PPTX File
 

Speakers
avatar for Eric Niebler

Eric Niebler

Eric Niebler is a freelance software developer, consultant, trainer and author. His specialty is C++ library and application development, with special emphasis on modern C++ techniques, and extra special emphasis on generic programming, metaprogramming, and domain-specific languages... Read More →


Thursday May 14, 2015 9:00am - 10:30am MDT
Paepcke Auditorium

11:00am MDT

A review of C++ 11/14 only Boost libraries - Fiber, AFIO, DI and APIBind
As yet, no official Boost library requires C++ 11 or 14, but there are such libraries in the pipeline - Fiber is conditionally approved, AFIO and DI are in the formal review queue, and APIBind will be entering the queue shortly after C++ Now. Why do these libraries require C++ 11 or 14? Could they have been implemented with C++ 03, and what sacrifices would have had to have been made to support 03? Or do they incorporate designs which would be impossible in an 03 compiler, maybe due to lack of language features or because meta-programming limits would make the design untenable or the library unusable? What C++ 11/14 features do these libraries use? Is there a common theme of the most popular C++ 11/14 features used, or is the use of the state of the art more patchy? Are there techniques used in one library which would make a lot of sense to be used in another library, but for some reason are not? Do these new libraries take notice of one another and integrate themselves well with other libraries, or are they ivory towers? How many of these forthcoming libraries explicitly seek to contribute to future C++ standardization, and how many are instead application libraries solving a particular problem domain? For those intended to contribute towards standardization, is there a theme e.g. are they about standardizing functional C++ programming into the standard? We'll explore these questions and more in a session that examines the future of Boost libraries with regard to language and STL requirements.

* Boost.Fiber: a framework for micro-/userland-threads (fibers) scheduled cooperatively.

* Boost.AFIO: strongly ordered asynchronous filesystem and file i/o extending ASIO.

* Boost.DI: provides compile time, macro free constructor dependency injection.

* Boost.APIBind: toolkit for modularizing Boost libraries, managing versioned API and ABI dependency binds, makes it easy for Boost libraries to switch between use of the C++ 11 STL and the Boost STL.

Slides 

Speakers
avatar for Niall Douglas

Niall Douglas

Consultant, ned Productions Ltd
Niall Douglas is a lead author of WiP Boost.AFIO v2, Boost.Outcome, Boost.KernelTest and Boost-lite. He has been the lead Google Summer of Code administrator for Boost since 2014. He is an Affiliate Researcher with the Waterloo Research Institute for Complexity and Innovation at the... Read More →


Thursday May 14, 2015 11:00am - 12:30pm MDT
Hudson

11:00am MDT

Robustness and Security Techniques with Modern C++
This session provides best practices for building secure and robust applications with modern C++ language features and toolchains. The emphasis is on integration of new language features such as strong enums, static assert, type inferencing, error codes, ... along with significant improvements in the toolchains such as improved static analysis the run-time address, thread, and undefined behavior sanitizers. We also discuss best practices for compiling and linking to harden the resulting libraries and executables including stack and heap protection, read-only stack, and use of fortified variant of the standard libraries.

The goal is to bring together a range of best practices into a single session and show how they can be integrated. There are a number of interesting build issues for maximizing productivity while maintain high security and robustness.



gleaned from several years of building retail point of sale applications.


Thursday May 14, 2015 11:00am - 12:30pm MDT
Flug Auditorium

11:00am MDT

Type-safe configuration library
There are many ways to implement a configuration library; some of them are "stringly-typed", some use boost::any to implement erasure and expose it in their interfaces, but I think that this just means that the abstractions are leaking. I don't want to know what specific type erasure implementation is used in the library; I don't want to deal with things like `any_cast`, and I definitely do not want to ever get `bad_any_cast` thrown at me.

So, I've created a library that allows you to create type-level tags for your data that's to be stored in the configuration object, so the checking for `bad_any_cast` is moved from runtime to compile time, and we all love compile time checks more than runtime ones. This talk is meant as a tour around the library and its features. I will also talk about Boost.TypeIndex library, and some metaprogramming tricks that make using `enable_if` less painful.

Slides


Speakers
avatar for Michał Dominiak

Michał Dominiak

System Software Engineer, Nvidia


Thursday May 14, 2015 11:00am - 12:30pm MDT
Bethe

12:45pm MDT

Boost Operations: Release Management
This is an information/work session for the Boost release management process.

If you would like to help with or find out more about Boost release management, please attend.

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

Moderators
avatar for Beman Dawes

Beman Dawes

Emeritus, C++ Standards Committee
Beman Dawes is a software developer from Virginia in the United States and the founder of boost.org. He is the author of the StreetQuick geographic atlas library used by digital map publishers to help people get really, really, lost. He wrote his first computer program 40 years ago... Read More →

Thursday May 14, 2015 12:45pm - 2:15pm MDT
Bethe

2:30pm MDT

How we reason about procedural programs
As programmers, we reason about the behavior of programs routinely, and with a remarkable degree of correctness. But we rarely reflect on how we achieve this feat.

In this talk, I intend to shine a light on the fundamental principles of reasoning about procedural programs, examine the assumptions behind them, and describe some of the ways they combine to let us reason about complex programs.

Slides 

Speakers
avatar for Lisa Lippincott

Lisa Lippincott

Software Architect, Tanium
Lisa Lippincott designed the software architectures of Tanium and BigFix, two systems for managing large fleets of computers. She's also a language nerd, and has contributed to arcane parts of the C++ standard. In her spare time, she studies mathematical logic, and wants to make computer-checked... Read More →


Thursday May 14, 2015 2:30pm - 4:00pm MDT
Hudson

2:30pm MDT

Modern generic programming using the Tick and Fit libraries
C++ templates provide a very powerful abstraction for generic programming. Even so, they still suffer from long and confusing compile errors and this puts an extra burden of complexity on library writers who want to provide flexibility in their interfaces. In this talk, we will first discuss the importance of concept-based type requirements in code in order to produce clear compile errors, and how the Tick library can be used to specify and check those type requirements.

Later, we will discuss how the Fit library can further enhance generic programming. The Fit library provides many abstractions over functions including a way to do sophisticated overloading in a simple and concise manner. We will discuss in this talk how we can leverage these abstractions with overloading to provide simple and flexible interfaces. We will also look at comparison of these solutions with the Concepts Lite proposal and Boost.ConceptCheck.

Link to Materials
 ||| PDF File
 

Speakers
avatar for Paul Fultz II

Paul Fultz II

Software Engineer, AMD


Thursday May 14, 2015 2:30pm - 4:00pm MDT
Bethe

2:30pm MDT

Functions Want To Be Free
When designing a class, what do you make a member function, x.f(), and what do you make a free function, f(x)? When extending an already existing class, do you provide extra functionality with inheritance, composition, or adding new free functions? Do friend functions really violate encapsulation?

This presentation will cover techniques that not only allow safe and efficient interfaces, but also simplify your code. We will combine ideas from generic programming and object-oriented programming to achieve these goals. This talk will start with the basics of good engineering principles and build up from these to explain how to write scalable software. By taking a thoughtful approach to what should be a member function and what should be a free function, you can reduce code duplication and code size, thereby reducing the surface area for bugs.

Slides 

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


Thursday May 14, 2015 2:30pm - 4:00pm MDT
Flug Auditorium

4:30pm MDT

Boostache Exposed - the internals of Boost's template engine
Template engines are commonly found generating web pages, customer reports, or even source code. They take a source template and data model as input and generate some desired output.

Boostache was started as the Library in a Week challenge from CppNow'14. It initially supported the mustache template format and a recursive variant based data model.

Today Boostache supports multiple template formats and adapts automagically at compile time to a variety of user defined data models. Many of the techniques utilized in Boostache are the same that Ciere has employed in custom IDL compilers and Domain Specific Language systems, compilers, and runtimes.

This talk will introduce Boostache and then delve into the internal architecture and design of the library. We will explore some implementation details of the parser, compiler, virtual machine, and generic data model infrastructure with the goal to expose useful techniques and patterns from this C++11 code base that can be used in participants libraries and applications.

Slides 

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere Consulting
Michael Caisse has been crafting code in C++ for nearly 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... Read More →


Thursday May 14, 2015 4:30pm - 6:00pm MDT
Bethe

4:30pm MDT

Lock-free by Example: Towards an Interesting Lock-free MPMC Queue
An "interesting" lock-free queue? Well, "multi-producer, multi-consumer, growing, shrinking, mostly contiguous, lock-free circular queue" was a bit long. Maybe "complicated" is a better word.

The "towards" is a hint that we won't complete the queue in 90 minutes. But we can make progress, and along the way encounter (and hopefully solve) many of the typical problems found in lock-free programming, and delve into the pros and cons of various solutions to those problems.

Slides 

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.Follow @tvaneerd... Read More →


Thursday May 14, 2015 4:30pm - 6:00pm MDT
Flug Auditorium

4:30pm MDT

Big Projects, and CMake, and Git, Oh My!
This session serves as a quick introduction to Git and CMake as well as an in-depth explanation of how to configure and use them for large, multi-platform, C++ projects with many open source dependencies. The techniques described have been proven in practice with several C++ projects that include hundreds of libraries, applications, and dependencies.

The conventions described provide several capabilities that go beyond the typical setup. These include the use of the original repositories for third party dependencies, automatic submodule pointer updates, libraries built on an as-needed basis, and methods for contributing patches upstream.

Slides 

Speakers
avatar for David Sankel

David Sankel

Software Engineering TL, Bloomberg
David Sankel is a Software Engineering Manager/TL at Bloomberg and an active member of the C++ Standardization Committee. His experience spans microservice architectures, CAD/CAM, computer graphics, visual programming languages, web applications, computer vision, and cryptography... Read More →


Thursday May 14, 2015 4:30pm - 6:00pm MDT
Hudson

6:00pm MDT

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

Thursday May 14, 2015 6:00pm - 8:30pm MDT
Picnic Area
 
Friday, May 15
 

8:00am MDT

Library in a Week: C++ Application Configuration
Library in a week 2015 will attempt to build a C++ application configuration library.  The simplest of programs require options, but modern C++ applications often have tens if not hundreds of configuration options that users can specify.  These options can be specified in a myriad of ways - command line parameters, configuration files of various forms (xml, json, ini), environment settings, and other platform specific options. Each option setting needs string to c++ type conversion, default values, validation checked, error messages provided, and documented for users.  In addition, it's typical that options can be specified in multiple locations - command line and configuration files -- so options from multiple sources need to be prioritized and merged. 

What is seemingly a simple problem can suddenly spiral into a large amount of code - often poorly organized and only vaguely related to the application at hand.  And that code often provides one of the primary interfaces of the application to users. What we'd really like is a library that provides a succinct way for the programmer to define and organize options with a minimum amount of custom code. Ideally an all header library that supports modern C++ and modern configuration formats like JSON.

Of course for many years boost has had libraries to help. Program options being the primary library targeted at the domain.  
http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html

Another is property tree 
http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html

Unfortunately neither library covers all the ground by itself.  So maybe all we need is to modernize and mashup property tree and program options? Or modernize and add to one or the other. Or maybe there's something more needed -- that's what the workshop will explore.

The workshop will work like this.  On day 1 I will provide motivation and an overview of the library development. We will split into individuals and groups to attack various aspects of the library.  Some groups may look at existing libraries for inspiration providing presentations on the best aspects of the other libraries. From that point forward it will be up to the group to direct the remainder of the workshop.

Collaboration Tools: 

Library in a week 2015 will use a git repository for collaboration and sharing
of information.

git clone https://github.com/JeffGarland/liaw2015.git

Also the group will use an email list for discussions beyond face to face meetings.
 
Level: Beginner to Expert 

Attendees should have a basic background in C++.

Speakers

Friday May 15, 2015 8:00am - 9:00am MDT
Flug Auditorium

9:00am MDT

Debugging using an exact recording of a program's execution.
I'll be demonstrating and talking about Undo's Live Recorder. This is a library which allows Linux C++ applications to create 100% accurate recordings of their own execution in the field. Back at base, developers can load these recordings into the UndoDB reversible debugger, allowing them to use reversible debugging on their own machine to investigate failures at a customer site.

Having recordings of applications available and playable via a reversible debugger, allows new ways of working. For example one can compare two recordings using a binary search of their histories to see where they diverged, or have more than one developer work on an exact copy of the same bug at the same time. One can also use gdb's python extension system to programatically expore the history of the original application's execution. This allows things that were previously not considered possible, e.g. dataflow analysis is transformed if one can work backwards in time.

Speakers
avatar for Julian Smith

Julian Smith

Software Architect, Undo Software
Julian Smith is co-founder and Software Architect at Undo Software. He holds a physics degree from Oxford University and a Ph.D. in cognitive psychology from the University of Edinburgh. Along with co-founder and CEO Greg Law, Julian designed and developed Undo's patented record-and-rewind... Read More →


Friday May 15, 2015 9:00am - 10:30am MDT
Bethe

9:00am MDT

Details Matter
When writing a library for general consumption, even the smallest details start to matter, if you do not want to surprise a user with some unexpected behavior.

Alisdair Meredith will share some of the lesser known corners and details of the language that shed light on the standard library design and implementation. In particular, many implementation details risk exposure when writing generic code (templates) which happens to be most of the standard library.

Other topics include why it is important that a type thrown as an exception never throws from its copy constructor, the reference-counted string type hidden in the standard library, and why these two topics are more related than might first appear!

Slides 

Speakers
avatar for Alisdair Meredith

Alisdair Meredith

Senior Developer, BloombergLP
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... Read More →


Friday May 15, 2015 9:00am - 10:30am MDT
Hudson

9:00am MDT

The Rule of Seven (Plus or Minus Two): Modern C++ Boilerplate
C++98 had the Rule of Three (or was it Four?). C++11 has the Rule of Five — or Six, if you count the default constructor — or Seven, if you count swap(). Should swap() be a member function? When is a default constructor absolutely mandatory? When is noexcept required for good performance? Should our classes support self-assignment and self-move? When is =default different from empty braces? We'll present reasonable answers to these questions and more.

Slides 

Speakers
avatar for Arthur O'Dwyer

Arthur O'Dwyer

C++ Trainer
Arthur O'Dwyer is the author of "Mastering the C++17 STL" (Packt 2017) and of professional training courses such as "Intro to C++," "Classic STL: Algorithms, Containers, Iterators," and "The STL From Scratch." (Ask me about training your new hires!) Arthur is occasionally active on... Read More →


Friday May 15, 2015 9:00am - 10:30am MDT
Flug Auditorium

11:00am MDT

Parallelizing the Standard Template Library(STL)
Interest in parallelism has spiked in the recent years, partly due to the realization the age of the frequency scaling as the dominant computer architecture has passed. Emerging languages such as GO and Swift actively push parallel computing, a practice previously reserved to those in high-performance computing. C++ has made large strides to welcome parallel programming, but the Standard Template Library has long lacked the parallel paradigm and can greatly benefit from its implementation.

This talk will be focused around our experience at the STE||AR group implementing and measuring the execution time and scaling of the parallel STL algorithms inside HPX. The presentation will address the benefits and the restrictions that may be present in a parallel STL.

Slides ||| PPTX 

Speakers

Friday May 15, 2015 11:00am - 11:45am MDT
Hudson

11:00am MDT

C++ metaprogramming: a paradigm shift
Most people think metaprogramming is hard. It isn't; we just didn't have the right tools for it. This talk will present a new way of metaprogramming using the same syntax as that of normal C++. It will show how the runtime and the compile-time boundaries can be crossed almost seamlessly. It will show how compilation times can be reduced without sacrificing expressiveness. It will introduce a new toolbox[1] for metaprogramming using cutting edge features of the language.

A paradigm shift that will fundamentally change C++ metaprogramming is about to begin. Be there!

[1]: http://github.com/ldionne/hana

Speakers
avatar for Louis Dionne

Louis Dionne

C++ Standard Library Engineer, Apple
Louis is a math and computer science enthusiast who got swallowed by the C++ monster when he was a naive, unsuspecting student. He now works for Apple, where he is responsible for libc++, the Standard Library shipped with LLVM/Clang. He is a member of the C++ Standards Committee and... Read More →


Friday May 15, 2015 11:00am - 12:30pm MDT
Flug Auditorium

11:00am MDT

Fun with C11 generic selection expression
One must be really brave to talk about a C-only language feature on a C++ conference, especially when the feature is considered as a parody to some well established, very successful C++ ones. Of course, I'm not that brave. This lecture will firstly introduce C11 generic selection expression to people who are not familiar with it, then primarily focus on the possible uses of such a feature in C++, see how it helps C++ generic programming and meta programming (!!), and compare it to some future C++ language additions.

Slides 

Speakers
avatar for Zhihao Yuan

Zhihao Yuan

R&D Software Engineer, Broadcom Inc.
Zhihao Yuan is an R&D Software Engineer at Symantec, a division of Broadcom. He participated in standardizing designated initializers and improved narrowing conversions in C++20 but ends up almost exclusively programmed in Python last year and only recently picked up C++14 again... Read More →


Friday May 15, 2015 11:00am - 12:30pm MDT
Bethe

11:45am MDT

IIFE In C++ For Performance and Safety
IIFE (Immediately-Invoked Function Expression) is a common tool used in JavaScript. The idea is to both define an anonymous function and call it in the same expression. The point is to produce a local scope for variables so they do not pollute the global scope.

This same technique can be deployed in C++ to lead to cleaner, safer, more performant code when building up objects which require multiple steps to initialize.

Slides
 

Speakers
avatar for Jason Turner

Jason Turner

Owner, Jason Turner
Jason is host of the YouTube channel C++Weekly, co-host emeritus of the podcast CppCast, author of C++ Best Practices, and author of the first casual puzzle books designed to teach C++ fundamentals while having fun!


Friday May 15, 2015 11:45am - 12:15pm MDT
Hudson

12:45pm MDT

Boost Operations: Web Presense
This is an information/work session for Boost web presence.

If you would like to help with or find out more about the Boost web presence, please attend.

Note: Boost will cater this meeting for attendees that sign up in advance. Sign up before the end of the Friday morning break.

Moderators
avatar for Michael Caisse

Michael Caisse

Ciere Consulting
Michael Caisse has been crafting code in C++ for nearly 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... Read More →
avatar for Beman Dawes

Beman Dawes

Emeritus, C++ Standards Committee
Beman Dawes is a software developer from Virginia in the United States and the founder of boost.org. He is the author of the StreetQuick geographic atlas library used by digital map publishers to help people get really, really, lost. He wrote his first computer program 40 years ago... Read More →
avatar for Robert Ramey

Robert Ramey

Software Developer, RRSD
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 development. Lately, he has been mostly interested in C++ library design and implementation related to Boost... Read More →

Friday May 15, 2015 12:45pm - 2:15pm MDT
Bethe

2:30pm MDT

Better Code: Concurrency
Despite all of the recent interest, concurrency in standard C++ is still barely in its infancy. This talk uses the primitives supplied by C++14 to build a simple, reference, implementation of a task system. The goal is to learn to write software that doesn’t wait.

Link to Papers and Presentations by author

Experimental future
 

Speakers
avatar for Sean Parent

Sean Parent

Principal Scientist, Adobe
Sean Parent is a principal scientist and software architect for Adobe’s mobile 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... Read More →


Friday May 15, 2015 2:30pm - 4:00pm MDT
Flug Auditorium

2:30pm MDT

Using Spirit X3, Part I
Spirit is a DSEL (domain specific embedded language) parsing library that allows users to declaratively describe parsing grammars. X3 is the next generation of Spirit, redesigned from the ground up using modern C++14 language features. The result returns an elegant simplicity to the user experience that was lost with Spirit2.

In 2013 Joel described some of the inner workings and magic of X3, but now with the library release so near this session will concentrate on using Spirit X3. We will begin with a tutorial that steps participants through building grammars, selecting appropriate data structures, and utilizing a variety of useful patterns we employ every day at Ciere (such as capturing line numbers and context on failures). The session will conclude with a workshop in which participants will solve a parsing problem (with various levels of complexity) while Joel and Michael wander about and provide assistance.

X3 compiles faster, runs faster, and is easier to use. Come learn how to employ the next generation Spirit for all of your parsing needs.

Link to slides and other resources
 

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere Consulting
Michael Caisse has been crafting code in C++ for nearly 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... Read More →
avatar for Joel de Guzman

Joel de Guzman

Ciere Consulting
Joel de Guzman is the main author and architect of Boost.Spirit, Boost.Fusion and Boost.Phoenix. He is a highly experienced software architect and engineer with over 20 years of professional experience, with specialization and expertise in generic C++ cross-platform libraries and... Read More →


Friday May 15, 2015 2:30pm - 4:00pm MDT
Hudson

4:30pm MDT

C++17 coroutines for app and library developers
C++17 will bring most efficient, most scalable, most open/customizable coroutines of any programming language in existence. Stackless Resumable Functions are the proposed for standardization lightweight coroutines that scale to billions of concurrent coroutines, allow to consume existing any asynchronous OS APIs / libraries with zero-overhead adapters and allow library designers go wild, invent new coroutine types and plug them into Resumable Stackless Functions machinery.

We will look at examples of tasks, goroutines, generators running on top of resumable functions. We will explore implementation details of how they actually work and look at the customization machinery that allows library designers and ordinary users to extend coroutines as needed.

Slides 

Speakers
avatar for Gor Nishanov

Gor Nishanov

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.


Friday May 15, 2015 4:30pm - 6:00pm MDT
Flug Auditorium

4:30pm MDT

An Overview on Encryption in C++
Encryption has become a very important topic for C++ developers and this session will serve as an introduction and overview this topic. This overview will include basic concepts such as symmetric vs. asymmetric encryption. We'll also covers some known algorithms and their implementations in cryptopp, botan and libsodium.

Slides
 

Speakers
avatar for Jens Weller

Jens Weller

Meeting C++ / Community Organizer, Meetingcpp GmbH
Jens Weller has worked, since 2007, as a freelancer in C++, specialising in consulting, training and programming C++. He started with programming C++ back in 1998. He is an active member of the European C++ community and the founder of the Meeting C++ platform and conference. Jens... Read More →


Friday May 15, 2015 4:30pm - 6:00pm MDT
Bethe

4:30pm MDT

Using Spirit X3, Part II
Spirit is a DSEL (domain specific embedded language) parsing library that allows users to declaratively describe parsing grammars. X3 is the next generation of Spirit, redesigned from the ground up using modern C++14 language features. The result returns an elegant simplicity to the user experience that was lost with Spirit2.

In 2013 Joel described some of the inner workings and magic of X3, but now with the library release so near this session will concentrate on using Spirit X3. We will begin with a tutorial that steps participants through building grammars, selecting appropriate data structures, and utilizing a variety of useful patterns we employ every day at Ciere (such as capturing line numbers and context on failures). The session will conclude with a workshop in which participants will solve a parsing problem (with various levels of complexity) while Joel and Michael wander about and provide assistance.

X3 compiles faster, runs faster, and is easier to use. Come learn how to employ the next generation Spirit for all of your parsing needs.

Link to slides and resources 

Speakers
avatar for Michael Caisse

Michael Caisse

Ciere Consulting
Michael Caisse has been crafting code in C++ for nearly 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... Read More →
avatar for Joel de Guzman

Joel de Guzman

Ciere Consulting
Joel de Guzman is the main author and architect of Boost.Spirit, Boost.Fusion and Boost.Phoenix. He is a highly experienced software architect and engineer with over 20 years of professional experience, with specialization and expertise in generic C++ cross-platform libraries and... Read More →


Friday May 15, 2015 4:30pm - 6:00pm MDT
Hudson

6:30pm MDT

Dinner Break
Suggested Venue:

Little Annie’s or Little Ollie’s
 

Friday May 15, 2015 6:30pm - 8:30pm MDT
Flug Auditorium

8:30pm MDT

C++Now 2016 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, Jon Kalb, Consulting
Jon Kalb is using his decades of software engineering experience and knowledge about C++ to make other people better software engineers. He trains experienced software engineers to be better programmers. He presents at and helps run technical conferences and local user groups.He is... Read More →

Friday May 15, 2015 8:30pm - 10:00pm MDT
Flug Auditorium
 
Saturday, May 16
 

8:00am MDT

Library in a Week: C++ Application Configuration
Library in a week 2015 will attempt to build a C++ application configuration library.  The simplest of programs require options, but modern C++ applications often have tens if not hundreds of configuration options that users can specify.  These options can be specified in a myriad of ways - command line parameters, configuration files of various forms (xml, json, ini), environment settings, and other platform specific options. Each option setting needs string to c++ type conversion, default values, validation checked, error messages provided, and documented for users.  In addition, it's typical that options can be specified in multiple locations - command line and configuration files -- so options from multiple sources need to be prioritized and merged.

What is seemingly a simple problem can suddenly spiral into a large amount of code - often poorly organized and only vaguely related to the application at hand.  And that code often provides one of the primary interfaces of the application to users. What we'd really like is a library that provides a succinct way for the programmer to define and organize options with a minimum amount of custom code. Ideally an all header library that supports modern C++ and modern configuration formats like JSON.

Of course for many years boost has had libraries to help. Program options being the primary library targeted at the domain.  
http://www.boost.org/doc/libs/1_58_0/doc/html/program_options.html

Another is property tree
http://www.boost.org/doc/libs/1_58_0/doc/html/property_tree.html

Unfortunately neither library covers all the ground by itself.  So maybe all we need is to modernize and mashup property tree and program options? Or modernize and add to one or the other. Or maybe there's something more needed -- that's what the workshop will explore.

The workshop will work like this.  On day 1 I will provide motivation and an overview of the library development. We will split into individuals and groups to attack various aspects of the library.  Some groups may look at existing libraries for inspiration providing presentations on the best aspects of the other libraries. From that point forward it will be up to the group to direct the remainder of the workshop.

Collaboration Tools:

Library in a week 2015 will use a git repository for collaboration and sharing
of information.

git clone https://github.com/JeffGarland/liaw2015.git

Also the group will use an email list for discussions beyond face to face meetings.
 
Level: Beginner to Expert

Attendees should have a basic background in C++.

Speakers

Saturday May 16, 2015 8:00am - 9:00am MDT
Paepcke Auditorium

9:00am MDT

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


Saturday May 16, 2015 9:00am - 10:30am MDT
Paepcke Auditorium
 
Filter sessions
Apply filters to sessions.