Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ilyakurdyukov 64-bit compilation concerns #1675

Open
nothings opened this issue Aug 21, 2024 · 3 comments
Open

ilyakurdyukov 64-bit compilation concerns #1675

nothings opened this issue Aug 21, 2024 · 3 comments

Comments

@nothings
Copy link
Owner

Originally posted by @ilyakurdyukov in #1610 (comment):

This is insane. Whitelisting 64-bit architectures in 2024 should be considered a serious crime against portability. In times when most architectures are 64-bit. How many years have compilers had predefined macros like these?

#define _LP64 1
#define __LP64__ 1
#define __INTPTR_WIDTH__ 64

And this whitelisting nonsense only for the uintptr, which has been available in stdint.h since C99, for 25 years!

And yet, people who can't find their architecture on the list ask to add it. They don't ask to fix this trashfire once and for all.

I wanted to create a bug about this, but judging by the number of open and unanswered issues and PRs, it looks like this project is closer to abandonware than to anything else.

@nothings
Copy link
Owner Author

nothings commented Aug 21, 2024

@ilyakurdyukov

stb libraries support pre-C99 compilers. it would certainly be possible to only test for the pre-C99 compilers, handle those cases, and rely on stdint.h for everything else, but it's not clear off the bat which compilers would break if you did that, so relying on _LP64, __LP64__, or __INTPTR_WIDTH__ would be better, but of course that requires knowing if there are 64-bit platforms that don't define any of those and handling those cases, so it's probably still going to be a bit whack-a-mole, and the changeover is just going to break a ton of compilers, so this falls in that category of 'sucks, but more work to fix than is likely to be saved'. Possibly new libraries should do this though, but there are unlikely to be many of those as there are already too many.

To your general comments:

There are lots of unmerged PRs because releases are only done infrequently, on the order of once or twice a year.

There are plenty of open issues because they generally need more discussion or because they represent real issues that need to be addressed somehow. They are typically not "unanswered" (though some issues may slip through the cracks and be in that state; if so, they should be re-awoken from their slumber).

This is free software and we generally try to do our best to make it useful to people, but it may not be useful to everyone, for example people using compilers not supported by the "whitelist". That's not the end of the world if it's still useful to some people.

This software is supported through unpaid labor from, in part, burnt-out programmers who already barely have any energy to spend on fixing bugs. If we reply to unhelpful comments that just sucks up more of the energy and means it will be that much longer until the next release. So, y'know, maybe don't be a dick about it.

@nothings nothings changed the title ilyakuryukov 64-bit compilation concerns ilyakurdyukov 64-bit compilation concerns Aug 21, 2024
@ilyakurdyukov
Copy link

I thought I was conservative because I reject C++ and C99 is enough for me. But there are people who reject even C99.

but of course that requires knowing if there are 64-bit platforms that don't define any of those and handling those cases

Not platforms, but some legacy compilers, meanwhile new 64-bit architectures are created every few years. But legacy compilers will not appear anymore.

This whitelist is also incorrect because for 64-bit architectures there are modes with 32-bit pointers, for example -mx32 for x86_64. In this mode, compilers set the macros __ILP32__ and _ILP32.

@ilyakurdyukov
Copy link

Compiler developers have given people many ways to write portable software. Even if you want to maintain compatibility with pre-C99 compilers, the availability of C99 can be detected by another macro. For example:

#ifndef stbsp__uintptr
#if __STDC_VERSION__ >= 199901L
#include <stdint.h>
#define stbsp__uintptr uintptr_t
#elif defined(__UINTPTR_TYPE__)
#define stbsp__uintptr __UINTPTR_TYPE__
#elif (defined(_M_X64) /* list of macros for legacy compilers here */ || defined(__LP64__) || defined(_LP64) || __INTPTR_WIDTH__ == 64) && !(defined(__ILP32__) || defined(_ILP32) || __INTPTR_WIDTH__ == 32)
#define stbsp__uintptr stbsp__uint64
#else
#define stbsp__uintptr stbsp__uint32
#endif
#endif 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants