Thread (1 message) 1 message, 1 author, 2025-09-22

Re: [PATCH v2 00/18] Introduce rust: In xdiff

From: Junio C Hamano <hidden>
Date: 2025-09-22 18:12:35

Ezekiel Newren [off-list ref] writes:
If a field in a
struct uses u16 as the name then Rust won't compile, and cbindgen
can't create the C header file.
Do you mean that cbindgen fails to help us make a C code we have
that says "struct { uint16_t u16; }" to work with Rust?

Declaring "typedef uint16_t u16" would not help such a case at all,
as it would not make "struct { u16 u16; }" an invalid C, and would
not force us to avoid such names that cbindgen may have problems
with.

So regardless of what to do with type names, we would need to adjust
some variable names to avoid clashes with Rust, which I am fine with.
Using [ui](8|16|32|64|size) as the type in C also spreads
awareness that those are reserved keywords and should not be used
as variable names.
We certainly need to train our developers to avoid problematic names
like "u16" just like we do so for "new".

I am skeptical that using u16 as a type would have a good chance to
contribute to that effort (otherwise we would have added "new" as a
type to solve this issue already), but I am willing to be talked
into trying, with a few conditions to prevent unnecessary churning,
i.e. We do "typedef uint16_t u16" and friends, and new and old code
that are written to directly interact with Rust written code would
be better written with u16 and friends, so the same thing is called
similarly across the wall, but we want to avoid replacing uint16_t
with u16 blindly.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help