Kuck & Associates, Inc. KAI C++ Compiler (KCC) Version 3.3e -- November 16, 1998 System requirements for Hitachi SR2201 version: OS: HI-UX/MPP 02-03 Software: Hitachi SR2201 Optimizing C compiler, Version V02-04-/A disk: 25.0 Mb to install 16 Mb installed General Description: KAI C++ is an optimizing compiler for production C++ applications. It focuses on optimizations that allow you to use object-oriented design throughout your application. You get both the performance of C and the productivity of objects. KAI C++ language implementation and libraries are near the draft standard for C++. KAI C++ is available on a broad range of platforms. Compilation process: The top level KAI C++ driver, KCC, is intended to be used as a compiler. The command line for KCC is similar to the native Hitachi SR2201 compiler command line. Under the top level driver there are three distinct compilation phases. First, the front-end parses the source file, performs high-level optimizations, and generates an intermediate file in standard C. Next, a C compiler reads in the intermediate C file and generates an object file. Last of all, a link process combines the object modules and libraries, and takes care of template instantiation and static object initialization. Compatibility: KAI C++ is link-compatible with the Hitachi C compiler, but not link-compatible with the Hitachi C++ compiler. Attempting to link code compiled by KCC and CC will probably result in link-time failures or run-time faults. This means that you must compile all of your C++ code and C++ libraries with KAI C++. KAI C++ 3.3 comes with a draft-standard library, including I/O and STL. The coming standard differs from existing practice in some ways. We strongly recommend reading the migration document http://www.kai.com/C_plus_plus/migrate/index.html for a summary of differences that affect existing codes. Dependence upon the SR2201 C library: For traditional UNIX systems, at program startup the equivalent of a call to setlocale(LC_ALL, "C") is executed. This usually initializes each category to the locale described by the environment "C". The KCC libraries rely on the native C library to support that environment. The SR2201 C library, however, does not appear to fully support the "C" locale. The collate category, for example, assumes 2 byte characters, not the expected 1 byte characters. The locale::facet member functions transform() and collate() use, respectively, the C library functions strxfrm() and strcoll(). These in turn are controlled by the collate category. Users may wish to derive their own locale class to support needed portions of the "C" locale. Dependence upon the SR2201 C compiler: In some circumstances statments of the form return test_expression ? derived_type1 : derived_type2; when compiled by the native C compiler, may produce objects which give a bus error when executed. In the KCC header , statments of this type have been replaced with an "if" construct. When user code gives a bus error, "return" statements using the ternary operator are candidates for examination and possible replacement. Features NOT implemented for Hitachi SR2201: The release notes below describe the evolution of the KCC C++ compiler available for many workstations. For Hitachi SR2201, the following are not supported: - Precompiled headers - Shared libraries - Thread-safe libraries The previous major KAI C++ release for Hitachi SR2201 was a cross compiler, KCC Version 3.2d, which ran on an HP 9000/778 workstation. The current release is the first native Hitachi SR2201 KCC C++ compiler. Changes in Version 3.3e: - Fix for overload resolution problem involving partial specializations [811H07]. - Fix for array initialization problem [88H20], [810H20], [811H20]. - Fix for [82G16]. - Fix for problem with argument to --link_command_prefix. The user's path is now searched for the specified command. - Fix for [86H27]. - Added default argument for second template parameter in ostream_iterator and istream_iterator. - Fix for [82G07]. - Fix for optimization problem reported in [811I10] and [82I14]. - Fix for layout problem on Linux. - Miscellaneous other bug fixes. Changes in Version 3.3d: - Beta release thread-safe libraries for use with this release can be downloaded separately from the KAI C++ web site. Be sure to browse through the new tutorial on multi-threaded C++ (included in the KAI C++ User Guide). - Changes to include files for support of thread-safety. - Reduction in size of libKCC.a due to file reorganization. - Small number of minor bug fixes. Changes in Version 3.3c: - Fixed inlining problem which could lead to code bloat. - Fixed problems with compiling two tests in the Blitz++ testsuite. - Fixed problem with compiling example code in guiding declarations section of User Guide. - Fixed problem with parameters of the form "typename ABC::template DEF" in class template member functions. - Fixed problem with virtual inline function in a base class. - Fixed problem with basic_stringbuf<>::str(). - Fixed problem which lead to "internal error: lower_type: bad kind". - Fixed problem which occured at higher optimization level(s) and generated assertion failure at "kfront/def-use/NBitLatticeBase.C, line 62". - Fixed problem in which required that certain operators be defined for qc in order to declare a queue. Fixed similar problem in certain other container classes. Changes in Version 3.3b: - Fix for vector::erase() when erasing empty vector. Similar fix for a few other containers. - Link-compatibility error no longer issued when mixing .o's compiled in C mode with those compiled in C++ mode with exception handling. - Fix to prelinker so it doesn't loop when presented with a non-existent library name. - ti_files directory only created when needed. Changes in Version 3.3a1: - Fix to problem which caused front-end to generate bad names under certain circumstances. Changes in Version 3.3a: - Object files and libraries produced by KCC version 3.3 are not link-compatible with those produced by KCC 3.2 or earlier. Every component of an application must be recompiled. - Exceptions are now enabled by default. - Implicit inclusion is now turned off by default. - Keyword template is now required when referring to member template typenames. - Function getline in no longer counts characters. - Template class valarray no longer has implicit conversions to T* and const T*. - The option --split (used on 3.2 when building archive libraries) is replaced by the option --one_instantiation_per_object used to build .o files. - Adding or replacing files in an archive library is now deimplemented. ``KCC -o libX.a x1.o'' now removes libX.a and builds a new one containing only x1.o. - KCC 3.3's runtime library is now supplied as both a shared object library and as a traditional archive library. Most linkers default to choosing the shared object version, which can require extra care so that it travels with the application when it is shipped to another host. - Please see the KAI C++ User Guide for additional information on these changes. Changes in Version 3.2d: - Fixed kfront problem where library builds involving a large number of files would lead to errors such as "ar: bad address" that was introduced in 3.2c. - Fixed problem with compiling code generated by ksplit. - Removed memory leak from Expr::destroy_tree. - Applied various other patchs to kfront. Changes in Version 3.2c: - Two new inlining controls that assist in performance vs. code bloat problems. See doc/UserGuide/chapter_3.html#inlining . - Default for conditional inclusion is same as for vendor's C++. E.g., ``X Open'' environment is included by default. This is a reversion to the behavior of Version 3.2a by popular demand. - KCC now removes a shared library before trying to build one. Previous versions tried to add new functions to existing shared library. - operator *= for complex fixed to use proper precision instead of float. - Numerous other fixes for parser and headers - now works even when --no_array_new_and_delete is requested. - __signed__ now recognized for Linux. Changes in Version 3.2b: - Default for conditional inclusion is strict ANSI. - Fixed digits10 for instances of class std::numeric_limits for integral types. - Reduced code bloat from excessive use of inline keyword in class std::basic_ostream. - Fixed bug in which no-op virtual functions were being removed. Changes in Version 3.2: - The library is much closer to the December 1996 draft, and now compiles in --strict mode. Namespace rel_ops, Iterator traits, and allocators for standard container classes are implemented. Class char_traits replaces ios_traits and string_char_traits. See Section 9.12 of UserGuide for details. - Class bitset is much faster and takes much less space. - Classes set, multiset, map, and multimap compile faster and generate much more compact code. - The non-standard header has been added for compatibility with other C++ implementations. - Partial specialization of class templates and partial ordering of function templates are both implemented. See Sections 9.2.9 and 9.2.10 of UserGuide for details. - Reflecting recent changes in the draft, guiding declarations are no longer enabled in --strict mode. See Section 9.2.11 of UserGuide for details. - Covariant return types for virtual functions are implemented. See Section 9.6.6 of UserGuide for details. - Constant folding for some real and complex functions. See Section 3.2.5 of UserGuide for details. - The option ``--parallel_build '' causes KCC to do compiles and prelinking recompiles in parallel with up to n processes. See Section 5.5.3 of UserGuide and man page entry for more details. - The option ``--component_time'' causes KCC to summarize where the compilation time went' See the man page entry for more details. Changes in Version 3.1: - Precompiled header feature - Type long double (128 bit floating-point) is now supported. - generates faster code - Many fixes to standard library Changes in Release 3.0: - member templates - keyword "explicit" - draft-standard library - KCC recognizes ``-o foo.a'' or ``-o foo.sl'' as requests to build an archives or shared library. Comments: For assistance in migrating from Cfront-based C++ to Standard C++, see http://www.kai.com/C_plus_plus/migrate. Default optimization level is +K1 -O. For better performance use +K2 -O. See our web page http://www.kai.com for the latest news on this and other Kuck & Associates products. Customer Support ---------------- Phone: 1-217-356-2288 Fax: 1-217-356-5199 e-mail: c++support@kai.com mail: Kuck & Associates, Inc. 1906 Fox Drive Champaign, IL, 61820