From: Linus Torvalds <email@example.com> To: Miguel Ojeda <firstname.lastname@example.org> Cc: David Laight <David.Laight@aculab.com>, Tom Tromey <email@example.com>, Alexey Dobriyan <firstname.lastname@example.org>, Luc Van Oostenryck <email@example.com>, Linux Kernel Mailing List <firstname.lastname@example.org>, Andrew Morton <email@example.com>, Sparse Mailing-list <firstname.lastname@example.org> Subject: Re: [PATCH 00/11] pragma once: treewide conversion Date: Sat, 6 Mar 2021 13:33:27 -0800 [thread overview] Message-ID: <CAHk-=wgTWnAZitAYrSD508rxoLtB47p1ntyqYLzVeb=mTQ6tHw@mail.gmail.com> (raw) In-Reply-To: <CANiq72k-_ORGU+tCVhBGnr0QtH4hQ45ayzDtoHND8JZa2jYYPA@mail.gmail.com> On Sat, Mar 6, 2021 at 5:07 AM Miguel Ojeda <email@example.com> wrote: > > Concerning #pragma once: I actually would like to have a standard > #once directive if what is a "seen file" could be defined a bit more > precisely. I think it would be ok if you had something like #pragma once IDTOKEN which would basically act *exactly* as a "#ifndef IDTOKEN/#define IDTOKEN" with that final #endif at the end of the file. But even then it should have the rule that it must be the very first thing in the file (ignoring whitespace and pure comments). Then it would literally be just a cleaner and simpler version of the guarding logic, with none of the semantic confusion that #pragma once now has. Because I cannot see any other way to define what "seen file" really means. There's no sane "implied IDTOKEN" that I can see. It can't really be the pathname, because pathnames are actually really hard to turn into canonical form in user space thanks to things like symlinks. It can't be st_ino/st_dev stat information, because the C preprocessor isn't a "POSIX only" thing. It could be a "Ok, #pragma once only works if you don't have multiple ways to reach the same file, and you never have ambiguous include paths". But that's actually not all that unusual in real projects: you often have fairly complex include paths, you have C files that include the header in the same directory with just "filename.h", but it _could_ get included indirectly from _another_ header that gave a pathname relative to the project root, etc etc. This is not unrelated to another complete morass of horrible problems: precompiled header files. That feature had exactly the same reason for it as "#pragma once" - slow build speeds due to the cost of parsing complex header file hierarchies. And I guarantee that multiple compiler teams spent hundreds of person-years of effort on trying to make it work. And several compilers do support the notion. And they ALL have big warnings about when you should enable it, and when you shouldn't, and what things don't work if you use them, and about how it can cause really really subtle problems. Because it turns out that precompiled header files are a major pain and a major mistake. Some projects still use them, because they can be such a huge timesaver (again: particularly C++ projects that just have a "include everything" approach to headers because trying to separate things out is too hard). But they all come with huge warnings about how they break the actual real semantics of a compiler, and if you do _anything_ to change the build ("hey, I'd like to use a different compiler option"), things may or may not work. Linus
next prev parent reply other threads:[~2021-03-06 21:35 UTC|newest] Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-28 16:57 Alexey Dobriyan 2021-02-28 16:58 ` [PATCH 01/11] pragma once: delete include/linux/atm_suni.h Alexey Dobriyan 2021-02-28 19:05 ` Jakub Kicinski 2021-02-28 16:59 ` [PATCH 02/11] pragma once: convert arch/arm/tools/gen-mach-types Alexey Dobriyan 2021-03-01 10:19 ` Russell King - ARM Linux admin 2021-03-02 15:15 ` Alexey Dobriyan 2021-02-28 16:59 ` [PATCH 03/11] pragma once: convert arch/s390/tools/gen_facilities.c Alexey Dobriyan 2021-02-28 17:00 ` [PATCH 04/11] pragma once: convert drivers/gpu/drm/pl111/pl111_nomadik.h Alexey Dobriyan 2021-03-01 14:41 ` Linus Walleij 2021-02-28 17:01 ` [PATCH 05/11] pragma once: convert drivers/scsi/qla2xxx/qla_target.h Alexey Dobriyan 2021-02-28 22:07 ` Bart Van Assche 2021-02-28 17:02 ` [PATCH 06/11] pragma once: convert include/linux/cb710.h Alexey Dobriyan 2021-03-03 23:13 ` Michał Mirosław 2021-02-28 17:02 ` [PATCH 07/11] pragma once: convert kernel/time/timeconst.bc Alexey Dobriyan 2021-02-28 17:03 ` [PATCH 08/11] pragma once: convert scripts/atomic/ Alexey Dobriyan 2021-03-01 7:55 ` Peter Zijlstra 2021-02-28 17:04 ` [PATCH 09/11] pragma once: convert scripts/selinux/genheaders/genheaders.c Alexey Dobriyan 2021-02-28 18:37 ` Paul Moore 2021-02-28 18:57 ` Alexey Dobriyan 2021-02-28 17:05 ` [PATCH 10/11] pragma once: delete few backslashes Alexey Dobriyan 2021-03-01 8:54 ` Ido Schimmel 2021-03-02 19:00 ` Vineet Gupta 2021-03-04 14:22 ` Edward Cree 2021-03-23 10:09 ` Pavel Machek 2021-02-28 17:05 ` [PATCH 11/11] pragma once: conversion script (in Python 2) Alexey Dobriyan 2021-02-28 17:11 ` [PATCH 12/11] pragma once: scripted treewide conversion Alexey Dobriyan 2021-03-01 17:35 ` Darrick J. Wong 2021-02-28 17:46 ` [PATCH 00/11] pragma once: " Linus Torvalds 2021-02-28 19:34 ` Alexey Dobriyan 2021-02-28 20:00 ` Linus Torvalds [not found] ` <firstname.lastname@example.org> 2021-03-03 20:17 ` Linus Torvalds 2021-03-04 13:55 ` David Laight 2021-03-04 20:16 ` Linus Torvalds 2021-03-05 9:19 ` David Laight 2021-03-05 21:23 ` Linus Torvalds 2021-03-06 13:07 ` Miguel Ojeda 2021-03-06 21:33 ` Linus Torvalds [this message] 2021-03-23 10:03 ` Pavel Machek 2021-03-01 0:29 ` Luc Van Oostenryck
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to='CAHk-=wgTWnAZitAYrSD508rxoLtB47p1ntyqYLzVeb=mTQ6tHw@mail.gmail.com' \ --email@example.com \ --cc=David.Laight@aculab.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --email@example.com \ --firstname.lastname@example.org \ --subject='Re: [PATCH 00/11] pragma once: treewide conversion' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).