Show HN: Woid – 3x Faster Runtime Polymorphism. C++23

2 pointsposted 7 hours ago
by akopich

1 Comments

akopich

7 hours ago

Author here. It started when I felt virtual functions and associated heap allocations are too expensive. Then I've realized std::any doesn't work for move-only types, let alone its SBO storage isn't configurable. Meanwhile microsoft/proxy does SBO only for trivial types. And there we go...

Woid is an extremely customizable high-performance type-erasure header-only library. It provides containers like std::any, std::function and tools for non-intrusive polymorphism.

Key features:

- Performance

- Value semantics

- Move-only type support

- Duck typing

- Extreme customizability

In my current benchmarks it outperforms std::any, std::function, inheritance-based polymorphism and some well-known libraries like function2, boost::te and microsoft/proxy.

I want to make sure the comparison is fair, therefore, your advice on how to better tune the existing libraries is rather welcome.

  struct Square {
      double side;
      double area() const { return side * side; }
  };
  struct Shape : woid::InterfaceBuilder
             ::Fun<"area", [](const auto& obj) -> double { return obj.area(); } >
             ::Build {
      auto area() const { return call<"area">(); }
  };
  
  auto a = Shape{Square{1.5}}.area();
And of course I'm here to answer your questions.