Deutsch   English   Français   Italiano  
<vh323k$2cgju$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder2.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Lynn McGuire <lynnmcguire5@gmail.com>
Newsgroups: comp.lang.fortran
Subject: Re: in gfortran, is it faster compile times with *.mod files ?
Date: Wed, 13 Nov 2024 14:27:32 -0600
Organization: A noiseless patient Spider
Lines: 101
Message-ID: <vh323k$2cgju$1@dont-email.me>
References: <vgtt3v$169sh$1@dont-email.me> <vgturv$16fp9$1@dont-email.me>
 <vgu2rb$16rop$2@dont-email.me> <vgv213$1g931$1@dont-email.me>
 <vh0chn$1oq8f$1@dont-email.me> <vh0fji$1par2$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 13 Nov 2024 21:27:33 +0100 (CET)
Injection-Info: dont-email.me; posting-host="c53a046a5d84cbd6efa921e77fb55335";
	logging-data="2507390"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX19o7/ILJZ4B5WOi0xKwHyUE2P3gTPNcSU0="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:c9QfXZkq0+tz21GtsazOtZfwp7A=
In-Reply-To: <vh0fji$1par2$1@dont-email.me>
Content-Language: en-US
Bytes: 5109

On 11/12/2024 2:59 PM, Thomas Koenig wrote:
> Lynn McGuire <lynnmcguire5@gmail.com> schrieb:
>> On 11/12/2024 2:01 AM, Thomas Koenig wrote:
>>> Lynn McGuire <lynnmcguire5@gmail.com> schrieb:
>>>> On 11/11/2024 4:01 PM, Thomas Koenig wrote:
>>>>> Lynn McGuire <lynnmcguire5@gmail.com> schrieb:
>>>>>> In gfortran, is it faster compile times with *.mod files ?  Or is it
>>>>>> just as fast compiling to include the module interface information in
>>>>>> each subroutine / function file ?
>>>>>
>>>>> I haven't benchmarked this, but I think likely that there would only
>>>>> be a small difference.  Usually, the front end only takes a small part of
>>>>> compilation time (but there are pathological cases).
>>>>>
>>>>> In general, modules are better because of automatic checking.
>>>>> If you want to avoid recompilation cascades, submodules (where
>>>>> you can separate the definition from the implementation) might
>>>>> be worth looking into.
>>>>>
>>>>>> Is there any chance that gfortran will automatically generate and use
>>>>>> module files in the future like IVF ?
>>>>>
>>>>> Not sure what you're asking for.  Can you give an example?
>>>>
>>>> 1. you compile abc.f in IVF
>>>> 2. IVF automagically creates an abc__genmod.f90 file in your release
>>>> subdirectory with the subroutine / function module interface in it
>>>
>>> I think I get the general gist (but it would help me understand
>>> if you could post a complete example).
>>>
>>> But gfortran currently does not have such a feature (which appears
>>> to duplicate modules).  It is also not immediately clear what should
>>> happen if, for example, a procedure uses a derived type from another
>>> module... (This may not be relevant to your case, but as a compiler
>>> writer, you have to think about this kind of thing :-|)
>>>
>>> What would go wrong if you simply encapsulated abc.f in
>>>
>>>         MODULE ABC
>>>         CONTAINS
>>> C  Your code here
>>>         END MODULE ABC
>>>
>>> ?
>>
>> I am not sure what that would get me.
> 
> Automated checking, according to the language definition.  You might
> even find a bug or 300.
> 
>> I have 6,000+ subroutines and
>> functions in 5,000+ files.  And I would still have to modify each file.
> 
> Yes.
> 
>> I am going to write a C++ program to put a USE statement in each
>> subroutine / function with the name of the subroutine / function to be
>> excluded.  It should not take me more than a day or three.
> 
>> I scanned through the Fortran Language doc but it did not have a USE
>> case for this.
>>      https://j3-fortran.org/doc/year/24/24-007.pdf
> 
> It is notoriously hard to read the standard if you want to find
> anything in particular...
> 
> Hm... maybe another point. If you want to find discrepancies in
> argument lists, you could concatenate all your Fortran source files
> into one (which will be large, I presume) and then run "gfortran
> -fsyntax-only" on it.  You could then get error messages like
> 
> $ cat mismatch.f
>        subroutine foo(a)
>        real a
>        end
> 
>        subroutine bar
>        call foo(42)
>        end
> $ gfortran -fsyntax-only mismatch.f
> mismatch.f:6:72:
> 
>      6 |       call foo(42)
>        |                                                                        1
> Error: Type mismatch in argument 'a' at (1); passed INTEGER(4) to REAL(4)
> 
> which you could then investigate.

Yeah, I really do not want to do that as it will be only a special run. 
I want the errors to show up during each compile so that the programmer 
will fix them right then and there.

And we had a user run into an unbalanced argument call to a subroutine 
on Monday.  One of us had changed a subroutine argument list and fixed 8 
out of the 9 calls.  No telling how many of those land mines are sitting 
in our software.

Thanks,
Lynn McGuire