Last week, I launched a quiz. The price was it to win one of the five vouchers for my book “C++20“.
The challenge to win one of the five coupons was to answer the following question: Which feature of the Big Four concepts, ranges, coroutines, and modules excites you most and why?.
Without further ado, here are the winners and their answers. First, I have seven instead of five winners because I could not decide which five answers are
- Gabriel Valenzuela
- Vikas Patney
- Fares Jalled
- Hossein Noorikhah
- Robert Frysch
- Idriss Chaouch
- Darko Zorić
I think that all new features are amazing, we can say C++ has evolved to become a better programming language adding features of Python and/or Haskell for example.
The concepts, like Mr. Rainer Grimm says: “[…] change the way we think and program templates.” open the door to the concept of pattern matching one of the most important features of Haskell, and changing the concept of metaprogramming.
The coroutines improve the way of calling functions, providing to users an elegant and efficient abstraction for writing asynchronous code.
The best way to describe ranges is for one important word: “composability”. This I think has a strong relationship with category theory.
The modules, for me the main feature, it’s the reduction of the size of the compiled code, importing only the parts needed in the project.
I try to resume the key ideas of the Big Four from my viewpoint, possible I lost another important idea, but the new standard I’m sure will revolutionize the C++ industry and generate new challenges, surely with a few problems like all new change, but with the help of the great community It’ll overcome quickly and easy.
I’m most excited about Concepts, as they represent, in my opinion, the most important C++20 feature of the “Big Four” – important for both library and application developers. I have two arguments for this:
- Exclusion principle Regarding Ranges, Coroutines, and Modules, one cannot (currently) be sure that they are more important than Concepts. Ranges are “only” a library feature, whereas the other three are core language features, which can only be used effectively across different compilers and platforms if they are included in the C++ standard itself. In addition, the implementation of the Ranges benefits massively from Concepts. Only the use of Concepts allows meaningful compiler error messages, which are particularly important when using Ranges. Therefore, Ranges can be seen as the first major success of Concepts and evidence of their power. Coroutines and Modules as core language features have the potential to become important game-changers. However, the present standardization offers rather a starting point or a rough framework – for Coroutines, supporting standardized library features are still missing and for modules, there is not yet a uniform procedure to structure files of your C++ projects in a compiler-agnostic way.
- Next level of metaprogramming I think the step from generic Templates to Concepts is comparable to the step from Macros to Templates in the ‘90s – we get another level of abstraction (of course with zero overhead, as it is expected for C++). Templates introduced type safety into the metaprogramming and the introspection by Concepts now introduces safety about type properties. In both cases, there are two big advantages: more expressive code and improved compiler errors.
Concepts, Coroutines and Modules make C++ “feature-complete” from the point of view of Bjarne Stroustrup’s book “The Design and Evolution”, and of the three, Concepts is probably the most mature C++ feature. I can’t wait to use Concepts in my next projects.
I really appreciate the 4 big features introduced by C++20. They came with new improvement especially modules which are a long-awaited feature of C++ that provides better performance in terms of compilation and maintenance. Better compilation: a module is imported only once, similar to precompiled headers supported by custom language implementation. This then reduces time compilation drastically.
How about maintenance? We can import modules in any order. There are no more concerns for macro redefinition. Also, the logical structure of code allows us to select which units should be exported and which should not.
The most exciting C++20 feature of the “Big Four” for me would be the ranges library. Algorithms in the standard library weren’t designed to be easily composed with each other. Instead, they are mostly focused on providing a way to enable the implementation of a more advanced version of an algorithm by applying one specific algorithm multiple times. Because these algorithms are for general purpose and designed to work with iterators, which define a range, they often require writing explicit and sometimes complex code to achieve simple tasks. The thing that bothers me the most is that STL algorithms take those iterators as separate arguments instead of taking the collection itself.
The ranges library fixes all the above problems. Using ranges, we can drastically simplify coding. It is so much comfortable to work with them because we can just call the algorithm on the whole containers – there is no need for begin and end iterators! They allow us to compose algorithms together as much as we want and the code doesn’t get messy and bulky. Unix pipe syntax improves the readability, enables us to have less code, thus fewer errors. The algorithms of the ranges library are evaluated lazily, which helps us to save time and memory. As someone who has just started to learn Haskell in college, I can see how this powerful feature, among others, can significantly improve functional programming concepts in this language.
Congratulations to all Winners. II send the winners the coupons for the book.
Thanks a lot to my Patreon Supporters: Matt Braun, Roman Postanciuc, Tobias Zindl, G Prvulovic, Reinhold Dröge, Abernitzke, Frank Grimm, Sakib, Broeserl, António Pina, Sergey Agafyin, Андрей Бурмистров, Jake, GS, Lawton Shoemake, Jozo Leko, John Breland, Venkat Nandam, Jose Francisco, Douglas Tinkham, Kuchlong Kuchlong, Robert Blanch, Truels Wissneth, Kris Kafka, Mario Luoni, Friedrich Huber, lennonli, Pramod Tikare Muralidhara, Peter Ware, Daniel Hufschläger, Alessandro Pezzato, Bob Perry, Satish Vangipuram, Andi Ireland, Richard Ohnemus, Michael Dunsky, Leo Goodstadt, John Wiederhirn, Yacob Cohen-Arazi, Florian Tischler, Robin Furness, Michael Young, Holger Detering, Bernd Mühlhaus, Matthieu Bolt, Stephen Kelley, Kyle Dean, Tusar Palauri, Dmitry Farberov, Juan Dent, George Liao, Daniel Ceperley, Jon T Hess, Stephen Totten, Wolfgang Fütterer, Matthias Grün, Phillip Diekmann, Ben Atakora, Ann Shatoff, Rob North, Bhavith C Achar, and Marco Parri Empoli.
Thanks, in particular, to Jon Hess, Lakshman, Christian Wittenhorst, Sherhy Pyton, Dendi Suhubdy, Sudhakar Belagurusamy, Richard Sargeant, Rusty Fleming, John Nebel, Mipko, Alicja Kaminska, Slavko Radman, and David Poole.
|My special thanks to Embarcadero|
|My special thanks to PVS-Studio|
|My special thanks to Tipi.build|
|My special thanks to Take Up Code|
I’m happy to give online seminars or face-to-face seminars worldwide. Please call me if you have any questions.
- Embedded Programmierung mit modernem C++ 12.12.2023 – 14.12.2023 (Präsenzschulung, Termingarantie)
Standard Seminars (English/German)
Here is a compilation of my standard seminars. These seminars are only meant to give you a first orientation.
- C++ – The Core Language
- C++ – The Standard Library
- C++ – Compact
- C++11 and C++14
- Concurrency with Modern C++
- Design Pattern and Architectural Pattern with C++
- Embedded Programming with Modern C++
- Generic Programming (Templates) with C++
- Clean Code with Modern C++
- Phone: +49 7472 917441
- Mobil:: +49 176 5506 5086
- Mail: schulung@ModernesCpp.de
- German Seminar Page: www.ModernesCpp.de
- Mentoring Page: www.ModernesCpp.org
Modernes C++ Mentoring,