New Features
* feat: add `to_buffer` and helper methods in layout builder by ManasviGoyal in https://github.com/scikit-hep/awkward/pull/2766
* feat: add helper methods to `utils.h` by ManasviGoyal in https://github.com/scikit-hep/awkward/pull/2771
* feat!: rework ufunc type promotion handling by agoose77 in https://github.com/scikit-hep/awkward/pull/2767
* feat: extend `to_layout` options by agoose77 in https://github.com/scikit-hep/awkward/pull/2763
Bug Fixes and Performance
* fix: add `highlevel`, `behavior` arguments to composite reducers by agoose77 in https://github.com/scikit-hep/awkward/pull/2754
* fix: export `nan` variants by agoose77 in https://github.com/scikit-hep/awkward/pull/2758
* fix: update `__class__` for both `layout` and `behavior` consistently by agoose77 in https://github.com/scikit-hep/awkward/pull/2759
* fix: support all-`None` index in `awkward_Index_nones_as_index.cpp` by agoose77 in https://github.com/scikit-hep/awkward/pull/2769
* fix: handle unhashable behaviour type by ianna in https://github.com/scikit-hep/awkward/pull/2770
* fix: protect RecordForm against len(fields) != len(contents) by jpivarski in https://github.com/scikit-hep/awkward/pull/2776
* fix: drop lengths recursively by agoose77 in https://github.com/scikit-hep/awkward/pull/2775
* fix: `ak.num` should always return a useful (non-unknown length) type by agoose77 in https://github.com/scikit-hep/awkward/pull/2785
* fix: remove old argument from `broadcast_and_apply` by agoose77 in https://github.com/scikit-hep/awkward/pull/2790
* fix: don't preserve unexpected option for is_in by agoose77 in https://github.com/scikit-hep/awkward/pull/2792
* fix: support scalar strings in `fill_none` by agoose77 in https://github.com/scikit-hep/awkward/pull/2793
* fix: support arbitrary ufuncs with respect to NEP-50 by agoose77 in https://github.com/scikit-hep/awkward/pull/2799
Other
* chore: add trove classifier to awkward-cpp by agoose77 in https://github.com/scikit-hep/awkward/pull/2729
* chore: update pre-commit hooks by pre-commit-ci in https://github.com/scikit-hep/awkward/pull/2733
* chore: set `pyupgrade` version by agoose77 in https://github.com/scikit-hep/awkward/pull/2756
* chore: prepare for ruff-format by henryiii in https://github.com/scikit-hep/awkward/pull/2773
* chore: move to Ruff-format by henryiii in https://github.com/scikit-hep/awkward/pull/2777
* chore: run mypy in CI by agoose77 in https://github.com/scikit-hep/awkward/pull/2789
* chore: run mypy on `ak.types` by agoose77 in https://github.com/scikit-hep/awkward/pull/2791
* ci: fix oldest-supported-dependencies test workflow by agoose77 in https://github.com/scikit-hep/awkward/pull/2783
* refactor: drop `behavior` broadcasting by agoose77 in https://github.com/scikit-hep/awkward/pull/2761
* refactor: introduce parametrised nplike types by agoose77 in https://github.com/scikit-hep/awkward/pull/2795
* chore(deps): bump amannn/action-semantic-pull-request from 5.3.0 to 5.4.0 by dependabot in https://github.com/scikit-hep/awkward/pull/2796
**Full Changelog**: https://github.com/scikit-hep/awkward/compare/v2.4.6...v2.4.8