From: Eric Wong <e@80x24.org>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org,
"Haelwenn (lanodan) Monnier" <contact@hacktivis.me>,
"brian m. carlson" <sandals@crustytoothpaste.net>,
Ben Knoble <ben.knoble@gmail.com>,
Christian Brabandt <cb@256bit.org>,
Collin Funk <collin.funk1@gmail.com>,
Eli Schwartz <eschwartz@gentoo.org>,
Elijah Newren <newren@gmail.com>,
Ezekiel Newren <ezekielnewren@gmail.com>,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
Junio C Hamano <gitster@pobox.com>,
Phillip Wood <phillip.wood123@gmail.com>,
Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>,
Sam James <sam@gentoo.org>, Taylor Blau <me@ttaylorr.com>,
Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Subject: what's missing from newer C? [was: [PATCH v5 0/9] Introduce Rust ....]
Date: Thu, 25 Sep 2025 01:10:43 +0000 [thread overview]
Message-ID: <20250925011043.M401827@dcvr> (raw)
In-Reply-To: <20250915-b4-pks-rust-breaking-change-v5-0-dc3a32fbb216@pks.im>
Patrick Steinhardt <ps@pks.im> wrote:
> this small patch series introduces Rust into the core of Git. This patch
> series is designed as a test balloon, similar to how we introduced test
> balloons for C99 features in the past. The goal is threefold:
> - Give distributors time to ease into the new toolchain requirements.
> Introducing Rust is impossible for some platforms and hard for
> others.
>
> - Announce that Git 3.0 will make Rust a mandatory part of our build
> infrastructure.
Newer (and perhaps experimental) C has some safety and ergonomic
features which Rust advocates might be overlooking:
1. C23 has stdckdint.h for checked arithmetic to prevent overflows
2. __counted_by__ attribute in clang 18 and gcc 15 for
guarding against buffer overflows:
https://people.kernel.org/gustavoars/how-to-use-the-new-counted_by-attribute-in-c-and-linux
It's easy to fall back to disabling it for unsupported compilers.
3. __cleanup__ attribute is supported by TinyCC, gcc, and clang
for many years (even decades), now. Auto cleanup makes managing
locks for parallelism much easier along with normal resource
management ergonomic improvement. __cleanup__ should be trivial
for other compiler maintainers to add (even TinyCC supports it)
4. Userspace RCU provides concurrent data structures even w/o
RCU (and AFAIK ConcurrencyKit, too, but I've never used CK)
5. compilers check format strings nowadays (but I dislike format
strings for performance reasons unless using qrintf)
6. regexps (POSIX ERE or PCRE2) are already used by git and can
be used more extensively to make safer parsers. There's also
things like wuffs and re2c to generate C (I've yet to try
either).
We also have Valgrind, ASAN, TSAN, etc...
__cleanup__ and __counted_by__ are the biggest deals to me and I
hope they'll be standardized soon. The rest of the other stuff
is pretty well-known at this point...
What else is missing from C?
FWIW, I detest hacking in verbose AOT languages in general and
don't write a lot of C as a result. However, I've spent a
large part of this century fixing C code written by others for
the usual memory leaks, memory errors, races, overflows, etc.
I'm not particularly a fan of the C code in git for a variety
of reasons but have sought to improve it here and there
(container_of, list.h, etc.)
Building git nowadays is painful for me due to the (lack of)
speed from lld/gold/mold on my ancient hardware. Rust's
famously slow compilation speeds would mean only developers
willing to work for and/or promote $MEGACORP interests would be
able to afford to hack on code.
Thanks for reading.
next prev parent reply other threads:[~2025-09-25 1:16 UTC|newest]
Thread overview: 207+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-04 14:26 [PATCH RFC 0/3] Introduce Rust and announce that it will become mandatorty Patrick Steinhardt
2025-09-04 14:26 ` [PATCH RFC 1/3] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-04 18:50 ` Junio C Hamano
2025-09-05 7:53 ` Patrick Steinhardt
2025-09-04 22:06 ` brian m. carlson
2025-09-04 22:46 ` Junio C Hamano
2025-09-05 7:49 ` Patrick Steinhardt
2025-09-05 1:16 ` Eli Schwartz
2025-09-05 7:50 ` Patrick Steinhardt
2025-09-05 13:20 ` Eli Schwartz
2025-09-04 14:26 ` [PATCH RFC 2/3] rust: implement a test balloon via the "varint" subsystem Patrick Steinhardt
2025-09-04 22:37 ` brian m. carlson
2025-09-05 7:54 ` Patrick Steinhardt
2025-09-04 23:39 ` Ezekiel Newren
2025-09-05 2:00 ` Eli Schwartz
2025-09-05 7:54 ` Patrick Steinhardt
2025-09-05 13:39 ` Eli Schwartz
2025-09-07 20:07 ` Ben Knoble
2025-09-08 4:39 ` Junio C Hamano
2025-09-08 11:39 ` Patrick Steinhardt
2025-09-09 0:49 ` Ben Knoble
2025-09-09 15:27 ` Junio C Hamano
2025-09-08 6:44 ` Patrick Steinhardt
2025-09-04 14:26 ` [PATCH RFC 3/3] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-04 17:38 ` Eric Sunshine
2025-09-05 7:54 ` Patrick Steinhardt
2025-09-05 11:50 ` [PATCH RFC v2 0/7] Introduce Rust and announce that it will become mandatorty Patrick Steinhardt
2025-09-05 11:50 ` [PATCH RFC v2 1/7] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-05 17:47 ` Justin Tobler
2025-09-08 6:42 ` Patrick Steinhardt
2025-09-07 4:54 ` Elijah Newren
2025-09-08 6:42 ` Patrick Steinhardt
2025-09-05 11:50 ` [PATCH RFC v2 2/7] Makefile: introduce " Patrick Steinhardt
2025-09-05 20:21 ` brian m. carlson
2025-09-08 6:40 ` Patrick Steinhardt
2025-09-07 4:58 ` Elijah Newren
2025-09-08 6:41 ` Patrick Steinhardt
2025-09-07 15:26 ` SZEDER Gábor
2025-09-08 6:41 ` Patrick Steinhardt
2025-09-05 11:50 ` [PATCH RFC v2 3/7] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-05 19:51 ` brian m. carlson
2025-09-07 5:00 ` Elijah Newren
2025-09-05 11:51 ` [PATCH RFC v2 4/7] rust: implement a test balloon via the "varint" subsystem Patrick Steinhardt
2025-09-05 21:46 ` Junio C Hamano
2025-09-05 22:39 ` Junio C Hamano
2025-09-05 23:04 ` brian m. carlson
2025-09-05 11:51 ` [PATCH RFC v2 5/7] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-05 12:45 ` Matthias Aßhauer
2025-09-05 13:38 ` Patrick Steinhardt
2025-09-05 14:38 ` Eli Schwartz
2025-09-08 6:42 ` Patrick Steinhardt
2025-09-07 5:31 ` Elijah Newren
2025-09-08 6:42 ` Patrick Steinhardt
2025-09-05 14:22 ` Phillip Wood
2025-09-05 14:32 ` Eli Schwartz
2025-09-05 19:34 ` brian m. carlson
2025-09-07 5:25 ` Elijah Newren
2025-09-05 11:51 ` [PATCH RFC v2 6/7] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-07 0:21 ` Junio C Hamano
2025-09-08 6:41 ` Patrick Steinhardt
2025-09-05 11:51 ` [PATCH RFC v2 7/7] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-05 19:56 ` brian m. carlson
2025-09-08 6:40 ` Patrick Steinhardt
2025-09-05 21:00 ` Junio C Hamano
2025-09-08 6:40 ` Patrick Steinhardt
2025-09-05 14:14 ` [PATCH RFC v2 0/7] Introduce Rust and announce that it will become mandatorty Phillip Wood
2025-09-05 14:28 ` Patrick Steinhardt
2025-09-07 4:31 ` Elijah Newren
2025-09-08 6:44 ` Patrick Steinhardt
2025-09-08 23:00 ` brian m. carlson
2025-09-10 8:21 ` Patrick Steinhardt
2025-09-09 6:33 ` Elijah Newren
2025-09-10 8:21 ` Patrick Steinhardt
2025-09-09 9:12 ` Phillip Wood
2025-09-10 8:21 ` Patrick Steinhardt
2025-09-10 9:32 ` Phillip Wood
2025-09-10 10:49 ` Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 0/8] " Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 1/8] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-08 22:09 ` brian m. carlson
2025-09-09 1:03 ` brian m. carlson
2025-09-10 8:22 ` Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 2/8] Makefile: reorder sources after includes Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 3/8] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 4/8] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 5/8] rust: implement a test balloon via the "varint" subsystem Patrick Steinhardt
2025-09-08 17:19 ` Ezekiel Newren
2025-09-08 22:22 ` brian m. carlson
2025-09-10 8:22 ` Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 6/8] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 7/8] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-08 14:13 ` [PATCH RFC v3 8/8] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-08 14:20 ` [PATCH RFC v3 0/8] Introduce Rust and announce that it will become mandatorty Kristoffer Haugsbakk
2025-09-10 15:35 ` [PATCH RFC v4 0/9] Introduce Rust and announce that it will become mandatory Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 1/9] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-11 21:33 ` brian m. carlson
2025-09-10 15:35 ` [PATCH RFC v4 2/9] Makefile: reorder sources after includes Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 3/9] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 4/9] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 5/9] varint: use explicit width for integers Patrick Steinhardt
2025-09-10 21:04 ` Junio C Hamano
2025-09-10 15:35 ` [PATCH RFC v4 6/9] varint: reimplement as test balloon for Rust Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 7/9] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-10 21:20 ` Junio C Hamano
2025-09-15 10:53 ` Patrick Steinhardt
2025-09-22 16:24 ` Junio C Hamano
2025-09-23 5:32 ` Patrick Steinhardt
2025-09-23 8:53 ` LTS "lieutenant", was " Johannes Schindelin
2025-09-24 13:47 ` Patrick Steinhardt
2025-09-23 14:31 ` Junio C Hamano
2025-09-24 12:53 ` Patrick Steinhardt
2025-09-24 17:43 ` Junio C Hamano
2025-09-10 21:42 ` Kristoffer Haugsbakk
2025-09-15 10:53 ` Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 8/9] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-10 15:35 ` [PATCH RFC v4 9/9] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-11 21:55 ` [PATCH RFC v4 0/9] Introduce Rust and announce that it will become mandatory brian m. carlson
2025-09-15 10:53 ` Patrick Steinhardt
2025-09-12 15:45 ` SZEDER Gábor
2025-09-12 16:32 ` Junio C Hamano
2025-09-15 10:50 ` Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 " Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 1/9] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 2/9] Makefile: reorder sources after includes Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 3/9] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 4/9] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 5/9] varint: use explicit width for integers Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 6/9] varint: reimplement as test balloon for Rust Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 7/9] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-17 22:09 ` SZEDER Gábor
2025-09-18 1:19 ` brian m. carlson
2025-09-22 19:34 ` SZEDER Gábor
2025-09-22 20:59 ` Junio C Hamano
2025-09-22 22:15 ` brian m. carlson
2025-09-22 22:56 ` Junio C Hamano
2025-09-23 1:59 ` Elijah Newren
2025-09-23 4:54 ` Patrick Steinhardt
2025-09-23 14:17 ` Junio C Hamano
2025-09-23 0:43 ` Ezekiel Newren
2025-09-19 13:59 ` Phillip Wood
2025-09-22 13:01 ` Patrick Steinhardt
2025-09-22 14:07 ` Phillip Wood
2025-09-22 14:38 ` Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 8/9] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-15 11:22 ` [PATCH v5 9/9] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-15 17:12 ` [PATCH v5 0/9] Introduce Rust and announce that it will become mandatory Junio C Hamano
2025-09-16 2:03 ` Ezekiel Newren
2025-09-16 10:06 ` Patrick Steinhardt
2025-09-17 12:07 ` Sam James
2025-09-17 17:30 ` Ezekiel Newren
2025-09-16 22:25 ` Ramsay Jones
2025-09-16 23:38 ` Ezekiel Newren
2025-09-17 18:32 ` Ramsay Jones
2025-09-18 3:47 ` Elijah Newren
2025-09-25 1:10 ` Eric Wong [this message]
2025-09-26 22:17 ` what's missing from newer C? [was: [PATCH v5 0/9] Introduce Rust ....] Ezekiel Newren
2025-10-04 1:02 ` Eric Wong
2025-10-06 9:13 ` Pierre-Emmanuel Patry
2025-09-19 18:41 ` [PATCH RFC 0/3] Introduce Rust and announce that it will become mandatorty John Paul Adrian Glaubitz
2025-09-22 13:01 ` Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 0/9] Introduce Rust and announce that it will become mandatory Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 1/9] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 2/9] Makefile: reorder sources after includes Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 3/9] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 4/9] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 5/9] varint: use explicit width for integers Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 6/9] varint: reimplement as test balloon for Rust Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 7/9] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-23 15:29 ` Phillip Wood
2025-09-23 17:29 ` Junio C Hamano
2025-09-24 5:03 ` Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 8/9] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-23 9:45 ` [PATCH v6 9/9] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-23 20:15 ` [PATCH v6 0/9] Introduce Rust and announce that it will become mandatory Ezekiel Newren
2025-09-24 5:02 ` Patrick Steinhardt
2025-09-24 14:34 ` Ezekiel Newren
2025-09-25 6:30 ` [PATCH v7 " Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 1/9] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 2/9] Makefile: reorder sources after includes Patrick Steinhardt
2025-09-25 21:33 ` Ramsay Jones
2025-09-25 6:30 ` [PATCH v7 3/9] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 4/9] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 5/9] varint: use explicit width for integers Patrick Steinhardt
2025-09-30 13:34 ` Kristoffer Haugsbakk
2025-10-01 17:22 ` Ezekiel Newren
2025-10-02 7:30 ` Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 6/9] varint: reimplement as test balloon for Rust Patrick Steinhardt
2025-10-01 17:21 ` Ezekiel Newren
2025-10-01 19:44 ` Junio C Hamano
2025-09-25 6:30 ` [PATCH v7 7/9] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 8/9] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-09-25 6:30 ` [PATCH v7 9/9] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-09-25 16:35 ` [PATCH v7 0/9] Introduce Rust and announce that it will become mandatory Junio C Hamano
2025-10-01 18:43 ` Ezekiel Newren
2025-10-02 7:29 ` [PATCH v8 " Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 1/9] meson: add infrastructure to build internal Rust library Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 2/9] Makefile: reorder sources after includes Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 3/9] Makefile: introduce infrastructure to build internal Rust library Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 4/9] help: report on whether or not Rust is enabled Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 5/9] varint: use explicit width for integers Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 6/9] varint: reimplement as test balloon for Rust Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 7/9] BreakingChanges: announce Rust becoming mandatory Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 8/9] ci: convert "pedantic" job into full build with breaking changes Patrick Steinhardt
2025-10-02 7:29 ` [PATCH v8 9/9] ci: enable Rust for breaking-changes jobs Patrick Steinhardt
2025-10-02 16:38 ` [PATCH v8 0/9] Introduce Rust and announce that it will become mandatory Junio C Hamano
2025-10-07 9:59 ` Patrick Steinhardt
2025-10-02 23:35 ` Ezekiel Newren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250925011043.M401827@dcvr \
--to=e@80x24.org \
--cc=Johannes.Schindelin@gmx.de \
--cc=ben.knoble@gmail.com \
--cc=cb@256bit.org \
--cc=collin.funk1@gmail.com \
--cc=contact@hacktivis.me \
--cc=eschwartz@gentoo.org \
--cc=ezekielnewren@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
--cc=phillip.wood123@gmail.com \
--cc=pierre-emmanuel.patry@embecosm.com \
--cc=ps@pks.im \
--cc=sam@gentoo.org \
--cc=sandals@crustytoothpaste.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).