The Frost Project

Release Notes


back to main page

Version 0.9.1

This release contains the following user visible changes:

Version 0.9.0

This release was almost ready for about 2 months, but I was pretty busy lately. Sorry for the dalay.
This release contains the following user visible changes:

Version 0.8.0

This release contains the following user visible changes:

Version 0.7.3

This release contains the following user visible changes:

Version 0.7.2

This release contains the following user visible changes:

Version 0.7.1

This release contains the following user visible changes:

Version 0.7.0

It has been about one and a half years since the last release of frost (which has not been usable for quite some time). Most parts have been rewritten and the C++ parser was removed. This makes the whole program much less complex. Furthermore, you can now use functions with virtual arguments really as if they were a native C++ feature: you don't have to define functions with a special prefix anymore. Other limitations with regards to inline functions have also been removed.

NOTE: Below are old release notes. Many of the things listed there are not true for the current version of Frost.


Version 0.6.3

There are several bugfixes and changes in version 0.6.3

Error Messages:

Configure Options:
New / changed 'configure' options:

--with-cxxfilt[=prog]
Use 'prog' as filter program for C++ function names in error messages. Try c++filt if 'prog' is not specified. Enabled by default.
--with-uds-libs=path
Set explicitly a path for the UDS library. You need this only if the linker does not find it.
--with-uds-includes=path
Set explicitly a path for UDS include files. You need this only if the preprocessor does not find them. Note: When the header files are installed in ~/includes/uds, you have to specify --with-uds-includes=~/includes.
--enable-arch[=arch]
Enable architecture specific optimizations at the cost of backward compatibility. If the architecture to use is not specified, `uname -m` is assumed. Disabled by default unless you optimize explicitly for speed or size.
--enable-optimization[=speed|size]
The -fomit-frame-pointer option is not used when --enable-optimization=speed is specified since this crashes Frost (exceptions need a frame pointer).
-fstrict-aliasing is enabled whenever optimization is used.
The default library paths that are used internally are now detected by 'configure'. Up to version 0.6.2 only /usr/lib and /usr/local/lib were used as default paths.

Invocation:
The -FS option has been removed. Use -FL instead.

Performance:
The performance of the generated code didn't change, but I did a few benchmarks. Have a look at the results and try to beat that with hand-written code that doesn't need to be maintained ;-)

UDS Collection:
You need version 0.9.1


Version 0.6.2

A few minor bugs were fixed.
Some code that was part of Frost has been moved to a separate library, the UDS Collection. You can download this library here.


Version 0.6.0

The template support is finally working (including partial specializations), tons of bugs were fixed, the main parser has been completely rewritten, and lots of other improvements were done. The STL that is shipped with gcc 2.95.2 is now compiled without problems.
In short: This version is worth the trouble I had during the last two months ;-)

Compound Frost Object Files:
When you use the -FL option to create a Frost Object file for a library, Frost will no longer prepend lib and append .of to the name you specify.
When you used

# frost foo.o bar.o -FL -o foobar
so far, you have to change this to
# frost foo.o bar.o -FL -o libfoobar.of


Version 0.5.2

Template support:
This is the first version that has template support. However, partial template specializations are not yet implemented. They are simply ignored.
Example:

template < class C > class foo {};       // template class
template < class C > class foo< C* > {}; // partial specialization

void bar( foo< int* > ) {}               // does _not_ refer to the specialization
Unfortunately, some standard headers like string.h use such specializations. You might get an error if you try to compile them. Note that this is an experimental version. If you use Frost in your programs, you are better off with version 0.5.1


Version 0.5.1

Arrays and integer constants:
Since a constant expression parser was added, the size of the following class can be calculated. Such a class is no longer a bad type.
Example:

const int x = 4;
class foo
{
public:
	int bar[x + sizeof( short )];
};
Both integer constants and sizeof are now supported. However, if you use cast operators or initialize a constant with a function, the integer constant is not recognized.
Examples:
int f();

const int x = f();
const int y = ( int )20;


Version 0.5.0

Static Multi Methods:
When you declare a non-virtual function with virtual arguments in a class, you have to declare all variants of that function in the same class (see example4.ccf in the doc directory of the source distribution). However, when you declare a static multi method, you can add new variants in derived classes. See example7.ccf for an example.

bugfixes:
several problems related to virtual base classes, multiple inheritance and alignment were solved


Version 0.4.0

Libraries:
You can now build and use libraries that use multi methods. To build a static library libfoobar.a that consists of foo.ccf and bar.ccf you might do something like this:

# frost -O2 -c foo.ccf
# frost -O2 -c bar.ccf
# ar cru libfoobar.a foo.o bar.o
# ranlib libfoobar.a
# frost foo.o bar.o -FL -o foobar
see Invoking Frost, Usage Guidelines and example 6 in the test directory of the source distribution.

Variant Names:
Nathan Myers pointed out that it is not a good idea to use variant names that begin with "_" since names that begin with an underscore and are followed by a capital letter are, in the Standard, "reserved to the implementation". The underscore is now either appended to the multi method name, or "frost_" is prepended.
It doesn't matter which one of these names you use. In example6a.ccf "frost_" is prepended, in example6b.ccf an underscore is appended.