Overload 122 is available

overload-122.PNGOverload 122 is now available. It contains the following C++-related articles, and more:

 

Overload 122

Musings on Python -- By a C++ Developer

Python and C++ are very different languages. Sergey Ignatchenko walks through things in Python that can confuse a C++ programmer

Activatable Object

Using locks will slow down threaded code. Len Holgate demonstrates how an Activatable Object can reduce the time spent blocked.

CppCon Program Highlights, 11 of N: C++11/14 Design

The CppCon 2014 conference program has been posted for the upcoming September conference. We've received requests that the program continue to be posted in "bite-sized" posts, a few sessions at a time, to make the 100+ sessions easier to absorb, so here is another set of talks. This series of posts will conclude once the entire conference program has been posted in this way.

 

Now that we have Modern C++ in the form of C++11 and C++14, how does this change the guidance for authoring types and techniques for using them in popular patterns? In this set of talks, world-class speakers and trainers address these issues.

In this post:

  • The Canonical Class
  • The Implementation of Value Types
  • Accept No Visitors

 

The Canonical Class

It was a simpler time. A period in which every college student and learn-C++-in-a-weekend duffer could write a class with the assuredness that it would behave as desired when assigned and copied. There was a check list. Complete the checklist, add some domain specific behaviour, bake in the regression oven, and you were done.

Enter C++11 with its fancy new use of the delete keyword, additional applications of explicit, rvalue references, and some perfect forwarding. How are you to write a "simple" class? Should you include a swap? What does movable mean and are there expected semantics? When is the noexcept specifier used?

During this session we will explore the boilerplate of a C++11 class. The session will touch on rvalue references, move semantics, perfect forwarding, explicit, noexcept, initializer lists, and more as it applies to producing the desired semantics for our classes and structs.

Speaker: Michael Caisse, Ciere Consulting. Michael Caisse has been crafting code in C++ for nearly 25-years. He is the owner of Ciere Consulting which provides software consulting and contracting services, C++ training, and Project Recovery for failing multidisciplinary engineering projects. :: ciere.com

 

The Implementation of Value Types

Predefined value types are central to C++ efficiency and robustness. More importantly, C++ provides mechanisms that enable programmers to create high-quality value types, programmers are not limited to the small predefined value types. However, implementing a high-quality type requires attention to several problems, among them portability, representation, efficient copying, efficient parameters, aliasing, constant initialization, and constant expressions. We present the issues and several approaches to implementing high-quality value types.

Speaker: Lawrence Crowl. Dr. Lawrence Crowl has expertise in programming languages, compilers, and parallel programming. He has been mixing threads with C++ for twenty-five years and is a major contributor to C++11. His goal is to achieve both high quality and high performance programs.

 

Accept No Visitors

Visitor Design Pattern was an attempt to overcome a limitation of object-oriented languages -- inability to retroactively introduce new polymorphic functions. While it was quite efficient in providing extensibility of functions, it was never truly retroactive, easy to teach, use or maintain, and it achieved this at the cost of hindering extensibility of classes, introduction of control inversion and requiring tons of boilerplate code to be written. Visitor Design Pattern is a workaround, not a solution to the problem and in this talk I would like to discuss a more elegant yet as efficient solution in the form of a Match statement. We will look at several use-cases for the Visitor Design Pattern, their encoding using both approaches and ultimately their advantages and disadvantages.

Speaker: Yuriy Solodkyy. Yuriy Solodkyy received his PhD from Texas A&M University, while working under the supervision of Dr. Bjarne Stroustrup on the ways to simplify the analysis of C++ programs. He is currently trying to materialize some of those ideas while working in the Visual C++ team at Microsoft. His research interests include C++, generic programming, and abstract interpretation. More information about Yuriy can be found at his university page at https://parasol.tamu.edu/~yuriys/. Website: https://parasol.tamu.edu/~yuriys/

HTTP and HTTPS in Qt

How to handle HTTP and HTTPs requests in Qt

HTTP and HTTPs in Qt

by Jens Weller

From the article:

Last week I started to work on an old project again: My own feed reader. I found the code 2 weeks a go on an old USB Stick, and decided to refactor it into a useful state. This involved dealing with HTTP via QNetworkAccessManager.

Boost 1.56.0 is released

Some welcome news from Boost.org...

Boost 1.56.0 has been released

These open-source libraries work well with the C++ Standard Library, and are usable across a broad spectrum of applications.
The Boost license encourages both commercial and non-commercial use.

This release contains one new library and numerous enhancements and bug fixes for existing libraries.

This is the first release since November of last year, and the last one since Boost migrated from a monolithic Subversion repository to modularized git repositories on github.com. The end users should see no change though, since the archives have the same layout as previous releases.

Read the full announcement for all the details, and for download links.

CppCon 2014 Open Content -- Boris Kolpackov

cppcon-032.PNGToday CppCon announced information about the evening sessions -- and, if you read closely, about early-daytime sessions.

