[pooma-dev] [RFC] Removing workarounds for pre-ISO C++ compilers
Richard Guenther
rguenth at tat.physik.uni-tuebingen.de
Tue Aug 17 17:47:06 UTC 2004
Jeffrey D. Oldham wrote:
> Richard Guenther wrote:
>
>> Jeffrey D. Oldham wrote:
>>
>>> Richard Guenther wrote:
>>>
>>>> Jeffrey D. Oldham wrote:
>>>>
>>>>> There are still a lot of gcc 2.95 and related compilers in use
>>>>> today. I prefer to leave them but let them rot unless there is a
>>>>> compelling reason to remove them now.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> I see. I'd remove them only to unclutter the source and maybe
>>>> increase maintainability if formally stating we require an ISO
>>>> conformant compiler. Oh - we do so already:
>>>>
>>>> <quote README>
>>>> This version incorporates other minor source code changes to support
>>>> compilation using g++ version 3.1 and some improvements to POOMA
>>>> Fields. Compilation using g++ version 2.96 is no longer supported.
>>>> g++ version 3.1 is freely available at http://gcc.gnu.org/. POOMA has
>>>> also been tested using KAI C++ 4.0e.
>>>> </quote>
>>>>
>>>> Richard.
>>>
>>>
>>>
>>>
>>> Good point. Support for gcc 3.4 differs from support for gcc 3.x.y,
>>> x < 4, because 3.4 will correctly parse some constructs that gcc
>>> 3.x.y does not. What do you prefer we write in the README for a
>>> Pooma 2.5 release? That should drive our code changes.
>>
>>
>>
>> I think we should state that we require a ISO standard conforming
>> compiler and standard library. But we should restrict ourselves to
>> using those parts of the standard that are supported by all recent
>> compilers (gcc 3.3, Intel 7.2). I.e. we don't use template template
>> parameters.
>>
>> But working around missing std::min/max or std::complex. Requiring to
>> code like Utilities/Algorithms.h:
>>
>> template <class DataIterator, class KillIterator>
>> inline
>> #if POOMA_NONSTANDARD_ITERATOR
>> typename std::iterator_traits<DataIterator>::distance_type
>> #else
>> typename std::iterator_traits<DataIterator>::difference_type
>> #endif
>> delete_backfill(DataIterator data_begin, DataIterator data_end,
>> const KillIterator kill_begin, const KillIterator kill_end,
>> #if POOMA_NONSTANDARD_ITERATOR
>> typename std::iterator_traits<DataIterator>::distance_type offset = 0)
>> #else
>> typename std::iterator_traits<DataIterator>::difference_type offset
>> = 0)
>> #endif
>> {
>> ...
>>
>> doesn't help maintainability either.
>>
>>> Work on VSIPL++ demonstrates that some templated C++ code that gcc
>>> 3.4 easily supports still breaks other compilers. For example, IBM
>>> Visual Age 6 (xlc++) can have difficulty parsing with template
>>> arguments. Intel C++ 8.0 for IA64, which I believe is the descendant
>>> of KAI C++, has trouble with template functions defined outside
>>> template classes.
>>
>>
>>
>> I think we should identify a set of compilers we can test
>> compatibility with ourselves and formally state we require ISO
>> conformance. We then can list a set of tested compilers along with
>> test results for them. A document describing our preferred coding
>> style along with usable language subset would be greatly appreciated,
>> too.
>>
>> I can start a coding style / conformance document and produce an
>> initial readme for an upcoming release if you like.
>>
>> Richard.
>
>
> Yes, I think this is a good approach, but it's probably sufficient for
> now to write one or two paragraphs in the README file describing
> compilation requirements. Compilation and conformance is probably more
> important and easier to write and more useful to user than a coding
> style document so I would prefer to put our energies into the former if
> we do not have energy for both.
>
> gcc 3.3 and gcc 3.4 differ significantly in parsing because 3.3 uses an
> LALR-based parser while 3.4 uses recursive descent. The difference is
> more than just template-template parameters. Despite this, I think we
> should support gcc 3.2 or 3.3 if we can.
>
> The amount of testing is non-trivial since we have several variables:
>
> serial v. distributed
> distributed: MPI-only, Cheetah+MPI, Cheetah+MM
> various compilers
>
> I would prefer to keep the compiler list relatively short and containing
> the most popular compliant compilers.
>
> Would you be willing to start modifying the README file for a release?
Yes, I can start writing up something along with removing notes for
releases preceding 2.4 - the information therein is somewhat misleading
now (maybe we can rotate the README file into docs/README-2.3).
Richard.
More information about the pooma-dev
mailing list