Adding Modules to C in 10 Lines of Code

Walter Bright newshound2 at digitalmars.com
Sat Jun 4 07:40:36 UTC 2022


On 5/29/2022 11:13 PM, Paulo Pinto wrote:
> Stepstone did it for Objective-C with #import,

Not the same as C doing the importing of C code.

> and Apple with module maps for C 
> and Objective-C, the modules design that preceeded C++ modules on clang.
> 
> Then we have those failed attempts at fixing C like SafeC.
> 
> And if we count research work, Bjarne Stroustoup and Gabriel dos Reis, did it 
> back when they were teaching in Texas university, here is the 2009 paper,
> 
> "A Principled, Complete, and Efficient Representation of C++"
> 
> https://www.stroustrup.com/gdr-bs-macis09.pdf

Going around the horn, really doing it the hard way. Besides, writing a paper is 
not the same thing as implementing a working system. There were many proposals 
about adding modules to C, they just all went nowhere.


> Both Visual Age for C++ v0.4 and Lucid's Energize C++ did 40 years ago, by 
> serializing C++ code into database representation, both failed due to high 
> hardware requirements for late 80's/early 90's PCs.

Yee gods, doing it with a database representation is certainly going around the 
horn.

Note that neither D nor ImportC rely on some database or symbol table file.


> Lucid Energize Demo in 1993
> 
> https://www.youtube.com/watch?v=pQQTScuApWk
> 
> Its database system, Cadillac,
> 
> "Foundation for a C++ Programming Environment"
> 
> https://dreamsongs.com/Files/Energize.pdf
> 
> Visual Age for C++ v4,
> 
> http://www.edm2.com/0704/vacpp4/vacpp4.html
> 
>> The build environment is totally different from traditional compilers. The 
>> concept of header files and source code files is obsolete. VAC++ utilizes a 
>> global approach to definitions and implementations. That is, once a definition 
>> is processed it stays in memory for the duration of the build. To maintain 
>> compatibility, header files can still be #included. This new approach to 
>> handling source code is disorienting at first and will make migrating existing 
>> code to the compiler somewhat difficult. Errors pertaining to objects being 
>> defined more than once will likely occur while migrating. Often these errors 
>> are incorrect. The work around is to remove the #include line in the source 
>> file that contains the offending “redefinition”.
> 
> https://books.google.de/books?id=ZwHxz0UaB54C&pg=PA206&redir_esc=y#v=onepage&q&f=false 
> 
> 
> Additionally the way pre-compiled headers work on C++ Builder and Visual C++, 
> versus the UNIX way, meant that on Windows the reward of the action did not 
> outweigh the costs incurred, and ironically Visual C++ is the one leading the 
> C++ modules support anyway, thanks to Gabriel dos Reis being part of the team, 
> and pinging back on those 2009 learnings.

Precompiled headers for C and C++ were certainly a module-like system (I know 
because I wrote one), but they are horrific kludges.



More information about the Digitalmars-d-announce mailing list