git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Ben Knoble <ben.knoble@gmail.com>
Cc: Patrick Steinhardt <ps@pks.im>,
	 git@vger.kernel.org,
	 "Haelwenn (lanodan) Monnier" <contact@hacktivis.me>,
	 "brian m. carlson" <sandals@crustytoothpaste.net>,
	 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>,
	 Phillip Wood <phillip.wood123@gmail.com>,
	Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>,
	 Sam James <sam@gentoo.org>,  Taylor Blau <me@ttaylorr.com>
Subject: Re: [PATCH RFC 2/3] rust: implement a test balloon via the "varint" subsystem
Date: Sun, 07 Sep 2025 21:39:08 -0700	[thread overview]
Message-ID: <xmqq8qipzhg3.fsf@gitster.g> (raw)
In-Reply-To: <8A7DBC60-286A-48FE-A3D3-CAFC11FD3AEA@gmail.com> (Ben Knoble's message of "Sun, 7 Sep 2025 16:07:17 -0400")

Ben Knoble <ben.knoble@gmail.com> writes:

>> +#[no_mangle]
>> +pub unsafe extern "C" fn decode_varint(bufp: *mut *const c_uchar) -> usize {
>> +    let mut buf = *bufp;
>> +    let mut c = *buf;
>> +    let mut val = usize::from(c & 127);
>> +
>> +    buf = buf.add(1);
>> +
>> +    while (c & 128) != 0 {
>> +        val += 1;
>> +        if val == 0 || val.leading_zeros() < 7 {
>> +            return 0; // overflow
>
> Hm. I thought overflows panic in debug builds, in which case
> checking afterwards is too late? Does unsafe change that?

This code is a very faithful conversion from C so if somebody does
not read Rust well, they can safely refer to the original in C.

In either variant, the leading zero's check asks "can we shift val
by 7 bits to the left?" _before_ it actually shifts val (and or'es
in the lower bits of c), so the "overflow" check is "if we processed
any more data we _would_ overflow, so we stop before overflowing".

IOW, the code _is_ avoiding the "too late" condition.

This is a tangent, but as many people pointed out, calling this a
test balloon is misreading.  This is quite different from what we
traditionally called a test balloon, where 

 - we were already fairly sure that the construct is safe, but
   wanted to be extra careful to smoke out anybody who has trouble
   with it;

 - hence we use the construct in question in a place where nobody
   can compile it out, hoping that anybody with a system incapable
   of handling the construct in question would be broken badly,
   reporting the breakage to us;

 - this is done with an understanding that even a single "the
   compiler on this this platform with more than dozen thousands
   users cannot groke it" would automatically stop us, causing us to
   revert that test balloon code for _everybody_, refraining from
   using that construct for _everybody_ until the situation changes.

This thing is different at all points.  We are not "fairlu sure that
Rust is safe to use for everybody"  Far from it.  We are confident
that requiring Rust would break known people.  We are doing this not
because we intend to stop once we know of folks who would be broken.
Far from it.

It would really be nice to find a niche that can be a new optional
feature that is not essential to the functioning of the system
implemented in an already modularized part of the system (e.g., an
optional merge strategy, diff algorithm, built-in textconv filter, a
new ref backend, etc.).  Then we can introduce Rust, knowing that
some Rust-challenged systems will not be able to use these optional
features.  What Brian mentioned about two-hash interop feature,
being only available on Rust-capable systems, could be such an
optional feature, and if it can be done that way, that would be very
welcome.  If we can have Rust goodness soon enough without making it
mandatory in too short a timeframe, that would be ideal.

I already said that I find 6 months advance notice to folks on
Rust-challenged systems is way too short to be any good.  If the
only reason we give advance notice is because we want to make an
excuse of cutting them off sooner while being able to say that we
gave them advance notice, that may be sufficient.  But if we truly
want to help them by giving enough time to them so that they can
help their platform themselves, by lobbying, fundraising, or
otherwise campaigning to have usable Rust on their system, I really
do not think it is sufficient.

Thanks.

  reply	other threads:[~2025-09-08  4:39 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 [this message]
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   ` what's missing from newer C? [was: [PATCH v5 0/9] Introduce Rust ....] Eric Wong
2025-09-26 22:17     ` 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=xmqq8qipzhg3.fsf@gitster.g \
    --to=gitster@pobox.com \
    --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=johannes.schindelin@gmx.de \
    --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).