Re: Cannot find a working 64-bit integer type on Illumos
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Heikki Linnakangas <hlinnaka@iki.fi>
Cc: Peter Eisentraut <peter@eisentraut.org>, Tom Lane <tgl@sss.pgh.pa.us>, Japin Li <japinli@hotmail.com>, Andres Freund <andres@anarazel.de>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2024-07-04T02:55:59Z
Lists: pgsql-hackers
Attachments
- tzcode.diff.diff.txt (text/plain)
- v3-0001-Use-int64_t-support-from-stdint.h.patch (text/x-patch) patch v3-0001
- v3-0002-Remove-traces-of-BeOS.patch (text/x-patch) patch v3-0002
- v3-0003-Allow-tzcode-to-use-stdint.h-and-inttypes.h.patch (text/x-patch) patch v3-0003
On Wed, Jul 3, 2024 at 1:34 AM Heikki Linnakangas <hlinnaka@iki.fi> wrote: > On 18/04/2024 23:29, Thomas Munro wrote: > > On Thu, Apr 18, 2024 at 8:47 PM Peter Eisentraut <peter@eisentraut.org> wrote: > >> I'm not sure I understand the problem here. Do you mean that in theory > >> a platform's PRId64 could be something other than "l" or "ll"? > > > > Yes. I don't know why anyone would do that, and the systems I checked > > all have the obvious definitions, eg "ld", "lld" etc. Perhaps it's an > > acceptable risk? It certainly gives us a tidier result. > > Could we have a configure check or static assertion for that? Unfortunately, that theory turned out to be wrong. The usual suspect, Windows, uses something else: "I64" or something like that. We could teach our snprintf to grok that, but I don't like the idea anymore. So let's go back to INT64_MODIFIER, with just a small amount of configure time work to pick the right value. I couldn't figure out any header-only way to do that. > Personally, I find "PRId64" pretty unreadable. "INT64_MODIFIER" wasn't > nice either, though, and following standards is good, so I'm sure I'll > get used to it. Yeah, I like standards a lot but we've painted ourselves into a corner here... New version attached. This time I was brave enough to try to tackle src/timezone too, which had comments planning to drop a lot of small differences against the upstream tzcode once all supported branches required C99. I suppose that should make future maintenance easier, and C89 disappeared from our window of interest with PostgreSQL 11. It's a little hard to understand what changed, but to try to show it better I diff'd master against upstream (after filtering through sed and pgindent as recommended by README), and then diff'd patched against upstream, and then ... ehm.. diff'd the two diffs, so that you can see there are some hunks that go away. IMHO it's a rather scary choice on tzcode's part to use int_fastN_t, and hard for us to verify that it works correctly especially when combined with our changes, but on the other hand I don't really expect any system that PostgreSQL can run on to have "fast" types that really differ from the "exact width" types. My understanding is that this is something of interest to historical supercomputers and microcontrollers, but I can't find any evidence of general purpose/commodity systems that we target using different sizes (anyone know better?).
Commits
-
Move pg_int64 back to postgres_ext.h
- e56a601e0678 19 (unreleased) landed
- 409543da5411 18.0 landed
-
pgbench: Make set_random_seed() 64-bit everywhere.
- 53a2a1564ae4 18.0 landed
-
Use PRI?64 instead of "ll?" in format strings (continued).
- a0ed19e0a9ef 18.0 landed
-
Fix order of -I switches for building pg_regress.o.
- f186f90e55b7 17.5 landed
- cb36f8ec2124 18.0 landed
-
libpq: Deprecate pg_int64.
- 3c86223c9982 18.0 landed
-
Use PRI*64 instead of "ll*" in format strings (minimal trial)
- 15a79c73111f 18.0 landed
-
Fix header inclusion order in c.h.
- 71cb352904c1 18.0 landed
-
Use <stdint.h> and <inttypes.h> for c.h integers.
- 962da900ac8f 18.0 landed
-
Remove traces of BeOS.
- a2d9a9b95ad9 18.0 landed
-
More correct way to check for existence of types, which allows to specify
- 15abc7788e66 7.2.1 cited