July 9th, 2001 Titaniumc version 1.742 is now publicly available. User-visible changes since the last public release include: --- Backend/Runtime changes --- * Make Java arrays behave like real Objects (as they should) they now support all the java.lang.Object methods and synchronization * Implemented Object.getClass() and the majority of java.lang.Class. This means that Object.toString() finally works correctly and gives a sensible answer, and that you can directly query an object's dynamic type at runtime (e.g. passing a thrown Exception to System.out.println() to examine it) * Fixed Titanium to work with gcc 2.96 and 3.0 * Added more descriptive messages to the ArrayIndexOutOfBoundsExceptions and NullPointerExceptions thrown by the runtime system (PR 171), and improve the top-level exception handler to output more information about exceptions thrown out of main * Added an SP3 backend built on Simon Yau's AMLAPI layer * Improved AMUDP message statistics output * Fixed PR 307 - problems with Titanium arrays on the Origin 2000 * Vast improvements to the speed of shared-memory barriers on SMP's --- Frontend changes --- * Type checker now disallows local fields within immutables that are copied across global pointers * Fixed PR80, an ancient bug related to lowering of MethodCallAssignNodes * Fixed PR175, the bug that led to 'a.foo().x += string' executing as if you had written 'a.foo().x = a.foo().x + string' --- Optimization changes --- * Runtime stride-division removal: - "random" accesses to Titanium arrays run about 2x faster - foreach loop headers can run over 40% faster - Most of our application benchmarks showed a noticeable improvement as a result of this change * Various fixes to LQI and sharing inference, especially the early-enforcement system * Optimizations monitor operations using the results of sharing inference * Minor optimizations to the implementation of bounds-checking & null-checking (also, disable null-checking when --nobcheck is given) * Make the method inliner a little more aggressive --- Miscellaneous changes --- * Patched many memory leaks in the tc compiler, making it run faster and with less memory footprint * Improvements to tc's verbose output to show compilation phase progress * Added the /notes directory to our distribution (contains miscellaneous documentation on the implementation) --- Updated backend information --- The Titanium backends were recently rewritten to accommodate some architectural changes (notably, adding support for CLUMPS and UDP-based networking). Here are descriptions of the backends currently available: * sequential - A single titanium process - useful for testing and debugging. * smp - This parallel backend runs the Titanium processes as Posix threads within a single shared memory space, with fast "narrow" pointers. You should specify the number of parallel threads by setting the environment variable TI_PFORP = "N/N" (for N threads). * now-cluster-uniprocess - the high-performance cluster backend on the Berkeley NOW. Each Titanium process runs on a separate node of the NOW. * udp-cluster-uniprocess - the portable UDP-based cluster backend that should run on basically any set of machines that have sshd and a basic TCP/IP stack (they can also take advantage of rexec and GLUnix on the NOW and Millennium, respectively). * udp-cluster-smp - Same as above, but for a cluster of SMP's (CLUMP). Each node in the network runs one or more Titanium processes as Posix threads. For more detailed information about using the udp-* backends, see: http://www.cs.berkeley.edu/Research/Projects/titanium/doc/udp-backend-usage.txt * mill-cluster-uniprocess, mill-cluster-smp - these backends were designed to support the Via network on Millennium, which is no longer available. They may be used in the future to support other Via-based clusters. * cray-t3e - Runs on the Cray T3E using shmem. This platform has a few limitations (notably, the lack of a garbage collector). * sp3 - Runs on the IBM SP Power3 machine with LAPI as the low-level communication system (uses an AM-to-LAPI compatibility layer) * sp2, sp2clump, tera-thread - deprecated backends --- Miscellaneous notes --- * The current compiler implements a per-process semantics for the "static" keyword. This means that static fields have one copy in each Titanium process, and "static synchronized" methods perform no synchronization.