Symbolic Calculus for High-performance Computing From Scratch Using C++23 - Vincent Reverdy - CppCon

Discover how to create a symbolic calculus implementation from scratch using C++23, inspired by the speaker's innovative approach to solving high-performance computing challenges.

Key takeaways
  • The speaker proposes using C++23 to implement symbolic calculus, which involves replacing mathematical expressions with symbols and performing operations on these symbols.
  • The first requirement is to define a symbol type that can be used to represent a mathematical expression.
  • The symbol type inherits from a base class and has a unique ID.
  • The speaker suggests using a default template parameter and a lambda to create uniquely typed symbols.
  • The second requirement is to define a formula type that can be used to represent a mathematical expression.
  • The formula type is defined as a class that has a list of terms, each of which is a composition of a symbol and a value.
  • The speaker suggests using a default template parameter and a lambda to create uniquely typed formulas.
  • The third requirement is to define a constraint type that can be used to constrain the values of the symbols in a formula.
  • The constraint type is defined as a class that has a list of symbols and values.
  • The speaker suggests using a default template parameter and a lambda to create uniquely typed constraints.
  • The fourth requirement is to define a way to evaluate the formulas using the symbols and constraints.
  • The speaker suggests using a default template parameter and a lambda to create uniquely typed evaluators.
  • The speaker also discusses the importance of debugging and testing the symbolic calculus implementation.
  • He mentions that the implementation should be able to handle complex expressions and mathematical operations.
  • The speaker also mentions that the implementation should be able to handle errors and exceptions.
  • Finally, he concludes by mentioning that the symbolic calculus implementation is a complex task that requires a good understanding of C++ and mathematical concepts.