There's nothing more different than two lambda expressions. Not even [](){}
is the same as [](){}
, at least not from the compiler's point of view. By the rules of the C++ language, each lambda results in a unique type. This leads to problems, and not of the trivial kind. Making a couple of lambdas of the same type but with different capture values? Nope. Writing a function that takes lambdas with identical signatures as an argument? Not easy. Storing merely two lambdas in a vector? Impossible. And doing any of this while maintaining readability and efficiency? Better give it up already.
But...
This talk will discuss how socket concepts like select or poll can be used when composing all kinds of concurrent operations in C++.
The C++ type system is both very weak and very strong. In this presentation I will show you how using the strengths of the type system makes your code better. I will show you how types...
In control software for industrial systems, many signals need to be monitored to ensure they satisfy certain conditions. When these signals number in the hundreds, ad-hoc solutions do not scale. Object-oriented solutions based on inheritance also tend to fall short. How do we create a framework that is intuitive and yet extensible to support the various monitoring tasks needed for different signals?
In the talk, I will show an example of a signal monitoring framework using a declarative API. Using a builder-pattern, monitoring can be set up using an almost natural language syntax, making it easy to read what is being monitored.
The...
With test-driven development, you first write a test and only then begin with the implementation.
Studies show that this approach reduces both the development time and the error rate.
Modern C++ has many language features and that can be leveraged to design an expressive API or a domain-specific language. However, these features are limited by the syntax rules of C++. To overcome this limitation, we will discuss the use of compile-time parsers to write more expressive code with zero overhead.
Over the years the tools we use to develop have improved significantly. It used to be the compiler that could barely tell us we were missing a semicolon, now it will tell us the exact location. The results from compilers have improved but are we doing all we can with them? Do you always understand what they are saying?
When dealing with versioned exchanged API messages, it is often useful to upgrade/downgrade the version to answer the requests, e.g. the client is communicating with version 1.1 and the server is using version 1.2.1 internally.
This talk presents an elegant solution in Modern C++ for this use case
We all are being constantly warned that multithreading is HARD and that we need more high-level concepts for structured concurrency. Nonetheless most of us is still using basic tools of the trade - threads and locks, which are notoriously hard to be used correctly.
In this session, we will explore the crucial aspects of multithreaded performance optimization - false sharing and hardware destructive interference. False sharing can significantly impact performance by causing unnecessary cache invalidations, while hardware destructive interference provides a solution by guiding optimal data structure alignment for improved cache efficiency. Join us to understand the causes and consequences of false sharing and delve into the concept of hardware destructive interference. Through real-world examples and performance benchmarks, you will learn practical strategies to mitigate false sharing and leverage hardware destructive interference to unlock maximum performance in your multithreaded applications.
Key Takeaways:
- Identify and mitigate false sharing issues that degrade multithreaded performance
- Understand the concept of hardware destructive interference and its impact on cache efficiency
- Learn techniques to align data structures based on hardware destructive interference for optimal performance in multithreaded applications
- Gain insights from real-world examples and performance benchmarks to apply the concepts effectively
This session is essential for software developers, system architects, and researchers seeking to maximize the performance of their multithreaded applications and overcome cache-related performance bottlenecks.
We all say we should write tests, or at least we should write more of them.
The rapid emergence of Artificial Intelligence (AI) assistants has been powered by advancements in large language models (LLMs). They have shocked many with their uncanny ability to “act human.” These tools are no longer sci-fi plot devices only found in books, television, movies, and video games. They are here, now, in the products you are likely to be using, both in your personal life and in your role as a software developer.
An overview of several new techniques, most of which are old ideas but with unique spins on them.
In this lecture I will show you how to use C++'s standard library to build a simple in-memory generic database with indices. The design of code is intended to be easy and extensible using C++ meta-programming and templates.
Video games are hard and as I age my reaction time has gone down. But I'm also a programmer and I can write tools that solve this for me.