Re: The goal of the Linux man-pages project
Arsen Arsenović <[email protected]> Wed, 05 Aug 2026 11:31:11 +0200
| Newsgroups | gmane.comp.lib.gnulib.bugs,gmane.linux.man,gmane.comp.lib.glibc.alpha |
|---|---|
| Message-ID | <[email protected]> |
--=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi Alex, Alejandro Colomar <[email protected]> writes: >> > man/man3/: Put first <string.h> in SYNOPSIS, then comment about <m= emory.h> >> >=20=20=20=20=20 >> > This is a compromise between the fact that <string.h> is the stand= ard >> > header and (only slightly) most portable header file for these >> > functions, while hinting at the fact that it might be more appropr= iate >> > to use <memory.h> where possible. >> >=20=20=20=20=20 >> > Remove the STANDARDS and NOTES about this, since now the SYNOPSIS >> > contains all the necessary information. The extra info is in >> > memory.h(3head), which is linked to in the SYNOPSIS. >> > >> > What do you think? >>=20 >> Why, though? > > To help guide programmers to understand these APIs, and consequentially > be able to write better code. That's the goal of this project. It's > the Linux Programmer's Manual, and its purpose is that programmers on > a Linux system are able to write correct programs. First of, this doesn't answer the question I asked. Why should this change, even the "compromise", be done? But, ignoring that this doesn't answer the question posed, how exactly is hinting that it's "more appropriate to use <memory.h> where possible" accomplishing the goals of the project you've stated there? It seems to me to just sow confusion. I think the references to <memory.h> should be confined to a single page that documents what it is, memory.h(3head) or whatever, which should be honest and say only: <memory.h> is an obsolete header. It exists for compatibility with older programs, and is implemented as an alias of <string.h>. This makes it clear that the header is never useful, and that it's strictly redundant with <string.h>, in a way that still lets someone reading old code discover it. The latter, of course, being much more widely used, and standardized. The former being used only to placate pre-standard programs. It seems to me that your intent was also to standardize memory.h. In this I also see no benefit. string.h can't be split at this point, nor can the real memory.h installed by libcs be shrunk by removing str* from it. I'll skip the rest of the philosophizing about the purpose of the man-pages project, but I will add that if the Linux man-pages project starts diverging from harmless standard practice to promote idiosyncrasies, I'll have no choice but to caution against relying on it. >> I think that, in the thread, it was already demonstrated (by Bionic >> having an empty memory.h for a time) that nobody includes <memory.h> on >> its own and expects to see these functions. > > This is part of 'factual information', which is only a secondary goal > of this documentation project, as stated above. > > The purpose of this change is to help form a mental model of how these > memory and string functions relate to each other, and how they behave. The mental model is certainly not helped by prominently featuring a long-dead headers which may (or may not! as seen above) contain declarations from <string.h> (which is a header you consequently have to include anyway). >> (not that Bionic is that >> widely-used; a better test would be checking something like Debian >> codesearch) >>=20 >> As I've noted before, what header provides what declaration is also >> largely inconsequential. > > If it is largely inconsequential, I expect this change shouldn't be as > controversial as it seemed to be. It is largely inconsequential how a declaration is obtained from the perspective of a programmer for reasons I've stated before. The act of *documenting* a long dead non-standard header as a header that provides some function has a consequence, that consequence being that now a long-dead non-standard header gets included far more frequently. This means that its only effect is a detriment. I think it's a far better idea to start emitting a warning when it is included, to indicate that it's an obsolete non-standard header. >> So, the only effect of this can be to create new cases where <memory.h> >> is included, for no gain. > > I don't agree with the 'for no gain' claim. But yes, the first part of > the sentence is certainly true. There is no gain, the programmer can't tell where a declaration comes from, and this include is strictly redundant with string.h even on all the various Linux systems. >> It doesn't really matter that memory.h is only slightly less portable, >> IMO. It is unused, to the point where Autoconf recommends not using it, >> and no longer bothers checking whether 'mem*' functions are also present >> in string.h. > > It doesn't really matter that it is unused. What matters is that it can > be used just fine, [...] Can it? I don't accept that premise. It's a non-standard header. > [...] and will help --IMO-- understand these functions better. I don't accept that either: I see no way in which understanding benefits from this change. >> Is suddenly reviving a dead header to copy a few declarations of >> functions well known to be part of string.h into it not just unneeded >> churn? Especially as program code would (nearly?) always need to do: >>=20 >> #include <string.h> >> #ifdef HAVE_MEMORY_H >> # include <memory.h> >> #endif > > Are there any systems without <memory.h>? We've been seeing in this > thread that most systems have it. Even Microsoft has it. I bet most > programs can live without that conditional. > > I'd say most programs would be portable enough with this: > > #include <string.h> > #include <memory.h> And even more of them can live with: #include <string.h> That said, I imagine that many systems do have it. After all, it is quite cheap to run the following during an install step: echo '#include <string.h>' > $(DESTDIR)$(includedir)/memory.h ... but, I also would not fault a system for not having it. We could check what systems have it and whether any do anything besides including string.h. Or we could just avoid prominently featuring a long-dead non-standard header. =2D-=20 Arsen Arsenovi=C4=87 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQECBAEWCgCqFiEE/uKz0RP8AKMWLWBhUsKUMB6ixJMFAmpzAt8bFIAAAAAABAAO bWFudTIsMi41KzEuMTIsMiwyXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25z Lm9wZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRGRUUyQjNEMTEzRkMwMEEzMTYyRDYw NjE1MkMyOTQzMDFFQTJDNDkzEBxhcnNlbkBhYXJzZW4ubWUACgkQUsKUMB6ixJO2 awEAtZy4AJ2a0RPxNYHaBnvLLqIBfaFDK0YhF+YJICTe34UA/imv1HB4K3J11JXG jFVkYaOXmtoi9R2EaC2dHvaUuRgI =bhgf -----END PGP SIGNATURE----- --=-=-=--