Skip site navigation (1)Skip section navigation (2)
Date:      15 Mar 2004 11:02:18 -0700
From:      llewelly@xmission.com
To:        David Gilbert <dgilbert@dclg.ca>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: GCC include files conundrum.
Message-ID:  <s3rr7vuhtud.fsf@xmission.xmission.com>
In-Reply-To: <16469.46609.293027.840180@canoe.dclg.ca>
References:  <16468.65270.123954.862565@canoe.dclg.ca> <20040315013817.GA68381@crodrigues.org> <16469.3340.625290.632134@canoe.dclg.ca> <20040315102516.GH15687@atrbg11.informatik.tu-muenchen.de> <16469.46609.293027.840180@canoe.dclg.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
David Gilbert <dgilbert@dclg.ca> writes:

> >>>>> "Daniel" == Daniel Lang <langd-freebsd-hackers@leo.org> writes:
> 
> Daniel> Hi, David Gilbert wrote on Sun, Mar 14, 2004 at 08:55:24PM
> Daniel> -0500: [..]
> >> I'll ignore the condescending tone for a momment.  It's worth
> >> noting that everything works by simply having a copy of strstream.h
> >> in the backward directory.  Maybe the right path to take here is to
> >> include that file much as we include old versions of shared
> >> libraries.
> 
> Daniel> I disagree. Valid standards should be enforced. Providing
> Daniel> compatibilty just keeps more and more non-compliant pieces of
> Daniel> code around. The earlier authors and maintainers are forced to
> Daniel> update their software to be standard-compliant the better.
> Daniel> Even if it's painful and apparently unnecessary work for the
> Daniel> moment. It is beneficial in the long run.
> 
> Daniel> This is just my general opinion on such things.
> 
> Well... there's a time and a place for this.  To be mainstream, we
> need to consider that compatibility is what attracts most people.
> In this case, it appears that someone was coding to an earlier
> standard

There never was an earlier C++ standard - only tradition, and
    pre-standard implementations which interpreted tradition
    differently. There was the C++ ARM, but every C++ compiler I ever
    used was nearly as different from the arm as the C++ ARM is from
    ISO C++1998. It's true that the 1998 standard did not try hard
    enough to minimize code breakage, but in my experience, porting
    large C++ projects to match the 1998 standard is easier than
    porting them to a different pre-standard compiler.

It's worth pointing out that gcc didn't provide <sstream> until 3.0
    . So the authors of tclmidi have had only about 2.5 years to fix
    their code, and not the 5 years it might otherwise appear. (The
    appropriate namespace directives/declarations/qualifiers such as
    'using namespace std', and 'std::istream' would have been accepted
    by gcc 295, though it did not require them.) 

As far as 'being compatible' goes, there is a gcc 2.95.3 port
    (/usr/ports/lang/gcc295), and if it is still being maintained, I
    would suggest any port which doesn't build with gcc 3.3.x be
    modified to be use and require that port, after emiting a warning
    of some kind, saying that gcc 2.95 won't be around forever, and
    the port will have to be fixed soon. I just checked, and on my
    5.2p2 box, gcc295 still builds. But surely someone already thought
    of this, and decided that making ports build with gcc 3.3.3 was
    better than making them use and require the gcc295 port, which,
    after all, will only become harder to maintain over time.

> ... not just hacking something together.  The _real_ problem
> here is incompatible langauge changes ... leading me to loose yet more
> faith in C++ as a whole.

Fortunately, the incompatible langauge changes have been over since
    1997 (when the 1998 standard was finalized). The ISO committee
    has learned a lesson from its failure to be less incompatible
    with existing implementations (it would have been impossible to be
    compatible with more than one implementation), and is now largely
    hostile to even tiny incompatibilities. The minor bugfixes that
    make up the 2003 standard are all backward compatible, and
    unlikely to break any program.

However - unfortunately, gcc, like most C++ compilers, is slow to
    catch up with the C++ standard (which is after all quite difficult to
    implement correctly, and arguably less important than C (since
    there are more C users of gcc than C++ users)), and there is one
    more incompatible difference between what the 1998 standard
    specifies, and what gcc 3.3.3 implements coming down the pike -
    two-phase lookup, which will be in 3.4 . Fortunately, it won't
    break much - it only affects programs which make unusual uses of
    templates, and the majority of such programs are only written by
    people aware of two-phase lookup and what it might break.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?s3rr7vuhtud.fsf>