From C++ Templates to C++ Concepts - Metaprogramming: an Amazing Journey - Alex Dathskovsky

  Рет қаралды 30,533

CppCon

CppCon

Күн бұрын

cppcon.org/
---
From C++ Templates to C++ Concepts - The Amazing Journey of Metaprogramming - Alex Dathskovsky - CppCon 2022
github.com/CppCon/CppCon2022
Metaprogramming is been with us since C++98 but as the language evolves we have more tools and the code get simpler and clearer. In this talk we will cover the history of Templates and how the usage and readability became clearer and simpler with each standard. We will develop a concept with c++11-c++17 for checking if a type is container and then we will discover how c++20 concepts make the whole thing much easier.
In this talk we will cover the grounds of Template meta programming with quick walkthrough of how templates work and how template metaprogramming has evolved with every C++ standard. The talk will have present the evolution and benefits with many code examples. The larges example will be the development of a concept for Containers and how it is simplified with Concepts.
---
Alex Dathskovsky
Alex has over 16 years of software development experience, working on systems, low-level generic tools and high-level applications. Alex has worked as an integration/software developer at Elbit, senior software developer at Rafael, technical leader at Axxana, Software manager at Abbott Israel and now a group manager a technical manager at Speedata.io an Exciting startup the will change Big Data and analytics as we know it .On His current Job Alex is developing a new CPU/APU system working with C++20, Massive metaprogramming and development of LLVM to create the next Big thing for Big Data.
Alex is a C++ expert with a strong experience in template meta-programming. Alex also teaches a course about the new features of modern C++, trying to motivate companies to move to the latest standards.
__
Videos Filmed & Edited by Bash Films: www.BashFilms.com
KZbin Channel Managed by Digital Medium Ltd events.digital-medium.co.uk
#cppcon #cpp #cppprogramming