This next bit is important: All CppCon Mon-Thu 8:30-10:00pm evening sessions and all Tue-Fri 8:00-8:45am sessions are free and open to everyone -- free to attend, and to propose and even lead a session whether or not you're registered for the daytime CppCon program. If you are reading this then you're interested in C++, so if you also live locally in the Seattle area then go fire up your calendar now block off all these evenings (and early mornings!) and come on by before and after work and join in the fun! You will learn a lot and enjoy a lot. And if you're attending CppCon but only there for a one- or two-day registration, that means you're still in town and should still plan to attend all these free events for every evening (and early morning) you're there -- if you don't, you're missing a great opportunity and a great part of your visit to CppCon.

From author and committee panels to lightning talks and hackathons and more, you won't want to miss the CppCon night life. This conference does not end at 5:30. Plan to be there again at 8:30pm every night Mon-Thu, and at 8:00am Tue-Fri. It's free as in air.

Here's the link:

CppCon 2014 Open Content

by Boris Kolpackov

And the announcement:

Each evening the conference activities will break for dinner from 5:45 to 8:30, giving you time to head out and enjoy a meal with fellow attendees. But after eating, don’t head back for a boring night in your hotel room -- come back to the venue for another 90 minutes of learning and networking!

Monday through Thursday from 8:30 pm to 10 pm is the evening program. Looser and less structured than the daytime program, it’s designed to get you engaged and give you opportunities that traditional sessions can’t offer. In our six rooms, one will hold a single “conference planned” session that spans the full 90 minutes, and the other five will hold open content, two 45-minute sessions per room. There will also be open content in all 6 rooms from 8:00am to 8:45 Tuesday through Friday.

The “conference planned” sessions are Meet the Authors Monday, Lightning Talks Tuesday, Grill the Committee Wednesday and Conference Planning Thursday. More details on each of these will be coming shortly.

Open content is just that, open! Attendees and speakers alike can propose sessions on anything that interests them. These might be a single facilitator leading a room through an exercise, activity or demo, a panel of 3-5 people taking questions from the room and answering them, a “hackathon” on a specific project, or an open conversation among the whole room. The projector is available (possibly to take collaborative notes, possibly to display content related to the exercise; typical slide presentations are not the best fit for open content sessions.)

Many of these “Birds of a Feather” talks will be proposed on site as the conference progresses. A speaker who gets a lot of post-talk questions may agree to host a Q&A session in the open content time. An attendee inspired by a session may host a session to explore a topic further or start on a group implementation of something. Some can be proposed in advance and with 64 slots to fill, our job will be easier if many of them are. To propose a session, simply email open-content@cppcon.org and tell us who you are and what you want a session about. If you have time constraints such as “after a specific session” or “not on the same day as a specific session” let us know in the email. (For example, someone who will be grilled at Grill The Committee Wednesday can’t do an open session Wednesday evening.)

These sessions will be open in another way too -- evening content does not require conference registration. That’s right, everyone who is in the area is welcome to come and join us for all the evening sessions, including to propose or lead a session. This is part of our goal to be an inclusive conference for the entire C++ community.

Attendees will be able to express their interest in these sessions in advance, enabling us to schedule them and to select the most popular if we have more submissions than slots. More details on that will follow soon. For now, please email your submissions as soon as you can so that our planning work can get underway. See you in Bellevue!

C++ User Group Meetings in August

Again, the overview about the upcoming user group meetings for the new month. As it is August, there are not as much meetings due to summer.

C++ User Group Meetings in August 2014

by Jens Weller

From the article:

6.8. C++ UG Austin - Pragmatic Type Erasure
13.8 C++ UG Bay area/San Francisco
14.8 C++ UG Dresden - Compile Time Sort"
14.8 C++ UG NRW/Aachen - Various talks
19.8 C++ UG Berlin - Experience with C++11 in ArangoDB
20.8 C++ UG NRW/Düsseldorf - Wartungtechniken
28.8 C++ UG Amsterdam - Event Driven Design in C++11

CppCon Program Highlights, 10 of N: Migrating Code to Modern C++

The CppCon 2014 conference program has been posted for the upcoming September conference. We've received requests that the program continue to be posted in "bite-sized" posts, a few sessions at a time, to make the 100+ sessions easier to absorb, so here is another set of talks. This series of posts will conclude once the entire conference program has been posted in this way.

 

There is lots -- lots -- of existing C++ code. How can you effectively bring existing C++ code forward to C++11/14? How can you upgrade your coding styles and conventions? The following CppCon 2014 talks tackle these issues and more.

In this post:

  • Adventures in Updating a Legacy Codebase
  • Elevate Your Code to Modern C++11 with Automated Tooling
  • An Overview of C++11/14

 

Adventures in Updating a Legacy Codebase

Still maintaining a legacy application? Do you have strdup()'s crying to be replaced with std::string? Do pre-standard headers such as iostream.h litter your code? Do boost libraries no longer compile with your favorite C++98 compiler? From GUIs to kernel drivers, this talk will look at some of the adventures taken while updating a codebase with more than 20 years of history to C++11.

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

 

Elevate Your Code to Modern C++11 with Automated Tooling

