community

CppCon 2018: OOP Is Dead, Long Live Data-oriented Design--Stoyan Nikolov

We’re in the final countdown to this year’s CppCon, which starts on September 16. To whet your appetite for this year’s conference, here’s another of the top-rated talks from last year. Enjoy – and register today for CppCon 2019!

OOP Is Dead, Long Live Data-oriented Design

by Stoyan Nikolov

Summary of the talk:

For decades C++ developers have built software around OOP concepts that ultimately failed us - we didn’t see the promises of code reuse, maintenance or simplicity fulfilled, and performance suffers significantly. Data-oriented design can be a better paradigm in fields where C++ is most important - game development, high-performance computing, and real-time systems.

The talk will briefly introduce data-oriented design and focus on practical real-world examples of applying DoD where previously OOP constructs were widely employed.

Examples will be shown from modern web browsers. They are overwhelmingly written in C++ with OOP - that’s why most of them are slow memory hogs. In the talk I’ll draw parallels between the design of systems in Chrome and their counterparts in the HTML renderer Hummingbird. As we’ll see, Hummingbird is multiple times faster because it ditches OOP for good in all performance-critical areas.

We will see how real-world C++ OOP systems can be re-designed in a C++ data-oriented way for better performance, scalability, maintainability and testability.

Overload 152 is now available

ACCU’s Overload journal of August 2019 is out. It contains the following C++ related articles.

Overload 152 is now available

From the journal:

Reactive or Proactive.
Reactive systems are all the rage. Frances Buontempo compares them with a proactive approach.

A Low-Latency Logging Framework.
Logging can be a bottleneck in systems. Wesley Maness and Richard Reich demonstrate a low-latency logging framework that avoids common problems.

Empty Scoped Enums as Strong Aliases for Integral Types.
Scoped enums have many advantages. Lukas Böger demonstrates their use as strong types of numbers.

C++ Reflection for Python Binding.
There are various approaches to generating Python bindings in C++. Russell Standish shows how Classdesc can be used to achieve this.

Trip Report: Italian C++ 2019.
Milan held Italy’s largest C++ conference. Hans Vredeveld reports back.

Afterwood.
Many people are risk-averse. Chris Oldwood considers this position – in verse.

Combining Ranges and Smart Output Iterators--Jonathan Boccara

And the next one.

Combining Ranges and Smart Output Iterators

by Jonathan Boccara

From the article:

In our current stage of development of smart output iterators, we have:

  • some iterators, such as filter, transform, unzip or demux,
  • the possibility to combine them: filter(pred) >>= transform(f) >>= unzip(back_inserter(output1), back_inserter(output2))
  • their usage as the output iterator of an STL algorithm:
std::copy(begin(inputs), end(inputs), transform(f) >>= back_inserter(outputs));

What we’re going to work on today is removing the call to std::copy to have a pipeline made of output iterators only. And once we get such a pipeline, we will plug it to ranges, in order to benefit from the expressiveness of both ranges and smart output iterators, in the same expression...