Magic Cap classes, operations and indexicals have been separated into public and private components. Private components are no longer accessible by developers. To use the Magic Cap public interface, class and instance definition files must include the MagicCap.cdef file:read "MagicCap.cdef";To use the Magic Cap public interface from source code, source files must include the MagicCap.xh header file. This file is automatically included if your package includes Magic.h.
Fields defined by a class are no longer automatically accessible from methods of other classes, even subclasses. Before FieldOf() or SetFieldOf() can be used to access fields in instances of other classes, the .xph file that defines that classes must be included.
Rosemary supports iterating over all known packages and all known clusters. To iterate through all packages Magic Cap knows about, call EachPackage. To iteratate over all packages that are active, call EachActivePackage. You can call EachCluster to iterate over all known clusters.
The ExtraSize() and ExtraListFormat operations are now intrinsics. The self parameter needs to be removed from these calls.
This version of Rosemary introduces a new operation that allows the creation and modification of large blocks of persistent data without incurring the overhead of the shadowing mechanism. To do this, you create an object in transient memory and perform your modifications. When the modifications are complete, call FlatMoveNear to move the object into the same cluster as FlatMoveNear's nearThis parameter. Keep in mind that because the object is not persistent until FlatMoveNear is called, the object will be lost just like all transient objects. You can also use FlatMoveNear to move a persistent object into transient memory for further modification. In this case, the persistent version will exist until the next commit, at which time it will be deleted. After the commit happens, the moved object is a true transient object that can be lost if a reset happens. FlatMoveNear is most useful for the creation and modification of large data objects, like images and sounds. As its name implies, FlatMoveNear will not follow object references.
Renamed SystemPersistentCluster to simply SystemCluster and SystemTransientCluster to TransientCluster.
Renamed Object_GetSize to Object_ObjectSize.
Correction from previous release notes:
BeginReadBytes() is not a replacement for BeginReadExtra(). BeginReadBytes() returns a pointer to the beginning of the object, while BeginReadExtra() returns a pointer to the beginning of the extra data portion of the object. Because memory blocks are no longer locked when BeginRead or BeginModify calls are made, it is essential that code that moves memory is never executed when you are using a pointer returned by any of these calls. Debug versions of Magic Cap will stop in the debugger when you attempt to dispatch against an operation that might move memory while another object is accessed by any BeginRead or BeginModify call.