Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C++ TL;DR news 4 #34

Closed
GuillaumeBelz opened this issue Jun 8, 2021 · 9 comments
Closed

C++ TL;DR news 4 #34

GuillaumeBelz opened this issue Jun 8, 2021 · 9 comments
Assignees
Labels
aide demandée Une aide supplémentaire est demandée état : fini La proposition a été acceptée et appliquée

Comments

@GuillaumeBelz
Copy link

issue precedente #30

@GuillaumeBelz GuillaumeBelz self-assigned this Jun 8, 2021
@GuillaumeBelz GuillaumeBelz added aide demandée Une aide supplémentaire est demandée scope : discord état : en discussion La proposition est en cours de discussion labels Jun 8, 2021
@GuillaumeBelz
Copy link
Author

GuillaumeBelz commented Jun 16, 2021

Trop tard pour être publié

Learning solutions survey

Pour ceux que ça intéressé, voici un petit questionnaire réalisé par Qt Company, pour mieux connaitre le public de Qt. https://www.qt.io/blog/learning-solutions-survey

@GuillaumeBelz
Copy link
Author

Three Myths About Floating-Point Numbers

Lire l'article : https://www.cppstories.com/2021/06/floating-point-myths/

peuvent avoir un impact sur la précision de certains calculs. Article pour aider a aller un peu plus loin.

  • Ils ne sont pas exacts

@GuillaumeBelz
Copy link
Author

GuillaumeBelz commented Jun 28, 2021

Trop tard pour être publié

CppCon 2021 Call for Submissions

Lire l'article : https://cppcon.org/cppcon-2021-call-for-submissions/

Ce n'est pas une news qui va intéresser beaucoup de monde, mais la CppCon reste un événement majeur du C++. Et même si peu de monde aura l'occasion d'y aller (j'y serais probablement, vu que mon entreprise est sponsor de la CppCon), j'imagine que beaucoup connaissent et ont déjà vu les vidéos des conférences sur YouTube.

Si ce n'est pas le cas, je vous conseille de suivre cette chaîne, c'est une source d'information très intéressante en C++. Je vous conseille en particulier les sessions plénières (https://www.youtube.com/watch?v=ERzENfQ51Ck&list=PLHTh1InhhwT4PVVy3PGfw0Va7wZNrH0-w), les Back to basic (https://www.youtube.com/watch?v=ZAji7PkXaKY&list=PLHTh1InhhwT5o3GwbFYy3sR7HDNRA353e) et ma recommandation personnelle : "Stop Teaching C" de Kate Gregory (https://youtu.be/YnWhqhNdYyk?list=PUMlGfpWw-RUdWX_JbLCukXg).

La chaine YouTube : https://www.youtube.com/user/CppCon

@GuillaumeBelz
Copy link
Author

GuillaumeBelz commented Jun 28, 2021

Template Argument Deduction of Class Templates

Lire l'article : http://www.modernescpp.com/index.php/template-argument-deduction-of-class-templates

Cet article fait partie d'une série, qui vise à couvrir l'ensemble des syntaxes liées aux templates. Je te conseille de lire les autres articles si le sujet d'intéresse.

La déduction des paramètres template "non type"

Les paramétres template "non type" (non-type template parameters, je ne connais pas de traduction officielle) correspondent a des valeurs au lieu de types.

template <auto N>
class MyClass{
    ....
};

template <int N>
class MyClass<N> {
    ....
};

MyClass<'x'> myClass1;
MyClass<2017>  myClass2;

Les valeurs acceptées sont nullptr, les valeurs intégrales (integral value) comme les bool et les int, les références & (lvalue references), les pointeurs, les énumerations, et les nombres réels (C++20).

Les arguments "non type" peuvent également être utilisés avec les variadic template :

template <auto... ns> 
class VariadicTemplate{ .... }; 

template <auto n1, decltype(n1)... ns>
class TypedVariadicTemplate{ .... };

Déduction automatique des classes templates

Avant le C++17, seul la déduction automatique des fonctions template était possible, mais depuis le C++17, cela fonctionne aussi avec les classes templates.

// fonction template
template <typename T>
void showMe(const T& t);

showMe(5.5);          // not showMe<double>(5.5);
showMe(5);            // not showMe<int>(5);

// classe template
template <typename T>
struct ShowMe;

ShowMe(5.5);          // not ShowMe<double>(5.5);
ShowMe(5);            // not ShowMe<int>(5);

