Joerg Barfurth wrote: > Hi, > > What I'm going to say really just reiterates the need to coordinate with > the compiler group (with which I am not particularly affiliated). But I > think I have some more arguments.
> If they don't need ABI compatibility on Solaris, there are existing > alternative, in particular use of the STLport shipped with SunStudio. So, this is the argument for being out of sync and non-compliant with a 10 years old Industry Standard ? "If you don't like that we're not Standard Compliant, go elsewhere" ? Sad to say, many customers have already done that -- they went elsewhere. I didn't realize that chasing customers and developers away was a strategic direction at Sun. But maybe i'm misinformed. >>> 2) It seems like we (Sun and OpenSolaris both) ought to be putting >>> our weight behind *one* of the implementations. >> >> As explained above, we cannot do that, unless we want to remain >> Standard C++ non-compliant forever. >> > > Other have already made a strong case that this should be coordinated > with the compiler folks. At least there should be agreement whether > STLport or stdcxx is the best way forwards. The purpose of this Case is not to engage in a religious debate as to which of the two (STLport or stdcxx) libraries are better. I've already explained the inherent weaknesses of STLport, and the advantages of Apache. By sumbitting an ARC Case for Apache, and not STLport, the Case already implicilty asserts that Apache is better than STLport. This argument seems to be supported by usage in the industry. The Apache library is really nothing more than the RogueWave Standard C++ Library. Interesting that full internationalization and localization support, which is a *requirement* for integrating software in Solaris, is presented here as a weakness or defect. In light of this unusual line of argumentation, may i ask: has the requirement for internationalization and localization support in Solaris been dropped, and the strategic direction changed, to not support these facilities ? > BTW, I see that you suggest giving this library a Committed stability > classification. This may lead you into the same corner where libCstd > currently is caught: > > - Experience (e.g. the multitude of 'final stable ABI' releases of g++ > and its library) shows that it is very difficult to determine that > something is perfect enough that future bug fixes won't require more ABI > changes. The GNU C++ Compiler is known to break C++ ABI between minor or even micro releases. This case does not propose building the library with the GNU compiler, and does not address the weaknesses of the GNU compiler. Comparisons between the GNU compiler and the Sun Studio compiler are not germane to, or in scope for, this case. Many other compilers have many other different problems, none of which are being addressed in this Case. > - There will be TR2 and eventually the next version of the Standard. > Being 'Committed' may make the hurdle to accomodate these revisions very > high. Yes, the Library ABI will break again when the new Standard is adopted. This will require a new Library. This is a known fact, right now, and this is precisely the reason why the directory layout structure for Apache is organized the way it is: /usr/include/stdcxx. When the new Standard is implemented in a new library, it will maybe go into /usr/include/stdcxx0x, and the library names, and the binding SONAME will be different. This Case does not attempt to address "what might happen in the future". This Case is about the integration of a Fully Standard Compliant Standard C++ Library. Insofar as the future direction of the Standard C++ Library is concerned, in an as-of-yet unapproved ISO Standard, this Case cannot address the non existing standard. The C++ Standard implemented by this library is ISO/IEC:14882:2003. That Standard has been approved. > - You can maintain ABI compatibility only as long as the compiler does. > If you commit to an ABI now, you may be stuck with being tied to a > -compat switch and can't benefit from compiler improvements, if the > compiler group eventually makes the step to a 'major release' (i.e. a > new compiler ABI). This argument is equally valid for the Standard C Library, or, for that matter, for any other compiler/compiled language combo. "You can maintain ABI compatibility only as long as the compiler does". True. If the Sun C Compiler decides to break the C ABI, the Standard C Library will break. The same statement is equally true for Fortran. How is this relevant, or particular, to C++, and the Standard C++ Library being proposed in this ARC Case ? The "Committed" Interface Stability classification level, assigned to this library, implies, or states, _nothing_ about the *compiler's* C++ ABI Stability Level, given that the library does not control the compiler's ABI stability level. If the compiler breaks the C++ ABI, then all the libraries built with said compiler will break, including existing "Committed" ones. This hypothetical breakage is beyond this Case's scope, or control. This Case is *not* about the Sun C++ ABI. > Yes, but this is a PITA. Having a reasonably stable C++ ABI is a > precondition for being able to ship binary applications that support > plugins or binary plugins for existing applications. Again, the Sun C++ Compiler's C++ ABI is not being addressed in this Case. Again, there appears to be confusion between the compiler's C++ ABI and one library, or another's ABI. Compiler C++ ABI != Library ABI. This Case assigns "Committed" to the interfaces of the Standard C++ Library because: [1] the library implements an Industry Standard and [2] the interfaces are not expected to change in an imcompatible way, given that these interfaces have been defined in a Standard. For all we care, this Library can stay as is for the remainder of time. > This is already pretty messy in cases like Mozilla or OpenOffice.org, > which both support extensions through a component model with a native > C++ binding. > > So by all means let's try to make a new, hopefully longer-lasting, > stable C++ ABI. But that only works if the compiler and library take > that step together. > >> This library compatibility conflict currently exists today, in >> Solaris, with the presence of the STLport implementation of the >> Standard C++ Library. However, the Apache implementation of the >> Standard C++ Library is far superior to STLport (if for no other >> reason other than full internationalization support in Apache, which >> is absent in STLport). And even if it wasn't superior, STLport is >> still incompatible with libCstd.so.1 as well. >> > > But then why is having three incompatible libraries better than two? > > STLport already supports the most important points of what you are > setting out to do: > - It is vastly more standards compliant than libCstd (at the cost of > being incompatible). > - It supports use of most of Boost. Again: STLport is first of all: obsolete, only supports the "C" locale, and it has significantly less industry traction than Apache/RogueWave. Also, this case does not propose the integration of a "vastly more standards compliant" library, since the definition of "vastly more standards compliant" is in the eye of the beholder. This case proposes the integration of a Fully Standard Compliant library. This is a very significant difference. --Stefan -- Stefan Teleman Sun Microsystems, Inc. Stefan.Teleman at Sun.COM