Tom Lane wrote:I know that no promises has been made but PostgreSQL is improved every day and this would be a very easy promise to make.Furthermore, we have never promised ABI-level compatibility across versions inside the backend, and we are quite unlikely to make such a promise in the foreseeable future.
Binary compatibility of backend APIs is by no means a "very easy promise to make," nor would it be a good idea in any case.
Also, the interpretation of the definition vary between compiler vendors. On Windows Itanium, the int is 32 bit. On Unix it's 64.
`int' is 32 bit on most modern platforms I can think of. Perhaps you're thinking of `long', which is indeed 64-bit on many 64-bit Unixen but 32-bit on 64-bit Windows (BTW, this likely means that Postgres is completely broken on 64-bit Windows: sizeof(Datum) == sizeof(unsigned long) == 4, sizeof(void *) == 8).
The 1998 revision of C declares the following types for a good reason:
int8_t , int16_t, int32_t int64_t, uint8_t, uint16_t, uint32_t, uint64_t.
We don't currently depend on C99, and not all platforms have a 64-bit datatype. In any case, I'm still unconvinced that using `int' and `long' in backend APIs is a problem.
-Neil
---------------------------(end of broadcast)--------------------------- TIP 7: don't forget to increase your free space map settings