Quelques exemples avec la bibliothèque standard :

std::array myArr{1, 2, 3};         // deduces std::array<int, 3> 
std::vector myVec{1.5, 2.5};       // deduces std::vector<double>
 
std::mutex mut;
std::lock_guard myLock(mut);       // deduces std::lock_guard<mutex>(mut);
  
std::pair myPair(5, 5.5);          // deduces std::pair<int, double>
std::tuple myTup(5, myArr, myVec); // deduces std::tuple<int, 
                                   // std::array<int, 3>, std::vector<double>>

Déduction automatique avec les concepts

La déduction automatique fonctionne également avec les concepts (C++20).

void foo(auto t);
foo(5.5);

void bar(std::integral auto t);
bar(5);

template <std::regular T>
struct Class;
Class cl(true);

@GuillaumeBelz
Copy link
Author

Trip report: Summer 2021 ISO C++ standards meeting (virtual)

Lire l'article : https://herbsutter.com/2021/06/09/trip-report-summer-2021-iso-c-standards-meeting-virtual/

Comme pour chaque réunion du comité C++, Herb Sutter a écrit un compte rendu des différentes propositions en cours de discussion ou acceptée. Pour rappel, il existe un document qui présente les priorités pour le C++23 et un autre qui présente le planning pour le C++23.

@GuillaumeBelz
Copy link
Author

Some lesser-known powers of std::optional

Lire l'article : https://devblogs.microsoft.com/oldnewthing/20211004-00/?p=105754

Un article intéressant sur quelques pièges quand on utilise std::optional (C++17).

Par exemple si on essaie de comparer un std::optional<bool> ou std::optional<int> en pensant comparer la valeur contenue dans le std::optional :

std::optional<bool> opt1 = false;
if (opt1) {
    // this executes because the variable
    // is non-empty (even though it is false)
}

std::optional<int> opt;
if (opt == 0) {
    // does not execute because the variable is empty
    // and is not equal to any integer.
}

Pour lever les ambiguïtés, il faut alors utiliser has_value() et value().

@GuillaumeBelz
Copy link
Author

std::span should have a converting constructor from initializer_list

Lire l'article : https://quuxplusone.github.io/blog/2021/10/03/p2447-span-from-initializer-list/

Cet article détaille la problématique de la création d'un std::span (C++17) à partir de liste de valeurs. Avec std::string_view, il est possible de passer une lvalue ou une rvalue :

void f(std::string_view);
void test() {
    std::string s = "hello";
    f(s);        // OK
    f("world");  // OK
}

Par symétrie, il serait intéressant de pouvoir écrire le même code avec std::span :

void f(std::span<const int>);
void test() {
    std::vector<int> v = {1, 2, 3};
    f(v);          // OK
    f({1, 2, 3});  // ...error??
}

Le problème est que std:: initializer_list ne peut pas être déduit par le constructeur de std::span. Il faut alors écrire explicitement :

f(std::vector{1, 2, 3});
f(std::array{1, 2, 3});
f(std::initializer_list<int>{1, 2, 3});

Des solutions sont proposées pour le C++23, mais il reste des problèmes à régler.

L'autre question abordée par l'article est le risque d'avoir une indirection invalide avec std::span (mais c'est valide avec tous les types similaires, dont std::string_view). Par exemple :

std::vector<int> getVector() { return {1, 2, 3}; }
std::span<const int> sp = getVector();
for (int i : sp) std::cout << i;  // UB, dangling pointer, possible segfault

Ce problème a fait l'objet de nombreux débats dans la communauté C++. Et la solution est simplement... ne pas faire ça !

Arthur utilise le concept de "parameter-only type", c'est-à-dire des types qui ne doivent servir que dans des paramètres de fonctions. Le propos de ces types est uniquement de simplifier des passages par référence constante : std::string_view à la place de const std::string& et std::span à la place de const std::vector& (ou d'autres types de tableaux).

En aucun cas, ces types doivent être utilisé en retour de fonction ou comme variable.

@GuillaumeBelz
Copy link
Author

GuillaumeBelz commented Oct 8, 2021

CppCon 2021

La CppCon commence dans très peu de temps : dans 16 jours (du 25 au 29 octobre 2021) https://cppcon2021.sched.com. Comme les années précédentes, je vais suivre cette conférence et comme l'année dernière, je le ferais en ligne. (Il est possible d'être présent sur place cette année, mais mon entreprise, pour des raisons sanitaires, à choisi de ne pas envoyer les personnes là bas).

