C++26
Posted on August 3, 2026
|
Henry Schreiner
C++26 is done (technically complete March 2026, publication expected later this
year), so let’s explore the new features in C++, from a data science point of
view. This is the biggest release since C++11; in fact, one feature might be the
biggest single feature ever. Reflection means C++ now understands itself without
macros or hacks; it’s also one of the first mainstream compiled languages to
have full static reflection (Rust has syntactic macros, but not true reflection;
D, zig, and C# have reflection). Contracts finally landed after 20+ years of
attempts; the async model (std::execution) and data-parallel types
(std::simd, std::linalg) are also big additions.
Standard stuff from previous releases is also continuing to improve. Much more
constexpr, more ranges, mdspan grows sub-views, formatting keeps improving.
Plus memory-safety improvements (erroneous behavior, hardened standard library).
[Read More]scikit-build-core 1.0
Posted on July 6, 2026
(Last modified on August 3, 2026)
|
Henry Schreiner
Scikit-build-core 1.0, the culmination of a four year project to build the
best compiled code backend for Python, is out. It’s a huge release,
with over 90 bugs fixed, over 40 new features, accounting for over a hundred
closed issues. This is the completion of my original vision, and I’m really
happy with it. I’d like to show off some of the new features, and also discuss
some of the last four months of development that made this possible. This is all
in time for SIMPLE-Py, the workshop I’m hosting next week over Python
packaging alongside SciPy 2026.
[Read More]Claude Code Reviews with Fable
Posted on June 16, 2026
(Last modified on July 29, 2026)
|
Henry Schreiner
Fable came out and then disappeared a couple of days later. In that short time,
I managed to run a lot of repository reviews with it, and was really happy with
the results. I’ve found and fixed around 400 bugs and 400+ other issues
(performance, simplifications, modernizations) across dozens of my projects,
making several hundred PRs with a nearly 100% merge rate on decided PRs.
[Read More] cibuildwheel 4.0
Posted on June 7, 2026
(Last modified on June 9, 2026)
|
Henry Schreiner
cibuildwheel 4.0.0 is out, with some very big additions. We’ve added
pyemscripten 3.13 wheels (uploadable to PyPI!), Python 3.15 (and 3.15t)
betas, and much more! We’ve got a new stage: audit, which applies
abi3audit to stable ABI wheels. We now default to running
delvewheel to repair Windows wheels. We now have {project} and {package}
placeholders for config-settings, and we set CIBUILDWHEEL_BUILD_IDENTIFIER
in the build step. We’ve also made some nice Android improvements. We’ve removed
support for Python 3.8, Python 3.13t, GraalPy 3.11, and Cirrus CI.
[Read More]Python 3.15
Posted on May 6, 2026
(Last modified on July 29, 2026)
|
Henry Schreiner
Python 3.15 beta 1 is out! This is a really impactful release, with some really
big additions. A new lazy import system, a powerful sampling profiler, not one
but two new builtins, the usual color/types/errors updates, and lots of key
changes for developers.
[Read More]Starting With Agentic AI
Posted on May 5, 2026
(Last modified on July 29, 2026)
|
Henry Schreiner
AI suddenly passed the “more time saved than spent” point around December 2025.
A little late, I’ve finally started using agentic AI in various places over the
last 2-3 months, and wanted to jot down my thoughts on what works, what doesn’t
(yet?), and what the future might look like. If you are curious about AI for
programming, or have been skeptical in the past, if “AI slop” is the first thing
that comes to mind, this post will show you some ways that AI can be really
helpful. Certain tasks have been completely transformed. Notice, I said “some”,
not “all”! But it is a lot.
[Read More]Repo Review 1.0
Posted on April 4, 2026
(Last modified on May 22, 2026)
|
Henry Schreiner
I’ve just released repo-review 1.0 with a huge update to the WebApp, along
with some other solid improvements in speed, simplicity, and stability.
Repo-review’s two most popular plugins, sp-repo-review and
validate-pyproject, can take full advantage of the new asynchronous fetching
mechanism. And if you use the upcoming Python 3.15, the CLI is more responsive
than ever thanks to lazy loading!
[Read More]Working to make Python lazy
Posted on March 24, 2026
(Last modified on August 3, 2026)
|
Henry Schreiner
Python 3.15a7, which is now just a uv python install 3.15 away on all major
platforms, has lazy imports! This exciting feature, proposed in PEP 810,
promises to make CLI applications faster (especially when using flags like
--help), and could make a lot of large code with lots of imports that don’t
always get used faster too. Unlike the earlier, failed attempt, this requires
libraries to put in some work. I’ve developed a helper tool to make it easy; I’d
like to cover what lazy imports are and how to use my tool. Since this is the
first library that I used AI heavily in developing, the second half of the post
will cover how my experience with AI for a task like this went.
TL;DR: run uvx flake8-lazy --apply=list to make your code magically faster on
Python 3.15!
[Read More]