Re: get rid of Pointer type, mostly

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robert Haas <robertmhaas@gmail.com>
Cc: Peter Eisentraut <peter@eisentraut.org>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2025-11-24T16:33:57Z
Lists: pgsql-hackers

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Remove no longer needed casts from Pointer

  2. Remove no longer needed casts to Pointer

  3. Change Pointer to void *

  4. Don't rely on pointer arithmetic with Pointer type

  5. Use more appropriate DatumGet* function

  6. Remove useless casts to Pointer

Robert Haas <robertmhaas@gmail.com> writes:
> On Mon, Nov 24, 2025 at 11:09 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>>> The second is getting rid of uses of Pointer for variables where you
>>> might as well use void * directly.  These are actually not that many.

>> ... but not of that.  In particular, I think it's just fine if
>> DatumGetPointer and PointerGetDatum take and return Pointer.

> What's your objection?

We have lots of places where we use trivial typedefs to annotate
what something is.  For instance "text *" is not really different
from "struct varlena *", but I don't think anyone would be in favor
of removing the "text" typedef.  In this case we have decades of
practice using Pointer to annotate something as being a generic
pointer.  I'm in favor of switching it to be "void *" to conform
more closely to modern C semantics, but not of just trying to get
rid of it.  Especially so if the removal is incomplete.  What have
you really accomplished then?

> (I don't have a considered opinion on this particular point, but in
> general I've found that using Pointer seems to make life worse rather
> than better.)

How much of that comes from "char *" versus "void *"?

			regards, tom lane