January 12th, 2002 Titaniumc version 1.986 is now publicly available. User-visible changes since the last public release include: --- Backend/Runtime changes --- * Many upgrades to AMLAPI - the sp3 backend is now functional and the recommended platform on the IBM SP * Fixes to the new mpi-* backends to utilize the Myrinet version of MPI on Millennium * Fix a number of user-reported bugs related to abstract classes and interfaces * Fix a minor issue in the ssh spawn mechanism of the udp-* backends that may cause problems on some older versions of ssh * Small change to object header layout that reduces storage overhead by 4 bytes per object and speeds up object creation time slightly * Fix some functionality and performance bugs in the distributed garbage collector * Fix a bug causing intermittent deadlocks during application startup on *-cluster-smp backends --- Frontend changes --- * Add a compiler warning for when it can be statically determined that a program accesses a component of a Point outside its bounds (e.g. pt[0]) * Fixed PR 427: type-checker now forbids broadcast of immutables which contain embedded local fields, and LQI constrains field types appropriately * Reduce compile time by adding several commonly-used Titanium array types to the precompiled tlib * Add a new method overload Math.pow(int, int), which outperforms the floating-point version for integer arguments --- Optimization changes --- * Generate slightly faster code for point dereferences * Inline some frequently-used Domain and RectDomain methods * Upgraded exchange to a faster, more scalable algorithm * Remove monitor optimization from the default optimization list, because this has been shown to be an unsafe transformation * Optimize away all null checks on "this", since we know statically that such checks will always succeed. --- Miscellaneous changes --- * Added Titanium array methods to support sparse data copying and scatter/gather - see the latest language reference manual for documentation * Upgrades to tcrun which allow it to run on the sp3 backend, and make the environment variables REXEC_SVRS and GLUNIX_NODES optional so we can leverage the auto-load balancing capabilities of Millennium & NOW * Added support for the MIPSPro C/C++ compiler (version 7.3.1.2m), which is the native compiler of the SGI Origin * tcbuild currently requires gmake to work correctly - this restriction is now enforced at configure time * Fixed PR 221: the result of Ti.myTeam() is now single * Fixed PR 102: Domain.PointList(), Domain.RectDomainList() and Domain.toDomain() now work * Fixed PR 10: Object.clone() now works correctly, as documented in the language spec * Fix some issues regarding isLocal() to make sure we fully conform to the language reference concept of memory demesnes. * Implemented .regionOf() for Titanium arrays * Java arrays can now correctly be cast to Cloneable * Output the de-mangled Titanium method name on java array bounds violations and null pointer exception. The messages still provide file:line info about the generated C file when compiled without -g, or about the Titanium source file when compiled with -g. --- Updated backend information --- Here are descriptions of the Titanium 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. * mpi-cluster-uniprocess - portable, high-performance MPI-based cluster backend that should run on any cluster with MPI 1.1 or better * mpi-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/mpi-backend-usage.txt * 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 * 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). This backend has now been fixed starting in this release. * 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. * sp2, sp2clump, tera-thread - deprecated backends --- Miscellaneous notes --- * The tech report version of the language reference manual (v1.5) is available on the Titanium web site: http://www.cs.berkeley.edu/Research/Projects/titanium/doc/lang-ref.pdf