All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 6/6] reftable: introduce "reftable-system.h" header
Date: Wed, 01 Apr 2026 09:37:11 -0700	[thread overview]
Message-ID: <xmqqse9ewsaw.fsf@gitster.g> (raw)
In-Reply-To: <ac0MDTQR484_yxuv@pks.im> (Patrick Steinhardt's message of "Wed, 1 Apr 2026 14:14:05 +0200")

Patrick Steinhardt <ps@pks.im> writes:

> It overall is a tiny bit confusing, agreed. The reftable interfaces are
> split into two parts:
>
>   - "reftable/foo.h" contains the library-internal API surface.
>
>   - "reftable/reftable-foo.h" contains the external API surface as it
>     should be consumed by the project that embeds the reftable library.
>
> Now for most of the part, headers in the "reftable/reftable-*.h"
> namespace are self-contained. But naturally, we also use some types
> there that require us to include headers, like `uint32_t` et al.
> The requirements that we have here are significantly smaller though than
> what we expose via "reftable/system.h".
>
> So ultimately, the idea was to have "reftable/reftable-system.h" expose
> the POSIX-like environment that is project-specific to make the other
> public headers compile as standalone units. And then have the
> implementeation sit in "reftable/system.c". But I agree that
> "reftable/system.h" itself still sits somewhere in between of being
> platform specific and containing project-specific stuff, which isn't
> great.
>
> I'm overall not a 100% happy myself with the split and agree that it's
> somewhat confusing. An alternative would be to say that it's the
> caller's responsibility to ensure that our public-facing headers have
> all dependencies satisfied, which I think is in practice only <stdint.h>.
>
> I'm very open to alternative suggestions though.

So your assessment starts as "tiny bit" and in the end ends ujp with
"somewhat" confusing ;-)?

I am OK with two level:

 - A C source file that will be customized for platform and the
   project that embeds the library to implement a neutral interface.

 - A C header file that defines what that neutral interface looks
   like, without having any platform/project specific implementation
   details.

But that header file, in order to define an interface in a neutral
way, would need to be able to see common types and things like
"inline", so it is inevitable to have the third thing that is a
header file that will be customzed for platform and the project that
embeds the library.

And in that context making reftable/system.c in this series the C
source that implements the neutral API for the platform and the
project, reftable/system.h the C header that declares the neutral
API, and reftable-system.h the platform specific shim to show a
common definition to reftable/system.h, may be a good division of
labor.  So, while I found the _naming_ confusing initially, at least
between reftable/system.[ch], I no longer see the naming of the
files a problem.

The division of labor is not quite honored in the current
implementation, though, as I pointed out that just like MINGW
specific things that are moved out of reftable/system.h and to the
reftable-system.h, other things like inline and compat/zlib-compat.h
are quite specific to our project and belong to reftable-system.h at
the layer that exposes a certain system services to reftable/system.h
and other "more common" parts of the library.


  reply	other threads:[~2026-04-01 16:37 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-31 11:26 [PATCH 0/6] reftable: some more portability improvements Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 1/6] reftable/system: provide `REFTABLE_INLINE()` macro Patrick Steinhardt
2026-03-31 18:03   ` Junio C Hamano
2026-03-31 21:12   ` René Scharfe
2026-03-31 21:23     ` Junio C Hamano
2026-03-31 22:15       ` René Scharfe
2026-03-31 22:08   ` brian m. carlson
2026-04-01 12:13     ` Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 2/6] reftable/stack: don't call fsync(3p) unless provided Patrick Steinhardt
2026-03-31 18:09   ` Junio C Hamano
2026-04-01 12:13     ` Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 3/6] reftable/fsck: use REFTABLE_UNUSED instead of UNUSED Patrick Steinhardt
2026-03-31 18:12   ` Junio C Hamano
2026-03-31 11:26 ` [PATCH 4/6] reftable/system: add abstraction to retrieve time in milliseconds Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 5/6] reftable/system: add abstraction to mmap files Patrick Steinhardt
2026-03-31 11:26 ` [PATCH 6/6] reftable: introduce "reftable-system.h" header Patrick Steinhardt
2026-03-31 18:26   ` Junio C Hamano
2026-04-01 12:14     ` Patrick Steinhardt
2026-04-01 16:37       ` Junio C Hamano [this message]
2026-04-02  6:16         ` Patrick Steinhardt
2026-04-02  7:31 ` [PATCH v2 0/5] reftable: some more portability improvements Patrick Steinhardt
2026-04-02  7:31   ` [PATCH v2 1/5] reftable: introduce "reftable-system.h" header Patrick Steinhardt
2026-04-02  7:31   ` [PATCH v2 2/5] reftable/stack: provide fsync(3p) via system header Patrick Steinhardt
2026-04-02 18:03     ` Junio C Hamano
2026-04-02  7:31   ` [PATCH v2 3/5] reftable/fsck: use REFTABLE_UNUSED instead of UNUSED Patrick Steinhardt
2026-04-02  7:31   ` [PATCH v2 4/5] reftable/system: add abstraction to retrieve time in milliseconds Patrick Steinhardt
2026-04-02 18:27     ` Junio C Hamano
2026-04-02  7:31   ` [PATCH v2 5/5] reftable/system: add abstraction to mmap files Patrick Steinhardt

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=xmqqse9ewsaw.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=ps@pks.im \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.