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.
Library in a week 2015 will use a git repository for collaboration and sharing
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++.