Pour ceux que ça intéresse, je ferais des lives sur twitch (je donnerais les liens vers la chaîne NaN une autre fois, il parait qu'il y a des problèmes en ce moment avec twitch...) pendant la semaine de cette conférence.

Au programme :

Tous les matins, un résumé des conférences que j'ai suivi la veille. Si d'autres personnes suivent la CppCon, ils sont chaleureusement invité à me rejoindre sur le discord NaN pour discuter en live. Les conférences commencent à 7h45 MDT (donc 15h45 en France), je ferais les lives vers 7h00 MDT (15h en France).

Regarder en live les keynotes suivi d'une discussion. Les 3 keynotes sont :

  • "C++20: Reaching for the Aims of C++", par Bjarne Stroustrup, le lundi 25 octobre, de 8h45 MDT à 10h30 MDT (16h45 à 18h30 en France).
  • "Extending and Simplifying C++: Thoughts on pattern Matching using is and as", par Herb Sutter, le mardi 26 octobre, de 10h30 MDT à 12h MDT (18h30 à 20h en France).
  • "Value in a Procedural World", par Lisa Lippincott, le mercredi 27 octobre, de 10h30 MDT à 12h MDT (18h30 à 20h en France).

(Je donne le détail des heures MDT et heure française, pour que vous puissiez me corriger si je me trompe).

Pour ceux qui ne sont pas inscrit à la CppCon, les vidéos seront mis en ligne sur YouTube dans les semaines à venir https://www.youtube.com/user/CppCon. Si vous êtes débutants ou intermédiaires, je vous conseille la série de vidéos "Back to basics".

De mon côté, il est possible que je suis la série de vidéos "Software Design". Mon programme de la semaine devrait être le suivant.

Lundi :

  • "C++20: Reaching for the Aims of C++" par Bjarne Stroustrup.
  • "Concurrency Patterns" par Rainer Grimm ou "C++20 Templates: The next level: Concepts and more" par Andreas Fertig.
  • "Law of Demeter: A Practical Guide to Loose Coupling" par Kris Jusiak.
  • ?
  • "Type-and-resource safety in modern C++" par Bjarne Stroustrup.
  • "Designing for the Long Term: Invariants, Knobs, Extensions, and Hyrum’s Law" par Titus Winters.
  • "Back to Basics: Concurrency" par Mike Shah.

Mardi:

  • "Design Patterns: Facts and Misconceptions" par Klaus Iglberger.
  • ?
  • "Extending and Simplifying C++: Thoughts on pattern Matching using is and as" par Herb Sutter.
  • "Software Architecture Lessons from Multidimensional Spaces Explorations" par Vincent Reverdy ou "Changing Legacy Code with Confidence: Practical Advice for Maintaining and Migrating Working Code" par Brian Ruth.
  • ?
  • "Composable C++: Principles and Patterns" par Ben Deane ou "Static Analysis and Program Safety in C++: Making it Real" par Sunny Chatterjee.
  • "Deploying the Networking TS" par Robert Leahy ou "PGAS in C++: A Portable Abstraction for Distributed Data Structures" par Benjamin Brock

Mercredi :

  • "The Foundation of C++ Atomics: The Knowledge You Need to Correctly Use C++ Atomics" par Filipe Mulonde.
  • "Testing Compile-time Constructs Within a Runtime Unit Testing Framework" par Igor Bogoslavskyi.
  • "Design Idioms from an Alternate Universe" par Ivan Čukić ou "The Basics of Profiling" par Mathieu Ropert ou "Value in a Procedural World" par Lisa Lippincott.
  • "In-memory and Persistent Representations of C++" par Gabriel Dos Reis.
  • "The Factory Pattern" par Mike Shah.
  • "Design and Implementation of Highly Scalable Quantifiable Data Structures in C++" par Victor Cook • Zachary Painter • Christina Peterson.
  • ""Deducing this" Patterns" par Ben Deane ou "A Case-study in Rewriting a Legacy GUI Library for Real-time Audio Software in Modern C++" par Roth Michaels.

N'hésitez pas à partager vos programmes aussi.

@Elanis Elanis added état : fini La proposition a été acceptée et appliquée and removed état : en discussion La proposition est en cours de discussion labels May 5, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
aide demandée Une aide supplémentaire est demandée état : fini La proposition a été acceptée et appliquée
Projects
None yet
Development

No branches or pull requests

2 participants