The last release of Grace (0.8.12) was eons ago, but there is lots of activity going on in the 0.8.13 branch, the long wait is mostly due to a rush on features and improvements. We want to stabilize the API enough to work towards version 0.9 and a 1.0 release. If you're interested in how things are going, you can check the mercurial repository. For an executive summary, here are a few nuggets:
Temporary Objects and Memory
Although Grace already used a form of implicit memory management on objects returned by functions (by handling assignment-by-pointer as a sign to loot the object's data and delete it), the new version uses a declaration macro that makes the temporary object available as a reference instead of a pointer. This leads to less cumbersome code when you're trying to use overloaded operators on temporary objects.
Temporary objects are now kept under the regime of a specialized memory manager that is aware of the relatively short-lived nature of these allocations. It also doubles up as a trigger for possible memory leaks.
Enhancements to the value Class
Handling of XML has again become more powerful. HTML-like value-less attributes will now be correctly read and a number of escaping quirks have been fixed. The XML loader now reports errors on unbalanced tags, but can be told to ignore them if you want it to. The source tree now also includes a schema validation tool that can help you with designing xml.schema files.
The value class will now cast to string properly even if it is accessed in the const context.
Database File Access
The dbfile sub-library abstracts access to key/value database files like gdbm and bdb (Peter added the latter yesterday, actually).
Breakfast Serialization
Grace now touts its own native serialization format, enter SHoX (I'm having a hard time recalling what it was a cutesy acronym for, the best I've been able to retronym it to is that this is the Serialized Hierarchical Object eXchange format). It's reasonably compact (specifically when you compare it to XML) and ideal for cache files or serialization of data that is sensitive to user-tampering (referential integrity could be an issue, for a starter).
There's a base class valuable now, implying an object that can convert itself to a value. Useful for instant serialization of more complex classes that need to be serialized across the network, for instance.
Because we're using Grace for a lot of components in the OpenPanel project, it currently gets a lot of abuse from different programmers. Input from Peter and Danny has helped fix a lot of quirks and inconsistencies up to straight out bugs.
Miscellaneous
This new version defines a new iterator protocol, which is a sub-set of the visitor protocol. The nifty foreach macro I blogged about earlier now uses this version through the iterator<kindA,kindB> template class. The advantage over the earlier approach is that implementors of this protocol can return children to the iterator that are of a different class. Thanks to this move, the array<kind> and dictionary<kind> template classes have become more useful.
A completely new set of classes offer a vt100 command line interpreter with a very flexible completion parser (based on the engine of CISH/2) which can call back non-static members of your application class based on definitions you provided it prior to setting up the command line.
The lock<kind> template class used to be really cumbersome to use, because you always needed to reference the 'o' property of the lock to get to the actual locked object. The new exclusivesection(lck){ }, sharedsection(lck){ }, unprotected(lck){ }, and breaksection{ } macros wrap the locked object into a locally scoped reference to rid you of this annoyance. More importantly, the macros improve the visual flow of locked state.