Date: Fri, 18 Jun 2021 18:00:57 +0000
* but you cannot discover the graph with a simple lexer
Yes, and I have not found that to be an actual problem in practice. In fact there is really nothing new here (other than recognizing the ‘import’ directives and friends) in the non-module world: the ol’ C and C++ standards allow
#include HEADER
where HEADER comes from macro expansions and all the other stuff that you mention about inability to use “simple lexer”, conditional inclusion, etc. As a PSA, I would like to disabuse anyone who ever thought that grep was sufficient to compute dependency of C or C++ source files pre-C++20.
Maybe it is my dinosaurus status showing bleeding out here but are we rehashing the same arguments from the past?
The one thing we can do for the community is to have a library readily available to anyone who ever thought that a simple lexer is sufficient to compute C++ source file dependency. That would be a major step forward.
-- Gaby
From: Daniel Ruoso <daniel_at_[hidden]>
Sent: Friday, June 18, 2021 10:30 AM
To: Gabriel Dos Reis <gdr_at_microsoft.com>
Cc: sg15_at_[hidden]; David Blaikie <dblaikie_at_[hidden]>
Subject: Re: [SG15] Draft: Requirements for Usage of C++ Modules at Bloomberg
On Fri, Jun 18, 2021 at 1:20 PM Gabriel Dos Reis <gdr_at_[hidden]<mailto:gdr_at_[hidden]>> wrote:
Also notice that while a dependency scanner needs to chase #included or imported files (via the appropriate implementation-defined mapping), it actually does not need to fully preprocess the source code found therein;
the spec has been carefully crafted to that effect.
It doesn't need to preprocess the complete file, but it needs to significantly preprocess the early sections of the file. While the spec has carefully prevented conditional specification of the keywords, it still allows macros to be used, which requires support for conditional evaluation, variable expansion, and string concatenation.
In other words, the only optimization granted by the standard today is on the discovery of whether or not a source file needs to participate on the construction of the DAG for processing modules, but you cannot discover the graph with a simple lexer, you need the full expression evaluation logic of the preprocessor.
daniel
Yes, and I have not found that to be an actual problem in practice. In fact there is really nothing new here (other than recognizing the ‘import’ directives and friends) in the non-module world: the ol’ C and C++ standards allow
#include HEADER
where HEADER comes from macro expansions and all the other stuff that you mention about inability to use “simple lexer”, conditional inclusion, etc. As a PSA, I would like to disabuse anyone who ever thought that grep was sufficient to compute dependency of C or C++ source files pre-C++20.
Maybe it is my dinosaurus status showing bleeding out here but are we rehashing the same arguments from the past?
The one thing we can do for the community is to have a library readily available to anyone who ever thought that a simple lexer is sufficient to compute C++ source file dependency. That would be a major step forward.
-- Gaby
From: Daniel Ruoso <daniel_at_[hidden]>
Sent: Friday, June 18, 2021 10:30 AM
To: Gabriel Dos Reis <gdr_at_microsoft.com>
Cc: sg15_at_[hidden]; David Blaikie <dblaikie_at_[hidden]>
Subject: Re: [SG15] Draft: Requirements for Usage of C++ Modules at Bloomberg
On Fri, Jun 18, 2021 at 1:20 PM Gabriel Dos Reis <gdr_at_[hidden]<mailto:gdr_at_[hidden]>> wrote:
Also notice that while a dependency scanner needs to chase #included or imported files (via the appropriate implementation-defined mapping), it actually does not need to fully preprocess the source code found therein;
the spec has been carefully crafted to that effect.
It doesn't need to preprocess the complete file, but it needs to significantly preprocess the early sections of the file. While the spec has carefully prevented conditional specification of the keywords, it still allows macros to be used, which requires support for conditional evaluation, variable expansion, and string concatenation.
In other words, the only optimization granted by the standard today is on the discovery of whether or not a source file needs to participate on the construction of the DAG for processing modules, but you cannot discover the graph with a simple lexer, you need the full expression evaluation logic of the preprocessor.
daniel
Received on 2021-06-18 13:01:06