home *** CD-ROM | disk | FTP | other *** search
- SUMMARY OF RECENT MAJOR CHANGES to LIBG++.
- (Also check ../libio/NEWS.)
-
- *** Major changes in libg++ version 2.5:
-
- * The iostream directory is gone. It has been replaced by ../libio.
- The latter is a major re-write. One major change is that libiostream.a
- (which is built in ../libio) can be used indendently of libg++,
- which is interesting because you may find its licensing conditions
- less onerous. See ../libio/README.
-
- Also, the guts of the code has been re-written in C instead of C++.
- This is so that you can build a C stdio implementation without
- a C++ compiler (as was needed before). However, this is not 100% done.
-
- * There is (preliminary) iostream manual (in ../libio/iostream.texi).
-
- * The files in libg++/g++-include are now obsolete. Instead, it
- is the compiler's responsibility to generate "fixed" copies of your
- existing C header files (such as /usr/include/stdio.h). These copies
- (together with a g++ compiler modification) provide C++ access
- to the standard C library. See the fixproto script in the gcc-2.5
- distribution.
-
- *** Major changes in libg++ version 2.4:
-
- * The configuration scheme has been largely re-vamped.
- Instead of the definitions that are common to all (or many) of
- the Makefiles being duplicated in each Makefile.in, they have
- now been moved into a shell script libg++/config.shared, which
- generates these standard definitions and rules.
-
- Most of libg++/tests/Makefile, which had a lot of regularity,
- is now generated by the libg++/tests/Makefile.sh shell script.
-
- Also libg++ no longer uses configure's 'subdirs' mechanism.
- Instead, it uses the 'configdirs' mechanism that most Cygnus
- packages use. This means that each directory has its own
- configure.in, and each directory can be independently re-configured.
-
- * Lots of fixes have been made so libg++ can be compiled by compilers
- other than g++ (specifically cfront), though there are still lots of
- warnings. You may still have to edit some Makefiles etc; this
- will probably become easier in the next release. Many of the
- changes involved not depending on g++ extensions. However, some changes
- turned out to be that libg++ was depending on bugs in g++'s overload
- resolution. These bugs in g++ are being fixed; this will cause some
- difficulties for libg++. In some cases, we have decided that the
- cleanest fix is removing some libg++ functionality. Specifically,
- the coersions Integer::operator long and Integer::operator double
- have been replaced by explicit methods Integer::as_long and
- Integer::as_double. This means you may need to change your code.
- Please let us know if this is problematial.
-
- *** Changes in libg++ version 2.3:
-
- * iostream classes use multiple inheritance and virtual base classes.
- This is a little more complicated and slightly less efficient,
- but saves a slight amount of code duplication. More importantly,
- it improves compatibility with other iostream implementations.
-
- * A few of pseudo-template classes have been converted to use
- real templates. The style used emphasizes sharing code for
- multiple template instatiations at the cost of somewhat more
- complex internal logic. No promise is implied about when/if
- the remaining ones will be converted. Using the template classes
- assumes gcc-2.3 or similar compiler.
-
- * Added stdiobuf class which provides a streambuf wrapper around
- a stdio (FILE*). This can be useful when mixing C and C++ code.
-
- * streambuf sputn/sgetn virtuals have been made renamed to xsputn/xsgetn,
- and sputn/sgetn addedas inline methods. This change is to be compatible
- with AT&T and ANSI; it could require changes to user code if you have
- written your own streambuf sub-classes.
-
- * New utils/c++-mode.el (for editing C++ in emacs).
-
- * Lots of little fixes all over.
-
- *** Changes in libg++ version 2.2:
-
- * Accurate input and output of floating-point numbers
-
- * 'make clean' and its variants have been made more consistent.
-
- * Improved portability (SVR4, NeXT, ...)
-
-
- *** Changes in libg++ version 2.1:
-
- * "Class" include files in g++-include moved to src
-
- Those include files that are just wrappers around C header files
- (e.g. signal.h) remain in g++-include, while the header files
- that are specific to libg++ (or C++) have been moved to src.
- If your system includes "C++-ready" C header files (as in SVR4 or
- Linux), you don't need to use the wrappers in g++-include.
-
- * Portability
-
- A lot of effort has gone into making libg++ more portable.
- Code that depends on internals of "traditional" implementations
- had been made more portable. The 'libiberty' library is incorporated
- into libg++; this supplies (if needed) many functions that may be
- missing on particular hosts.
-
- * Auto-configuration
-
- New scripts automaticly figure out various properties of the
- system (and compiler) you use. While these scripts are not
- foolproof, the intent is that on most systems you will no longer
- have to edit Makefiles or build special configuration files.
-
- * Iostream bug-fixes
-
- There have been numerous bug-fixes and enhancements in the
- iostream code. Lots of rough edges in the streambuf and filebuf
- classes have been fixed.
-
- There are still some rough edges of the protocol (as in what the
- streambuf class should do, and what sub-classes such as filebuf
- should handle).
-
- * iostream enhancements for lexing/parsing.
-
- You can now create a 'streammarker' object, which is a "remembered"
- position is a streambuf. Later, you can backtrack to that position.
- This is supposed to work, even if the streambuf is unbuffered and
- otherwise unseekable, because the streambuffer never throws away
- any data following an extant streammarker. This feature will be
- used to build various scanning/parsing facilities (with backup).
- (See iostream.texi for an example.)
-
- * stdio library
-
- Now supports all of ANSI's functionality.
-
- *** Changes in libg++ version 2.0:
-
- * iostream classes
-
- The major change is that input/output uses the new iostream library.
- The design is based on (but not identical to) iostreams from
- AT&T C++ release 2.x, and the ANSI X3J16/WG21 draft C++ standard.
-
- The iostream classes replace the old stream. The new
- package provides some compatibility hooks. Including the
- obsolete <stream.h> (or defining _STREAM_COMPAT) makes
- more obsolete methods and features available. However,
- you will probably have to change your code if you have used
- any libg++-specific extensions (such as the File class).
-
- If you want stick with the old stream classes, change the
- definition of IO_DIR in Make.defs (to old-stream). You will
- also need to 'make depend' in directories that contain depend,
- and then re-configure everything. Note that the old-stream
- classes are *not* supported and *will* go away in a future release.
-
- * Use g++ version 2 features (if available)
-
- The main one is that an include file g++-include/FOO.h
- that is a wrapper for a standard C include file will now
- #include_next <FOO.h> instead of #include "/usr/include/FOO.h".
- This provides more flexibility wrt to using alternate C libraries
- (such as GNU libc), but it is not without its own problems.
- For example, if you compile libg++.a with a g++ that has old
- incompatible g++-include files in its path, these will be
- read (and then in turn read the /usr/include file). If there
- are conflicts, you can remove the previously installed include files,
- or try something like 'make XTRAFLAGS=-I/usr/include' (or whatever
- include path gcc uses by default).
-
- * Major Makefile changes.
- You can now 'make' from any subdirectory.
-
- * Use of 'configure'.
-
- * Copyrights changed to use the Library license version 2.0.
- (Some files have not been updated yet; we'll try to finish it for 2.1.)
-
- * The prototype class SplayNode was put into a separate include file
- (g++-include/gen/SplayNode.hP). This is to avoid duplication.
- It will require you to generate the approriate SplayNode file
- if you use SplayBag, SplaySet, or SplayPQ.
-
- * You can now use inline functions in header files without
- having to use either -O or _DUSE_LIBGXX_INLINES. (The #ifdef
- that depended on these has been removed, so inline functions
- are inline independent of -O).
-
- * Numerous minor bug-fixes and enhancements.
-
- *** Changes in libg++-1.39.0 from libg++-1.37.0
-
- * All files use the new g++ #pragma interface / #pragma implementation
- convention, which minimies duplication of `outlined' inlines
- and vtables. This also causes no inlines to be used at
- all when not compiling with `-O', which speeds compilation
- and simplifies debugging.
-
- * Many .h header file names had to be shortened so as to simulaneously
- work with SYSV and with #pragma interface (since .h and .cc file
- base names must match.) Sorry!
-
- * All genclass-able files have been moved to g++-include/gen.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- *** changes from libg++-1.36.3 to libg++-1.37.0
-
- * Most utility classes and functions are now in stand-alone .cc and/or .h
- files. This should generate smaller exectuables, and, sometimes
- faster compilation. In particular, istream.h, and ostream.h are
- now separately includable. If you only need one, you don't have
- to get the other.
-
- * The Plex classes now understand `const'. The `changes' and `changed'
- member functions were removed, since it is now possible to
- avoid changes in Plex structures by using const versions.
-
- * class RandomInteger is available, courtesy of John Reidl.
-
- * PlotFile3D, a 3D plot class is in libg++/etc. It will be
- incorporated into libg++ proper for the next release, perhaps
- with a few changes. Thanks to Tom Ngo.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- * The file etc/HINTS is an emacs RMAIL file that contains recent
- bug-lib-g++ list mail and related messages that may be useful.
-
-
- *** changes from libg++-1.36.1 to libg++-1.36.3
-
- * `Tmp' classes have been eliminated from Strings, Integers, etc.
- (Via some retuning of the main classes, Tmp classes were found
- to not significantly impact performance one way or the other,
- so they were removed.)
-
- * There is now a version of malloc, directly supporting operator
- new, etc. It may be faster and better suited to C++ applications
- than your libc malloc. You should be able to use it unless you need
- a special malloc for a distributed shared memory environment or
- the like. If you can't use it, edit the appropriate flag in
- the top-level Makefile. I would very much appreciate feedback
- about whether this malloc makes any difference in time or space
- efficiency than whatever you are now using.
-
- * By default, output is now line-buffered. Use the
- NO_LINE_BUFFER_STREAMBUF define in the Makefile to override
-
- * Otherwise, the stream classes remain C++-1.2 compatible.
- C++-2.0-compatible versions are still in the works.
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- *** changes from libg++-1.35.0 & 1.35.1 to 1.36.1
-
- * various and sundry bug fixes, minor enhancements, and/or portability
- improvements as described in the ChangeLog.
-
- * Most everything should now work on most SystemV machines. Let me
- know if they don't.
-
- * genclass now allows an optional prefix to be used instead of type
- name concatenation in order to help minimize filename
- lengths for SYSV users. This is not a great solution, but
- is A solution to filename length problems for SYSV users.
-
- * Some, but not all classes now behave well with respect to
- the new 2.0 const specifications. Some uncertainties about
- how g++ will interpret gcc-based const function qualifiers
- (to indicate lack of side effects) versus C++-2.0 const member
- functions has held up the conversion of some classes to use
- const in either or both of these ways.
-
- * A version of etags suitable for use with c++ is in etc/
- (courtesy of J. Clark)
-
- * `graph', a unix graph(1) work-alike is in libg++/etc, courtesy
- of Rich Murphey.
-
- * RAVLMap (Ranked AVLs) prototypes.
-
- * The GetOpt class & support has been moved from etc/ into libg++.a
-
- * Streams have been redone to be nearly 100% AT&T 1.2 compatible.
- One minor possible incompatibility exists (ostream<< char)
- that can be eliminated via #define NO_OUTPUT_CHAR at the
- top of stream.h. This is probably necessary in order to
- compile et++. See libg++.texinfo for more details.
-
- The new stream implementation is not particulary pretty.
- Its main virtue is that it avoids some of the worst things
- about both AT&T streams and old libg++ streams. A much
- superior AT&T 2.0-iostream superset is in the works
- for future release.
-
- *** changes from libg++-1.25.0 to libg++-1.32.0
-
- * Nearly all data and methods previously declared as `private'
- are now declared as `protected' to make subclassing from
- library classes easier.
-
- * Most classes now contain a method `OK()' that checks to
- make sure that an objects internal data is in a valid state.
- See the documentation for further details
-
- * Mosts tests in ./tests now contain various kinds of assert
- statements. If tests execute without assertion failures,
- and without any other errors that cause aborted execution,
- you may consider them successful. The test files now include
- nearly all of my internal tests, which in turn have been
- made more extensive.
-
- * Plex classes are available.
- A bit of propaganda about these:
- Plexes are very attractive replacements for arrays
- in many contexts. Try them!
-
- * `shrink' and `contains' have been added to Obstack
-
- * Files and streams have not yet been revamped (a complete
- reworking awaits the AT&T 2.0 stream specification), but
- have been adjusted to provide slightly faster IO in some
- cases, and now support the use of a user-supplied string
- to read or write from instead of an actual IO source.
-
- * Rationals are now normalized when input via `>>'.
-
- * atoI is fixed.
-
- * variable-length representations in String, Integer, etc., are
- now completely different. See the documentation for details.
-
- * New String functions:
- * readline -- read in a line from an istream as a String
- * prepend -- prepend stuff to a String
- * through -- make a SubString from beginning to match point
- * from -- make a SubString from match point to end
- * s[i] -- now returns the char by reference
-
- * BitVec's are no longer supported, since their capabilities
- are now incorporated in the revised BitString class.
-
- * stdarg.h and regex.h are revised to support the Sun4
-
- * Several interesting and/or useful examples of libg++
- class use are in ./etc, mainly courtesy of Doug Schmidt.
-
- * .cc file names are now all less than 15 characters. Some
- .h file names are longer, but this should not present
- problems on SYSV systems.
-
- * pseudo-generic `proto' classes have been thoroughly revised:
- * The prototype file names now end in `P', not `.proto'
- and are in the g++-include directory
- * A single, simple-to-use collection traversal mechanism
- via pseudo-indices (`Pix') is used instead of particular
- traversal friend classes.
- * `Bag' prototypes are included
- * Base classes are now supplied, so that all implementations
- of Sets, Bags, are derived, allowing programmers to
- mix and match implementations.
- * They are now simpler to create: all comparison operators
- and the like are now defined as macros in a `defs' file
- which uses some reasonable defaults.
- * The `Dictionary' versions of Set prototypes are not now
- supported. Revised versions of such classes are forthcoming.
- * Class prototypes previously labelled as `Assoc' are now
- called `Maps', with slightly different capabilities.
-
- * Splay tree prototypes are available.
- A bit more propaganda: Consider using Splay tree
- based containers (Set, Bag, Map, PQ). They are often
- the most efficient structures when performing mixtures
- of operations (adds, deletes, searches...)
-
- * Fixed precision reals are available, courtesy of Kurt Baudendistel
-
- * An ordered hash Set prototype (VOHSet) is available,
- courtesy of Doug Schmidt.
-
- * MLCG now allows access and modifications to the seeds.
-
- * The Normal random generator is fixed.
-
- * SampleStatistic now allows any prob value for confidence
- intervals.
-
- * some simple timer routines are in builtin.cc, courtesy of Doug Schmidt
-
- * While the Vec class prototypes are still available, they are
- currently undergoing revision in order to correspond to
- the forthcoming Matrix package (which should be available
- in the next libg++ release).
-
- * A C++ version of GPERF, a perfect hash function generator
- program is also available in ./etc, courtesy of Doug Schmidt.
-
-
- *** changes from libg++-1.22.2 to libg++-1.25.0
-
- * All reported errors from the previous release are fixed, and many
- suggested modifications have been performed. Thanks to all who
- have sent bug reports and comments, including those with mail
- addresses that I have not been able to reply to. (My mail connections
- are sometimes more than a little fragile. If you send me mail and
- I have not replied within a few days, you may want to try again. Sorry.)
-
- * A serious problem in the use of Obstacks by conversion functions
- has been repaired.
-
- * A bug in maintaining reference counts on `find' and related operations
- in List prototype classes has been fixed.
-
- * Strings now support self case manipulation in addition to the
- functional versions.
-
- * Some new functions have been added to builtin.[h.cc]. All are now
- documented in libg++.texinfo
-
- * Overload declarations are now performed in std.h and math.h,
- rather than builtin.h, to eliminate some include file ordering
- problems.
-
- * Random, RNG, and SampleStatistic classes are available,
- thanks to Dirk Grunwald.
-
- * A BitVec class is available.
-
- * The are many new generic container class prototype files. These
- support container classes based on elementary data structures
- (and a couple of non-elementary ones). Please read the documentation.
-
- * Class prototype OSet has been modified and renamed OLSet.
-
- * The genclass utility has been modified
-
- *** changes from libg++-1.22.1 to 1.22.2
-
- * Tests files are now in a separate directory.
-
- * Several minor errors (Complex unary -, several BitString functions)
- have been repaired.
-
- * pow(0,0) returns 1 for all versions of pow.
-
- * An experimental generic class prototyping feature is provided,
- including prototypes for lisp-style lists and ordered list-based sets.
-
- * several include files with the same names as those in AT&T CC
- are provided. These simply #include other files. OOPS should now
- compile using only g++-include files. See, however, the note
- about struct exception in file math.h
-
- * Some rearrangement of files containing char* conversion has been
- done to eliminate linking of unnecessary classes.
-
- * The inline-only-when-optimizing feature is still not supported.
-
- * New Random number generator classes are not yet available. Stubs for
- these files are in this directory. They should be available for next
- release.
-
- *** changes from libg++-1.21.1 to 1.22.0
-
- * All documentation is in a stand-alone texinfo file, libg++.texinfo,
- and is on its way to becoming a decent piece of documentation.
-
- * All reported errors from the previous release are fixed, and many
- suggested modifications have been performed. Thanks to all who
- have sent bug reports and comments, including those with mail
- addresses that I have not been able to reply to. (My mail connections
- are sometimes more than a little fragile. If you send me mail and
- I have not replied within a few days, you may want to try again. Sorry.)
-
- * New Complex, BitSet, and BitString classes are available. You will
- be performing a valuable service if you try these out and report
- back any bugs/comments/suggestions about these or any other classes.
-
- * File `values.h' has been added. This contains various system
- constants like the number of bits per long, etc. It contains
- much of the same information as sun <values.h>, although a
- few names and things differ slightly.
-
- * Files `builtin.h', `builtin.cc', and `convert.cc' have been added.
- `builtin' contains common inline and non-inline functions on
- builtin types (like `abs'). `convert' contains code for performing
- IO and char* conversions, mainly via Obstacks. Most of these
- functions are not new -- they have been collected from other .h
- and .cc files.
-
- * Files `std.h' and `math.h' now declare all libc.a C functions
- in a way that allows any of them to be overloaded in C++.
-
- * Strings and Integers now perform expansion via realloc() --
- see libconfig.h about whether you should #define SHOULD_FREE_TO_REALLOC.
-
- * `eatwhite' is supported for istreams.
-
- * File::getline(String, ...) and get(String) have been removed in order to
- maintain greater independence of different classes.
-
- * Strings now provide substring matching via new versions of
- `contains' and `matches', `common_prefix' and `common_suffix'.
- Also, there is more support for case operations via `fcompare', etc.
- The versions of `decompose' that do not deal with Regexes have
- been deleted since they provide little functionality over other
- operations. Also, a few special case functions dealing with char*'s
- have been deleted since the required constructors are necessary
- anyway. Several other corrections have been made in String.cc,
- including the elimination of a few aliasing problems.
-
- * The implementations of Integers and Rationals are now both much
- more efficient and well-tested, while remaining machine independent.
- A few minor visible features have been added and/or changed.
-
- * The `box' command in PlotFile is now simulated, whether or not
- it is present in libplot.a
-
- * The inlining-only-if-optimizing feature is still not fully implemented.
-
-