7 ms·
If not doing anything edge-casey, nanobind[0] is extremely pleasant to use. It’s a rewrite of pybind11 specifically designed for the 80/20 use-cases and solves
by iopapa 1y ago
If not doing anything edge-casey, nanobind[0] is extremely pleasant to use. It’s a rewrite of pybind11 specifically designed for the 80/20 use-cases and solves the long compile times.
I have used it extensively over the last year in atopile[1] if someone is looking for a real-world production code example.
We are using nanobind paired with hatch & scikit-build.
I suggest having a look at the pyproject and src/faebryk/core/cpp.
[0] https://github.com/wjakob/nanobind https://github.com/wjakob/nanobind
[1] https://github.com/atopile/atopile https://github.com/atopile/atopile
- almostgotcaught 1y ago> solves the long compile times this only goes so far - if you try to eg bind O(10k) methods using nanobind (or pybind ofc) you will be compiling for a very long time. for example, i have a threadripper and with a single large TU (translation unit) it took about 60 minutes (because single TU <-> single thread). i had to "shard" my nanobind source to get down to a "reasonable" ~10 minutes.
- drysine 1y ago>O(10k) If k means 1000 than O(10000) is the same as O(1). Perhaps you meant "approximately 10k"?
- happy_dog1 1y agoI love nanobind, use it all the time and highly recommend it. It makes it very easy to pass numpy, PyTorch, cupy or tensorflow arrays to your C++ extension, to specify what array shape and flags are expected, and to wrap either C++ or Cuda code. When paired with scikit-build, it makes building Python packages with C++ extensions a breeze. I would give it more than one star on github if I could.