The Italian C++ Conference is the biggest and most successful event series organized by the Italian C++ Community since 2013.
Here professionals, companies and students meet to share experience about C++ development and practices.
📺 The Italian C++ Conference 2021 is an online-only event, hosted on the Remo platform, consisting of live sessions and virtual networking.
Why you cannot miss it:
⭐ never seen before live keynote by Sean Parent (Sr. Principal Scientist, Adobe Photoshop) ⭐
🎙️ 12 live tech talks about C++ development and practices 🎙️
❓ live chat Q&A ❔
💬 all day long virtual networking 💡
🆓 free to attend
♥️ organized with passion by the Italian C++ Community 💙
We are all pioneering the age of virtual conferences. Will you join us?
Sean Parent is a senior principal scientist and software architect for Adobe’s mobile digital imaging group and Photoshop. 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 working on Chrome OS before returning to Adobe. From 1988 through 1993 Sean worked at Apple, where he was part of the system software team that developed the technologies allowing Apple’s successful transition to PowerPC.
Victor Ciura
Principal Engineer, CAPHYON
Topic: The Quest For A Better Crash
Victor Ciura is a Principal Engineer at CAPHYON, Technical Lead on the Advanced Installer team and a Microsoft MVP (Developer Technologies). He’s a regular guest at Computer Science Department of his Alma Mater, University of Craiova, where he gives student lectures & workshops on using C++ STL Algorithms. Since 2005, he has been designing and implementing several core components and libraries of Advanced Installer. Currently, he spends most of his time working with his team on improving and extending the repackaging and virtualization technologies in Advanced Installer IDE, helping clients migrate their traditional desktop apps to the modern Windows application format: MSIX. One of his “hobbies” is tidying-up and modernizing (C++20) the aging codebase of Advanced Installer and has been known to build tools that help this process: Clang Power Tools. More details: @ciura_victor & https://ciura.ro & linkedin.com/victor-ciura
Walter E Brown
Retired programmer and WG21 participant
Topic: Extrema: Correctly Calculating min and max
With broad experience in industry, academia, consulting, and research, Dr. Walter E. Brown has been a C++ programmer for 40 years. He joined the C++ standards effort in 2000, and has since written circa 170 proposal papers. Among numerous other contributions, he is responsible for introducing such now-standard C++ library features as cbegin/cend, common_type, gcd/lcm, void_t, and <cmath>’s mathematical special functions, as well as the headers <random> and <ratio>. He has also significantly impacted such C++ core language features as alias templates, contextual conversions, variable templates, static_assert, and operator<=> (the C++20 “spaceship operator”).
Paolo Severini
Senior Software Engineer at Microsoft
Topic: WebAssembly for non-beginners
I work at Microsoft in the team that deals with the V8 script engine in the new Microsoft Edge browser. I am a huge fan of WebAssembly and I have contributed WebAssembly-related code to V8, Emscripten and LLVM.
Sandor Dargo
Software Engineer at Amadeus
Topic: How to use correctly the const qualifier?
Sandor is a passionate software craftsman focusing on reducing the maintenance costs by developing, applying and enforcing clean code standards. His other core activity is knowledge sharing both oral and written, within and outside of his employer. When not reading or writing, he spends most of his free time with his two children and his wife baking at home or travelling to new places.
Roland Grinis
CTO at GrinisRIT, Researcher at MIPT-NPM
Topic: Bayesian Computation for Deep Learning in Modern C++
I studied Maths at Oxford, Cambridge and Imperial. Then I worked in the financial industry as a quantitative developer building models for interest rates exotic derivatives and optimization algorithms for initial margins. A couple of years ago, I launched GrinisRIT, a software company which develops simulation and data analytics software for the scientific community, as well as financial and entertainment industries. Currently, I am also a researcher in computational physics at the MIPT-NPM lab.
Yuri Minaev
C++ programmer at PVS-Studio
Topic: Inside a static analyser: type system
Yuri is working in the PVS-Studio company as one of developers of the C++ static analyzer. His primary responsibility is to keep low-level stuff in order and add new features to the core module. He joined the team in 2018 after about 12 years of IT experience. Apart from that, he periodically gives talks at various conferences - mainly on topics related to static analysis and C++.
Mattia Verasani
Machine Learning Engineer
Topic: Ai4Prod: the ecosystem to bring AI in production through C++
Mattia Verasani is a Machine Learning Engineer currently working at Tetra Pak and one of the founders of Machine Learning Modena.
Eric Tondelli
Freelance software engineer
Topic: Ai4Prod: the ecosystem to bring AI in production through C++
I have a master degree in mechatronical engineering. Since 2017 i have started developing Artificial intelligence solution for production line. In particular i have worked for different system integrator companies developing custom artificial intelligence application like defect detection, classification ,anomaly detection and autonomous grasping with cobot.
Marek Krajewski
Freelance Programmer
Topic: PMRs for performance in C++17/20
Marek is an independent freelance programmer specializing in Qt, C++, GUIs, system programming, and communication protocols. He has been programming in C++ since the mid 90s, and in his career, he has been involved with Unix and Windows system programming, client-server systems, UMTS network management, enterprise Java, RESTful APIs, satellite protocol decoding, neural networks, mage processing, DVB-T testing appliances and embedded Linux. He holds a Ph.D. in computer science and is also a technical book's author.
Kris van Rens
Software developer at ViNotion
Topic: A bird's-eye view of template C++
C++ is a multi-paradigm programming language. This means it lends itself to solve a specific problem in various forms or styles. One of those forms or styles is object-oriented programming, with which C++ is often identified. Another strong suit of C++ is the support for generic programming and template metaprogramming. In this session we are going to look at modern-day C++ templates, and how we can use them effectively. Template programming sometimes has the reputation of being hard to understand and adopt, which surely may be the case for highly advanced usage. However, we will see that templates can be used for a myriad of purposes, which often have a low barrier to entry. Command of templates will greatly improve your efficiency and productivity as a C++ programmer. The topics we are going to cover include: generic programming, metaprogramming, type traits, static/compile-time polymorphism, variadic templates, and much more. Not only will we look at the state of templates in C++17, we will also address what C++20 and the future has to offer. Join me in this session exploring the wonderful and interesting world of C++ templates, and improve or refresh your knowledge.
Marcos Rojas
Co-founder & C++ Technical Lead
Topic: Hook: The C++ library you were waiting for
20+ years of experience over Object-Oriented Analysis/Design and Implementation Methodologies. Specially focused on C/C++ (C++14/17) over cross-platform, distributed and/or real-time systems.
Clare Macrae
Director at Clare Macrae Consulting Ltd
Topic: Refactoring Superpowers: make your C++ IDE do your work, faster and more safely
Clare is an independent consultant, helping teams work sustainably and efficiently to test and refactor legacy and hard-to-test code. She has worked in software development for over 30 years, and in C++ and Qt for 20 years, and is now branching out to other languages. Since 2017, Clare has used her spare time to work remotely with Llewellyn Falco on ApprovalTests.cpp, to radically simplify testing of legacy code. She has enjoyed this so much that in 2019 she set up Clare Macrae Consulting Ltd, to focus even more on helping others work with legacy code. Before this, Clare was a Principal Scientific Software Engineer at Cambridge Crystallographic Data Centre. She is the original author of their popular C++ and Qt-based 3D crystal structure visualisation program Mercury.
Roi Barkan
VP Technologies at Istra Research
Topic: Argument Passing, Core Guidelines, and Aliasing
A professional software developer and architect since 2000, Roi's main focus throughout his career was on high performance and distributed systems, implementing complex and innovative algorithms. Roi has been the VP technologies of Istra Research since 2014, where he helps creating low latency financial systems. Prior to working for Istra Research, Roi spent 12 years in software development, architecture and management in the IT Security field. Roi received his B.A in Computer Science with high honors from the Technion in Israel, and his executive MBA from Tel Aviv University.
Marco Arena
Founder of the Italian C++ Community
Topic: Welcome and Closing Messages
Marco is the founder of the Italian C++ Community. He works at Tetra Pak as an AI Software Engineer. From 2011 to 2019, he served the Ferrari F1 Racing Team (Scuderia Ferrari) as a Software Engineer and C++ Specialist. Marco is very active in the tech communities environment: he founded the Italian C++ Community in 2013, Coding Gym in 2016, ML Modena in 2020, and he collaborates with ConoscereLinux. Since 2016, Marco has received the Microsoft MVP award for his commitment to divulgation.
We often take it for granted that calling one of the Standard algorithms will do something meaningful. For example, when invoking position = find(first, last, value) we expect that if an element equal to value is contained in the range [first, last) then position will point to the first such element, otherwise position will equal last. But how do we know find will perform this operation? This talk explores requirements, guarantees, and domains, and we'll discover that maybe find doesn't.
(click here to reduce)
We often take it for granted that calling one of the Standard algorithms will do something meaningful. For example, when invoking position = find(first, last, value) we expect that if ...
As WebAssembly (Wasm) is becoming more and more popular in the industry, there is a variety of introductory talks and blog posts. The purpose of this talk is to take the next step and quickly dive into more advanced details of this interesting technology. We’ll see how script engines turn WebAssembly into machine code, how Wasm is used in real-world applications, how debugging works and what the future holds for WebAssembly.
(click here to reduce)
As WebAssembly (Wasm) is becoming more and more popular in the industry, there is a variety of introductory talks and blog posts. The purpose of this talk is to take the next step and quickly dive ...
Crashed! Now What? Sometimes reproducing a crash on a developer's machine is next to impossible. Most of the time remote debugging is out of the question and all you’re left with are some scant log files and maybe a memory dump file, if you’re lucky. Wouldn’t you like to know the exact point of failure in the program and how it got there, on the client’s PC? How can you get your hands on a StackTrace of that crash on the client’s machine? And how can you make any sense of it without symbols? In this session, I’ll present a Windows specific technique we developed, that my team uses regularly to debug such scenarios in production. We leverage OS APIs like the Image Help Library (ImageHlp.dll), the Debug Help Library (DbgHelp.dll) to work with PE/COFF images and PDBs and reconstruct symbolicated StackTraces for Release crashes in production. The technique and APIs work all the way from Windows XP up to Windows 10, both for x86 and x64 executables. We’ll see how symbols are loaded and how PDBs work; we’ll discuss partial/incremental PDBs and we’ll have to get comfortable with Structured Exception Handling and Address Space Layout Randomization.
(click here to reduce)
Crashed! Now What? Sometimes reproducing a crash on a developer's machine is next to impossible. Most of the time remote debugging is out of the question and all you’re left with are some scant log...
(click here to read more)
10:00 - 12:00
Refactoring Superpowers: make your IDE do your work, faster and more safely Clare Macrae 📽 Video
You've got to make a change, and the tests are passing, but you're struggling to get the code to do what you need. You think you can see a way... Maybe the code won't compile for half an hour whilst you bend it to your will... And maybe your code reviewers won't complain about the size of the change, taking them hours to review? And if you're lucky and concentrate very hard, it will be OK. Won't it? As Kent Beck says, "Make the change easy (warning: this may be hard), then make the easy change." This talk will show you techniques to be kind to yourself - and your team - by making seemingly complex edits in small, safe steps, with your IDE doing much of the heavy lifting. You'll be less tired at the end, and confident that the behaviour is unchanged. And users get the feature sooner - win, win!
(click here to reduce)
You've got to make a change, and the tests are passing, but you're struggling to get the code to do what you need. You think you can see a way... Maybe the code won't compile for half an hour whils...
C++ is a wonderful language to use. It becomes even more wonderful if you're looking at it from the other side of the fence. Parsing and compiling C++ code is far from trivial. We'll take a look at possible representations of types inside a program which does just that. For that, we'll look at the PVS-Studio C++ analyser's internal mechanisms that deal with types. The current implementation is somewhat questionable, so, it is being redone. I'll give you an idea of how it currently works and how it will be working. We'll also take a look at some implementation details of the new type system.
(click here to reduce)
C++ is a wonderful language to use. It becomes even more wonderful if you're looking at it from the other side of the fence. Parsing and compiling C++ code is far from trivial. We'll take a look at...
Ai4Prod is an end-to-end tested pipeline that enables you to train Machine Learning models in python and directly deploy them in a production environment with minimum effort, through our inference platform built in C++. The software stack relies on libraries such as OpenCV, LibTorch and ONNX Runtime and it supports both Linux and Windows. In this session you will learn about Ai4Prod, and see some practical examples on how to exploit it for different use cases.
(click here to reduce)
Ai4Prod is an end-to-end tested pipeline that enables you to train Machine Learning models in python and directly deploy them in a production environment with minimum effort, through our inference ...
C++ is a multi-paradigm programming language. This means it lends itself to solve a specific problem in various forms or styles. One of those forms or styles is object-oriented programming, with which C++ is often identified. Another strong suit of C++ is the support for generic programming and template metaprogramming. In this session we are going to look at modern-day C++ templates, and how we can use them effectively. Template programming sometimes has the reputation of being hard to understand and adopt, which surely may be the case for highly advanced usage. However, we will see that templates can be used for a myriad of purposes, which often have a low barrier to entry. Command of templates will greatly improve your efficiency and productivity as a C++ programmer. The topics we are going to cover include: generic programming, metaprogramming, type traits, static/compile-time polymorphism, variadic templates, and much more. Not only will we look at the state of templates in C++17, we will also address what C++20 and the future has to offer. Join me in this session exploring the wonderful and interesting world of C++ templates, and improve or refresh your knowledge.
(click here to reduce)
C++ is a multi-paradigm programming language. This means it lends itself to solve a specific problem in various forms or styles. One of those forms or styles is object-oriented programming, with wh...
We all use const in our code. But why? Do we use it enough or too much? Do we use it well? This presentation will provide the answers to those questions! We'll discuss why we need to bring constness to our code and why we need more of it. We'll go into detail to see all the different contexts where const can appear, where it helps, where it's ignored and where it's even harmful!
(click here to reduce)
We all use const in our code. But why? Do we use it enough or too much? Do we use it well? This presentation will provide the answers to those questions! We'll discuss why we need to bring constnes...
In this talk we will discuss polymorphic memory resources. We start with a little of history of allocators in STL, their shortcommings and evolution. Next, we will have a look at the PMR design origins at Bloomberg, then discuss some basic PMR usage and than follow up with advanced patterns like "Winking Out" and "Local Garbage Collection". Later we will have a brief look at the practical applications of PMRs and the possible performance improvements. Finaly we will discuss changes introduced to PMR in C++20.
(click here to reduce)
In this talk we will discuss polymorphic memory resources. We start with a little of history of allocators in STL, their shortcommings and evolution. Next, we will have a look at the PMR design ori...
C++20 concepts give us a brand new way to specify how our generic libraries and algorithms should be used and allow library users to better understand what is expected of them. However, concepts didn't rise from chaos, and before their adoption C++ library authors had other mechanisms to meet that goal. In this talk I'll briefly discuss concepts, and focus on their pros and cons compared to more mature mechanisms. Special attention will be given to the 'semantic' vs. 'syntactic' nature of concepts, and I'll try to give motivating examples of semantic-only concepts. I'll explore best practices, and show potential pitfalls in various approaches to the challenge of defining interactions between generic code authors and users.
(click here to reduce)
C++20 concepts give us a brand new way to specify how our generic libraries and algorithms should be used and allow library users to better understand what is expected of them. However, concepts di...
There are some really good C++ libraries out there, that is a fact. They provide for a comprehensive set of functionalities that C++ developers would definitely use on their software in order to shorten development times. So, we are not trying to reinvent the wheel. We decided to create hook, mainly, for one reason: Provide for a set of non-existent high-performance (and low consumption of system resources) modules that can be used in a modern (high-level idiomatic) way and can be directly used in different architectures (cross-platform design) without requiring for any additional binary files (header-only approach). What do we mean by modern? Well, imagine yourself using any other language (e.g.: javascript, golang, rust, …). It is a fact that these languages provide for a full set of built-in capabilities that make developer's life easier (e.g.: setting up an http server). C++ is a beast, there is no doubt about it, the only thing we need (as a C++ developer) is a way to simplify complex development by using the appropriate set of tools. This set of tools is what we provide with hook.
(click here to reduce)
There are some really good C++ libraries out there, that is a fact. They provide for a comprehensive set of functionalities that C++ developers would definitely use on their software in order to sh...
In this talk I will introduce NOA - a C++17 library built on top of LibTorch. With this library, we aim to make it easier to integrate Bayesian computation algorithms with Deep Learning applications, larger simulation frameworks, as well as performance demanding systems such as the ones encountered in streaming analytics, games, high frequency trading and many other applications.
(click here to reduce)
In this talk I will introduce NOA - a C++17 library built on top of LibTorch. With this library, we aim to make it easier to integrate Bayesian computation algorithms with Deep Learning application...
The C++ standard library long ago selected operator< as its ordering primitive. This brief talk will explain why this operator must be used with care, in even such seemingly simple algorithms as max and min. We also discuss the use of operator< in other order-related algorithms, showing how easy it is to make mistakes when directly using the primitive.
(click here to reduce)
The C++ standard library long ago selected operator< as its ordering primitive. This brief talk will explain why this operator must be used with care, in even such seemingly simple al...