This talk will motivate and demonstrate how to transform your existing C++ code into more modern style and better quality. A key to that is refactoring the code into better shape. While manual refactoring can be tedious and error prone the author demonstrates automated refactoring that was created by his students and assistants and himself over the last nine years on the basis of Eclipse CDT. The tooling works with all compilers, because it is independent of one.

For example, we will show how to eliminate unnecessary macros or replace them by type-safe C++11/14 alternative code automatically. Or, to replace pointers, plain arrays and manual memory management by references, smart pointers, std::string, std::array, or std::vector automatically. Also other transformations, such as introducing a template parameter to reduce a coupling to a single concrete type are demonstrated. All with the goal to modernize and hopefully simplify your C++ code. Even if you are not deeply interested in modernizing your code base, some helpful tooling, such as toggling function definitions into a single place, to change their signature, can be of great help. On the other hand, many of the proposed improvements can also be applied with your favorite code editor only more tediously.

Speaker: Peter Sommerlad, Professor, Director IFS, FHO HSR Rapperswil -- IFS Institute for Software. Prof. Peter Sommerlad is head of IFS Institute for Software at FHO HSR Rapperswil. Peter is co-author of the books POSA Vol.1 and Security Patterns. His goal is to make software simpler by Decremental Development: Refactoring software down to 10% its size with better architecture, testability and quality and functionality. Peter is a member of the C++ standardization committee, ACCU, ACM, SI and president of SWEN.Website: http://wiki.hsr.ch/PeterSommerladTwitter handle: @PeterSommerlad

 

An Overview of C++11/14

This accelerated introduction to C++11/C++14 surveys most of the key additions to the C++ language, including support for 1) increased code clarity (lambdas, uniform initialization, auto, new OOD control), 2) improved performance (rvalue references and move constructors), 3) multithreading (concurrency and atomic types).

The presentation is designed for those who truly need a quick overview of the new C++, so the focus is on breadth rather than depth. Whenever feasible, new language features are presented in a style showcasing how they improve over their "Old C++" counterparts.

Speaker: Leor Zolman, BD Software. Leor Zolman has been involved in system software/compiler development, system administration, application development, and education for 40 years, spanning the CP/M, UNIX, and Windows operating systems. Leor is the author of The BD Software C Compiler (“BDS C”, 1979), the first native-code C compiler targeted exclusively for personal computers. In the early 90’s, Leor was a member of the technical staff of R&D Publications, where he wrote columns for R&D’s magazines: The C/C++ Users Journal, Windows Developer’s Journal, and SysAdmin, and he also authored the first book ever published by R&D Books: Illustrated C. More recently, in addition to designing and delivering on-site training courses on C, C++, Java, Perl, and Unix, Leor wrote STLFilt: An STL Error Message Decryptor for C++, a Freeware tool for simplification of complex (i.e., unreadable) template-related C++ error diagnostics. When not engaged in learning or teaching C++, you may find Leor administering and participating in several financial discussions boards, riding his BMW R1200RT, playing tennis or showing people the Ring Nebula through his LX200GPS telescope at star parties around the North Shore Boston area.

AST matchers and Clang refactoring tools -- Eli Bendersky

You can do some great things when you have a reusable open-source C++ parser:

AST matchers and Clang refactoring tools

by Eli Bendersky

From the article:

Clang tooling sees lots of interest and development focus in the past few years. At last, we have a convenient, accurate, open-source and well supported framework for programmatically analyzing and refactoring C++ code; I find this very exciting.

A great outcome of this rapid pace of development is that new APIs and tools spring up all the time. For example, some time ago the Clang tooling developers figured out folks doing AST traversals have to write a lot of repetitive code to find interesting AST nodes, so they came up with a great new API called AST matchers, which I want to discuss here...

N4126: Explicitly defaulted comparison operators -- Oleg Smolsky

A new WG21 paper is available. If you are not a committee member, please use the comments section below or the std-proposals forum for public discussion.

Document number: N4126

Date: 2014-07-29

Explicitly defaulted comparison operators

by Oleg Smolsky

Excerpt:

N3950 was presented to the Evolution WG at the Rapperswil meeting and the response was very positive. A later revision, N4114 was amended to handle the following points requested at the meeting:

  • Support for non-member operators
  • Mutable members: there was consensus on their treatment. The compromise is to to make explicitly defaulted operators ill-formed when mutable members are present. See "Mutable members".
  • Short-hand notation was proposed and had very positive feedback. See "The proposed syntax: short form".

This proposal makes the following changes after the technical review on the c++std-ext list:

  • Pointer, floating point and enumerated type members are included. See "Domain of the operator functions" for the discussion.
  • Each explicitly defaulted operator is independent and is bridged to the respective members' operators
  • Lexicographical comparison is defined explicitly

Quick Q: Why doesn't std::sort accept its comparator by reference? -- StackOverflow

Quick A: By design, because function objects are expected to be nonstateful values.

Recently on SO:

Why doesn't std::sort accept comparator by reference?

The standard on std::reference_wrapper explains that std::sort now accepts std::reference_wrapper, allowing one to pass a comparator by reference.

Is there a reason std::sort didn't accept the comparator by reference in the first place?