I've done some benchmarks (lua-benchmarks).
For some reason sol2 perform slower than LuaBridge3.
In sol2 repo you can find benchmarks showing that sol2 have to outperform LuaBridge3 (benchmarks), but for some reason on real use cases it's not.
In LuaBridge3 docs you can find that statement (LuaBridge3 docs):
Although it comes close to the highest possible performance, LuaBridge is not quite the fastest, OOLua and sol2 outperforms LuaBridge in some tests, but they are also bigger and slower to compile.
So, why sol2 is slower in my benchmarks then?
Sol2 benchmark:
Performing Sol3 Benchmark:
Time elapsed (Increment (Lua)): 225.012ms
Time elapsed (Increment (C++)): 210.341ms
Time elapsed (String Argument (Lua)): 400.203ms
Time elapsed (String Argument (C++)): 241.732ms
Time elapsed (String Const Argument (Lua)): 405.579ms
Time elapsed (String Const Argument (C++)): 267.502ms
Time elapsed (String View Argument (Lua)): 321.18ms
Time elapsed (String View Argument (C++)): 258.553ms
Time elapsed (String Char Argument (Lua)): 311.116ms
Time elapsed (String Char Argument (C++)): 244.752ms
Time elapsed (String Iterator (Lua)): 561.75ms
Time elapsed (String Iterator (C++)): 188.024ms
Time elapsed (String Const Iterator (Lua)): 555.881ms
Time elapsed (String Const Iterator (C++)): 215.2ms
Time elapsed (String View Iterator (Lua)): 462.316ms
Time elapsed (String View Iterator (C++)): 205.954ms
Time elapsed (String Char Iterator (Lua)): 456.837ms
Time elapsed (String Char Iterator (C++)): 197.267ms
Time elapsed (String Internal Iterator (Lua)): 28.6687ms
Time elapsed (Class passing (Lua)): 491.857ms
Time elapsed (Class Passing (C++)): 188.96ms
Time elapsed (Class Getting (Lua)): 444.842ms
Time elapsed (Class Getting (C++)): 87.885ms
Time elapsed (Class method call (Base Class)): 1018.63ms
Time elapsed (Class method call (Derived Overwritten Class)): 950.832ms
Time elapsed (Class method call (Derived Not Overwritten Class)): 1672.24ms
Time elapsed (Class field access (Base Class)): 837.028ms
Time elapsed (Class field access (Derived Class)): 1512.29ms
LuaBridge3 benchmark:
Performing LuaBridge3 Benchmark:
Time elapsed (Increment (Lua)): 85.4452ms
Time elapsed (Increment (C++)): 685.158ms
Time elapsed (String Argument (Lua)): 187.733ms
Time elapsed (String Argument (C++)): 711.398ms
Time elapsed (String Const Argument (Lua)): 191.785ms
Time elapsed (String Const Argument (C++)): 740.246ms
Time elapsed (String View Argument (Lua)): 149.068ms
Time elapsed (String View Argument (C++)): 725.589ms
Time elapsed (String Char Argument (Lua)): 118.564ms
Time elapsed (String Char Argument (C++)): 718.35ms
Time elapsed (String Iterator (Lua)): 255.276ms
Time elapsed (String Iterator (C++)): 728.269ms
Time elapsed (String Const Iterator (Lua)): 257.562ms
Time elapsed (String Const Iterator (C++)): 756.581ms
Time elapsed (String View Iterator (Lua)): 194.296ms
Time elapsed (String View Iterator (C++)): 738.581ms
Time elapsed (String Char Iterator (Lua)): 170.795ms
Time elapsed (String Char Iterator (C++)): 737.091ms
Time elapsed (String Internal Iterator (Lua)): 5.10969ms
Time elapsed (Class passing (Lua)): 141.677ms
Time elapsed (Class Passing (C++)): 489.28ms
Time elapsed (Class Getting (Lua)): 205.569ms
Time elapsed (Class Getting (C++)): 507.022ms
Time elapsed (Class method call (Base Class)): 154.02ms
Time elapsed (Class method call (Derived Overwritten Class)): 155.294ms
Time elapsed (Class method call (Derived Not Overwritten Class)): 248.309ms
Time elapsed (Class field access (Base Class)): 181.451ms
Time elapsed (Class field access (Derived Class)): 283.496ms
UPD:
Sol2 benchmark (with -O3 flag):
Performing Sol3 Benchmark:
Time elapsed (Increment (Lua)): 32.6984ms
Time elapsed (Increment (C++)): 56.1082ms
Time elapsed (String Argument (Lua)): 73.2311ms
Time elapsed (String Argument (C++)): 155.397ms
Time elapsed (String Const Argument (Lua)): 69.815ms
Time elapsed (String Const Argument (C++)): 176.076ms
Time elapsed (String View Argument (Lua)): 59.6035ms
Time elapsed (String View Argument (C++)): 158.813ms
Time elapsed (String Char Argument (Lua)): 53.9835ms
Time elapsed (String Char Argument (C++)): 194.122ms
Time elapsed (String Iterator (Lua)): 116.469ms
Time elapsed (String Iterator (C++)): 88.9511ms
Time elapsed (String Const Iterator (Lua)): 114.828ms
Time elapsed (String Const Iterator (C++)): 99.197ms
Time elapsed (String View Iterator (Lua)): 85.6064ms
Time elapsed (String View Iterator (C++)): 91.3165ms
Time elapsed (String Char Iterator (Lua)): 109.081ms
Time elapsed (String Char Iterator (C++)): 123.287ms
Time elapsed (String Internal Iterator (Lua)): 30.3189ms
Time elapsed (Class passing (Lua)): 155.851ms
Time elapsed (Class Passing (C++)): 88.1614ms
Time elapsed (Class Getting (Lua)): 122.943ms
Time elapsed (Class Getting (C++)): 42.5303ms
Time elapsed (Class method call (Base Class)): 261.55ms
Time elapsed (Class method call (Derived Overwritten Class)): 201.069ms
Time elapsed (Class method call (Derived Not Overwritten Class)): 473.373ms
Time elapsed (Class field access (Base Class)): 214.91ms
Time elapsed (Class field access (Derived Class)): 429.851ms
LuaBridge3 benchmark (with -O3 flag):
Performing LuaBridge3 Benchmark:
Time elapsed (Increment (Lua)): 24.6991ms
Time elapsed (Increment (C++)): 169.714ms
Time elapsed (String Argument (Lua)): 56.6672ms
Time elapsed (String Argument (C++)): 160.134ms
Time elapsed (String Const Argument (Lua)): 59.1771ms
Time elapsed (String Const Argument (C++)): 183.209ms
Time elapsed (String View Argument (Lua)): 29.8749ms
Time elapsed (String View Argument (C++)): 164.018ms
Time elapsed (String Char Argument (Lua)): 29.6969ms
Time elapsed (String Char Argument (C++)): 168.75ms
Time elapsed (String Iterator (Lua)): 85.9382ms
Time elapsed (String Iterator (C++)): 152.362ms
Time elapsed (String Const Iterator (Lua)): 83.0993ms
Time elapsed (String Const Iterator (C++)): 178.119ms
Time elapsed (String View Iterator (Lua)): 52.2461ms
Time elapsed (String View Iterator (C++)): 153.509ms
Time elapsed (String Char Iterator (Lua)): 51.528ms
Time elapsed (String Char Iterator (C++)): 163.818ms
Time elapsed (String Internal Iterator (Lua)): 6.12704ms
Time elapsed (Class passing (Lua)): 73.1719ms
Time elapsed (Class Passing (C++)): 157.952ms
Time elapsed (Class Getting (Lua)): 125.278ms
Time elapsed (Class Getting (C++)): 119.256ms
Time elapsed (Class method call (Base Class)): 107.476ms
Time elapsed (Class method call (Derived Overwritten Class)): 111.158ms
Time elapsed (Class method call (Derived Not Overwritten Class)): 196.297ms
Time elapsed (Class field access (Base Class)): 143.778ms
Time elapsed (Class field access (Derived Class)): 234.974ms