Cmm - history of changes

Most recent changes are at the end of this file.

2 Sep 2000: Release 0.01 alpha.

5 Sep 2000: Release 0.02 alpha.

6 Sep 2000: Release 0.03 alpha.

14 Sep 2000: Release 0.04 alpha

26 Oct 2000: Release 0.05 alpha

24 Nov 2000: Release 0.06 alpha

30 Nov 2000: Release 0.07 alpha

18 March 2001: Release 0.08 alpha

3 Apr 2001: Release 0.09 alpha

20 April 2001. Added support for customising dispatch code with -map and -array command-line parameters. These allow the user to supply the STL-style containers that the generated dispatch functions uses to cache the implementation functions pointers. Used this to improve the dispatch speed - now about a factor of 5 slower than a conventional virtual function call to an empty function with gcc -O3. Also added -profile.

Added support for alternative declaration syntax suggested by Stroustrup in D&E p. 46. See the end of cmm/readme.html.

7 May 2001: Release 0.10 alpha

Added support for embedded functions and autoblocks - see otherextensions.html

Various parser improvements.

Added -errorlevel for detailed control of parse-error diagnostics. See test46 in makefile.

Support for the new declaration syntax is now turned off by default. Turn back on again with the -newdeclsyntax.

8 Oct 2001: Release 0.11 alpha

better error messages, lots of bug fixes, and various new non-multimethod features such as the -remove-exceptioncode switch.

Autoblocks assumes tab stops are every 4 characters, and can be controlled within source code.

Uses new makefile system.

16 Apr 2002: Release 0.12 alpha

Supports asm(...);

Fixed bug in handling of lines starting with <space>#.

Accepts __asm ... (...);

Handles line continuations using trailing backslash at end of line.

14 May 2002: version 0.12.2

15 May 2002: version 0.12.3

15 May 2002: version 0.12.4

15 May 2002: version 0.12.5

15 July 2002: cmm_pragma_* identifiers are changed when read, so that subsequent parses work without applying the pragmas again. See test73.

23 Aug 2002: version 0.12.6

Included examples/overlap/main.cmmi and examples/overlap/main.cppextra in website (users.html has links to these files).

Made release.

3 Sep 2002: Added support for @cmm_memberrecursivefn, to enable easy serialisation support.

Added initial support for cmm -s - no link stage source processing needed.

31 Oct 2002: version 0.13

Fixed some bugs in cmm -s: fixed infinite loop when classname isn't found, fixed const virtual params, added cmm_debug_showall() to dispatch.h/cpp, cmm builds with msvc (can fail at runtime though), fixed singleton list of virtual fns in dispatch.cpp - is now a proper meyers-style singleton inside a wrapper function.

3 Nov 2002: version 0.14

added support for cmm_pragma_newdeclsyntax_on/off.

Fixed bug when a non-virtual param follows a virtual param.

made cmm look inside linkage blocks for classes - so it can now find std::exception when it's declared inside extern "C" {...}.

added better transformation of try..throw..catch: See -exceptions-exit/-exceptions-fudge and test84.

10 Nov 2002: version 0.15

3 Dec: added support for multiple inheritance (though doesn't warn against some compile-time ambiguities). test89.

4 Dec: fixed broken detection of duplicate virtual functions. tests 90 and 91.

18 Dec 2002. Checks for implementations with non-class derived types - used to crash cmm (test93). Treats `delete' as an operator. Used to fail to parse `expr,delete expr;' (test94). Handles ~ better in expressions (test95). Added support for `UL' after digits (test96). Handles `L' immediately before string constants (test97).

13 Jan 2003. Added experimental support for constant-time dispatch using small integers to identify types.

20 Jan 2003. made non-public release of version 0.16

fixed handling of <fn> throw() __attribute__();.

29 Jan 2003. made non-public release of version 0.17

21 Feb 2003. added generation of <virtual fnname>_cmm_getimpl functions. made non-public release of version 0.18.

21 Feb 2003. regenerated all .html files with Amaya.

22 Feb 2003.

Added cmm_unregister_implementation(). Clears all dispatch caches for the relevent virtual function, and frees the data associated with the implementation.

Modified generated code so that implementations don't register themselves by creating a dummy int that is initialised by a call to cmm_register_implementation(). Instead, they register themselves by creating a static instance of a new class, cmm_implementation_holder (defined in dispatch.cpp). This class's constructor calls cmm_register_implementation(), and its destructor calls cmm_unregister_implementation(). This allows dynamic libraries to be loaded and unloaded at will, with the internal dispatch caches automatically being kept up to date.

Have also fixed minor bug - the small-int cache wasn't cleared when new implementations were registered. Would have only effected code that called multimethods before main() was entered.

Release 0.19

Removed separate build directory. All .o files are now placed in same directory as their source.

All test files generated in subdirectory testdir. Minor changes to docs.

3 March 2003. Release 0.20

Removed large preprocessor output files from release.

4 March 2003. Release 0.21

Made all test-generated filenames contain the host/build.

Makefile now supports Cygwin DLLs when testing dynamic linking support. test103 is mapped to test103-unix or test103-cygwin. test103-cygwin uses $(top_cygwin_dll) which uses dlltool to build a Windows DLL.

Added support for struct foo as first parameter to a @cmm_memberreflectfn function. Allows serialisation of C structs.

Added testallbuilds-egcc; as testallbuilds, but uses egcc/eg++, which are gcc 3.x in OpenBSD.

dispatch.cpp can use pthread_rwlock_t instead of pthread_mutex_t in pthread builds. The default is still pthread_mutex_t though.

31 March 2003. Release 0.22

Fixed possibly broken inclusion of debug headers in last release.

Cmm now warns if a function name suggests it is a mm implementation, but the parameters don't match the multimethod.

Improved diagnostics in dispatch.cpp when a dispatch fails.

Added list of names treated specially by cmm parser to output of cmm -help.

Started adding some support for caller-dispatch.

11 June 2003. Release 0.23

Checks const/volatile modifiers of virtual parameters,and outputs warning for implementations that would match except for these modifiers.

16 June 2003. Release 0.24

Added support for virtual parameters that are template types such as smart pointers, e.g.:

bool overlap( shared_ptr< virtual shape> a, shared_ptr< virtual shape> b);
bool overlap_( shared_ptr< static square> a, shared_ptr< static triangle> b){...}

Implementations are now required to have static in front of virtual parameters.

Generated code is given correct #line numbers in the generated file.

28 June 2003. Release 0.25.

22 July 2003. changed generated prototype of the get_impl function to exclude all newline characters, to fix broken line numbers seen by the compiler.

10 August 2003. Added -block and -pre parameters (test120). Added partial support for looking up virtual param types from different namespace (test121). Fixed cmm2 which was broken ages ago.

13 August 2003. Added support for multimethods declared/defined using new declaration syntax (test122).

radically improved lexer's reading of keywords and did some other speed improvements.

26 August 2003. Various speed improvements.

8 Sep 2003. Unmatched multimethod implementations are now treated as errors and generate better diagnostics.

8 Sep 2003. Release 0.26

Implemented preliminary caller-dispatch. See test107 and examples/caller-dispatch.cmm.

22 Sep 2003. Release 0.27

28 Sep 2003. Added return type to caller-dispatch.

28 Sep 2003. Release 0.28

Main documentation is readme.html.