This release contains the following user visible changes:
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:
This release contains the following user visible changes:
This release contains the following user visible changes:
This release contains the following user visible changes:
This release contains the following user visible changes:
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.
There are several bugfixes and changes in version 0.6.3
Error Messages:
Configure Options:
New / changed 'configure' options:
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
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.
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
so far, you have to change this to
# frost foo.o bar.o -FL -o foobar
# frost foo.o bar.o -FL -o libfoobar.of
Template support:
This is the first version that has template support. However, partial template specializations
are not yet implemented. They are simply ignored.
Example:
Unfortunately, some standard headers like
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
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
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:
Both integer constants and
const int x = 4;
class foo
{
public:
int bar[x + sizeof( short )];
};
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;
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
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 foobarsee 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.