Пікірлер: 45
@williammou8672
@williammou8672 Жыл бұрын
Some abstracts: Metaprogramming aims to accomplish a little more in Compile time. One of the solutions for C++ is template and its friends (because template is Turing-complete).. The speaker starts with the problem of function template overloading and function template specialization. How to help the compiler determine and choose the suitable template by type becomes the concern of metaprogramming. Taking is_container at compile time as an example, he goes from trait, enable-If_t (C++11) + SFINAE + void_t to concepts (C++20) to solve this problem in different ways. The final conclusion is that concepts and its library are great, and we recommend you use this to check the template type.
@malborboss
@malborboss 3 ай бұрын
Concepts are really amazing. I tried to watch some talks with how metaprogramming worked before concepts and I had to pause a video every 30 seconds. With concepts I didn't even have to pause once. Amazing talk. Thank you so much and to the ones that made concepts possible.
@cristianinujazznight3044
@cristianinujazznight3044 Жыл бұрын
Thank you so much, I never used templates/concepts and now looks awesome to check :D
Жыл бұрын
He is so happy about these new features! I love it :)
@GoncaloLoyal
@GoncaloLoyal Жыл бұрын
Great presentation! Loved it!
@marcobonizzi3628
@marcobonizzi3628 Жыл бұрын
Nice presentation, thanks Alex!
@sergeysosnin7594
@sergeysosnin7594 8 ай бұрын
Thanks for the video, it’s very interesting and easy to follow
@nrwchd
@nrwchd Жыл бұрын
So you were saying that my very wide monitor is now no longer needed when debugging c++ compiler messages?
@weezytweezy9209
@weezytweezy9209 Жыл бұрын
Awesome talk
@mark1980100
@mark1980100 5 ай бұрын
Great presentation
@brod515
@brod515 11 ай бұрын
for the question @ 50:00 (I'm not a c++ expert) shouldn't there be NO drawbacks at all on the generated code. isn't only the compilation time affected?
@dennisrkb
@dennisrkb Жыл бұрын
The real killer app of concepts is introspective programming.
@kronek9371
@kronek9371 9 ай бұрын
17:44, why f need to be a template? if f are regulary (member) function, would overload resolution still choose the correct member?
@PedroOliveira-sl6nw
@PedroOliveira-sl6nw Жыл бұрын
Can we metaprogram a way to check if a struct/class has the optimal order of fields (for smallest size) ?
@tilmanrotationalinvariant2257
@tilmanrotationalinvariant2257 Жыл бұрын
I don't understand your question. There is no reflection in cpp(yet). So I guess the answer is very likely to be no.
@Roibarkan
@Roibarkan Жыл бұрын
Check out the techniques presented here - I believe it can be used to check whether padding is used in aggregate types. kzbin.info/www/bejne/nXeXaX96rpJpors
@masquue1465
@masquue1465 Жыл бұрын
Found quite several errors in his code examples. Some are just typos; but others are fundamentally wrong. E.g. the concept `BeginAndEndCopyConstructibleAndDestructible` should not be defined with `requires` expression but a merely `&&`s of those constraints. And in `struct is_container` the last a few lines of `&&`s should not be in `integral_constant` but in a `enable_if_t`, because even if some of those constraints are not met, the `integral_constant` and the resulting `void_t` are still well formed.
@FatassFromSingapore
@FatassFromSingapore Ай бұрын
Can someone explain the difference between void_t and enable_if and when to use each?
@Roibarkan
@Roibarkan Жыл бұрын
35:08 so the Neqable that’s going to constrain the second argument of foo()will actually be Neqable and not Neqable
@brod515
@brod515 11 ай бұрын
true It's important to point that out because in other case (unlike in this case) it would really make a difference
@liveonphoenix5045
@liveonphoenix5045 6 ай бұрын
@44:58 Machine: "It is 83.6% readable" Me: "..."
@davithov
@davithov 4 ай бұрын
Some notes: 1. slides are being changed fast 2. It would be nice to explain what you're trying to do first and then explain some code. At least for me it is hard to make connections between slides etc. So, you should consider that not everyone is expert in metaprogramming, especially when you're explaining more or less basic stuff compared to what experts know.
@jewulo
@jewulo Жыл бұрын
So C++ compilers can now execute code like an interpreter? All this for generic programming to work? Epic.
@cppnext-alexd
@cppnext-alexd Жыл бұрын
Actually it has done it since the beginning of C++, now it's just easier to achieve and actually readable by people that are not super professional in templates.
@jewulo
@jewulo Жыл бұрын
@@cppnext-alexd I do not know what this says about C++ has a language. Is this a good or bad thing? It is so complex that its compilers have emergent behaviours that were never predicted but discovered.
@cppnext-alexd
@cppnext-alexd Жыл бұрын
@@jewulo it's a happy discovery. But since then it's planned and the progress is wonderful.
@zakeria
@zakeria Жыл бұрын
Now we need to run metaprograms on GPU or parallell CPU😍
@origamibulldoser1618
@origamibulldoser1618 Жыл бұрын
Well. It's sort of old hat that meta programming was discovered by mistake. Turns out it's Turing complete, or so the canon goes, I believe. Being able to compute things at compile time is not in and of itself a bad thing. You can precalculate look up tables for example.
@onebronx
@onebronx Жыл бұрын
A good talk, but I wish people would stop abusing language putting the "-able" suffix to everything, and instead start using "Has-", "Is-" and "Can-" more. "Beginnable", "Endable", "Incrementable" etc are horrible unnatural names for concepts, they look like a brain cancer from Java. "HasBegin", "HasEnd", "CanIncrement" etc are much closer to the natural language and more conceptual, as we use concepts to test for identity ("is"), posession ("has"), ability ("can") etc.
@masondeross
@masondeross Жыл бұрын
Incrementable is a real word and is also the word used by the standard i.e. std::incrementable. It is hardly abuse to use real world terms for things, and I disagree with the assertion that a universal style is necessary to accommodate your own aesthetic considerations for use of the English language as long as the style used is consistent in this codebase. You are ignoring the obvious, that "-able" has incredibly clear meaning in this context, i.e. to make a word active rather than passive; i.e. it can be so. It would be absurd if used to show ownership, but that isn't being done. The concept isn't that a function "has begin", it's that the begin act can be done on it; it doesn't matter if it "has" some concept of begin if that begin isn't a method to begin the process of iteration, so querying if the type is beginable makes perfect sense. Has should be used for fields, since that is data possed/owned/referenced by the type, and should never be used in my opinion to query the presence of functionality; functionality is a question of "do-ability" i.e. -able, not ownership.
@brod515
@brod515 11 ай бұрын
​@@masondeross I think you have a point. using the right word is very opinion based and depends on the particular case. I don't fully agree that even keeping it consistent in the code base is really necessary (it's more about when someone sees it how quickly they can infer what the concept means without looking further). all the can/is/has/-able have there places they are just wasy to communicate intent.
@antonpieper
@antonpieper 8 ай бұрын
I am not sure about C++, but in Java the -able naming is used because it actually makes more sense from a natural language point of view. I would rather say "The class List is a Beginable" than "The class List is a CanBegin"
@WutipongWongsakuldej
@WutipongWongsakuldej 6 ай бұрын
How about a type traits with says 5 method requirements?
@ABaumstumpf
@ABaumstumpf Жыл бұрын
The slide at 44:30 is great - cause actually Nothing was gained in terms of readability, you only left out the code of "beginAndEndCopyConstructibleanddestructible" (what a horrible mess that is). So after a decade of trying C++ finally gives us somewhat usable error-messages. And i have to somewhat agree: it should not be called meta-programming for C++ - it is nothing like normal programming.
@yumnuska
@yumnuska Жыл бұрын
I’m so sorry. I’m less than 10 minutes in, and the mental gymnastics you’re asking me to execute are just preposterous. I’m sure this is a good talk, but I can’t help but think that it’s “lipstick on a pig”. C++ is the best worst language I’ve been forced to use. I just wish it didn’t suck so much.
@AirAKose
@AirAKose Жыл бұрын
The examples the speaker uses are very impractical and atypical of the features being shown. They're likely miscellaneous examples to make the point, but the impracticality is distracting for sure But in the end of their talk, the point is that *they agree with you* - they're providing historical context about C++ meta programming to show where it's at now and how much it's improved since the clunky, unmanageable SFINAE soup versions.
@stavb9400
@stavb9400 Жыл бұрын
You do avoid a lot of boilerplate sometimes
@cppnext-alexd
@cppnext-alexd Жыл бұрын
@@AirAKose I don't agree with the impractical point. It really depends on what you do. All the examples are very practical in my line of work.
@broken_abi6973
@broken_abi6973 Жыл бұрын
He started with the old way of doing it, and then jumps to how the new way is better.
@tilmanrotationalinvariant2257
@tilmanrotationalinvariant2257 Жыл бұрын
If you know how to use every feature of cpp, you can program in almost in any language very fine( only ok in functional programming languages though.) So you should feel lucky to be forced to learn from grandfather of all modern languages.
Smart Sigma Kid #funny #sigma #comedy
00:19
CRAZY GREAPA
Рет қаралды 24 МЛН
Пробую самое сладкое вещество во Вселенной
00:41
Let's get comfortable with SFINAE (C++)
35:55
platis.solutions
Рет қаралды 5 М.
Should you learn C++?? | Prime Reacts
20:29
ThePrimeTime
Рет қаралды 323 М.
WHY did this C++ code FAIL?
38:10
The Cherno
Рет қаралды 186 М.
Телефон в воде 🤯
0:28
FATA MORGANA
Рет қаралды 1,2 МЛН
cute mini iphone
0:34
승비니 Seungbini
Рет қаралды 5 МЛН
Собери ПК и Получи 10,000₽
1:00
build monsters
Рет қаралды 1,7 МЛН
How To Unlock Your iphone With Your Voice
0:34
요루퐁 yorupong
Рет қаралды 28 МЛН