========================== C M U C L 19 f ============================= [--- WORK IN PROGRESS ---] The CMUCL project is pleased to announce the release of CMUCL 19f. This is a major release which contains numerous enhancements and bugfixes from the 19e release. CMUCL is a free, high performance implementation of the Common Lisp programming language which runs on most major Unix platforms. It mainly conforms to the ANSI Common Lisp standard. CMUCL provides a sophisticated native code compiler; a powerful foreign function interface; an implementation of CLOS, the Common Lisp Object System, which includes multimethods and a metaobject protocol; a source-level debugger and code profiler; and an Emacs-like editor implemented in Common Lisp. CMUCL is maintained by a team of volunteers collaborating over the Internet, and is mostly in the public domain. New in this release: * Feature enhancements: - ~R supports many more cardinal names. - Updated network support: o Added BIND-INET-SOCKET to bind a socket to a local address. o Added OPEN-NETWORK-STREAM to create a stream connected to a given host. o Added ACCEPT-NETWORK-STREAM to create a stream connected to the new network connection o Updated CONNECT-TO-INET-SOCKET to allow binding the newly created socket to a local address - Added UNIX:UNIX-OPENPTY, an interface to the openpty C library function. * ANSI compliance fixes: - Fix bug in backquote printer. If the variable is @foo, we want to print ", @foo" not ",@foo". Similarly, for .foo, we want to print ", .foo" instead of ",.foo". - Fix merging of version in MAKE-PATHNAME. If the pathname name is given, the version is not affected by the version in the default pathname. - RENAME-FILE now creates defaulted-new-name from merging new-name with the original filespec. This is an incompatible change from the previous version which created defaulted-new-name from merging the new-name with the truename of filespec. Also, a logical pathname should be returned if new-name is a logical pathname. - Character names need to be a capital letter followed by lower case. Needed to match what ~:C does. (Found via ansi-tests). * Bugfixes: - Compiler can now derive the rank of an array, even if the array is not simple. - Fix off-by-one bug in ~R which prevents printing numbers from 10^63 to 10^66-1. 10^63 is a vigintillion. - The compiler and interpreter should now handle slot-value the same. Previously, different results were returned for things like (slot-value foo :a). - UNIX-GETGRNAM is now defined for Darwin (x86 and ppc). - UNIX-GETPWUID is defined for all BSD systems. - Type-derivation for EXPT no longer causes errors in some situations. The computed bounds were of the wrong type for the resulting type specifier. - Pathname printer no longer produces an error for (MAKE-PATHNAME :HOST NIL :TYPE "foo"). It returns #P(:HOST NIL :TYPE "foo") now. - Type derivation for DOUBLE-DOUBLE-FLOAT arithmetic should be working. Previously, all arithmetic operations would just return DOUBLE-DOUBLE-FLOAT even though the compiler should have been able to figure out a tighter result. - When SCALE-FLOAT would underflow, it would always return 0f0, instead of a floating-point zero of the correct type. - Fix some issues in creating the debug arglist string when the arglist contains items that can't be printed readably. - DIRECTORY is now faster for directories with a large number of files. - RANDOM is now much faster on all platforms for numbers upto #xffffffff. This is an incompatible change from previous releases because the numbers produced may be different from before. - The small bias in RANDOM for integer args up to 32 bits long should now be gone. - Improved type derivation for LOGAND when one arg is bounded but the other is not. - Some issues with tracing on sparc and ppc have been fixed. This usually manifests itself with a segfault just after the function result is printed. - Fixed bug on sparc where C-c sometimes causes a segfault. We now handle the case where siginfo_t is NULL, which can also happen on other architectures. - The interpreter catches invalid EVAL-WHEN situations just like the compiler, instead of silently ignoring them. - FLOAT-PRECISION supports double-double floats. * Trac Tickets: - #16: Read-time hash-table issue Fixed. - #17: LOOP NAMED NIL has no effect Fixed. - #18: Modular arith bug 1 Fixed - #19: Modular arith bug 2 Fixed by not doing modular arith if the args are known to be fixnums. - #20: Modular arith bug? Workaround applied. - #24: Float contagion for expt Float contagion is applied to the arguments before computing expt. * Other changes: - IS1, IS2, IS3, and IS4 are recognized character names for the ASCII control codes US, RS, GS, FS, respectively. - Added OPEN-NETWORK-STREAM and ACCEPT-NETWORK-STREAM functions. - When initializing a random state, try to read 627 words from /dev/urandom to initialize the entire state vector with random bits. Previously, only one word was read. - A seed of 0 is allowed in KERNEL:INIT-RANDOM-STATE. - Updated User guide to include more examples of tracing. - Enable gencgc page protection on x86/darwin. This can speed up GC a bit. (Not measured.) - Bignum truncate is significantly faster. Some cl-bench benchmarks are now almost twice as fast. - The continuable error produced by raising an integer to a power exceeding *intexp-maximum-exponent* is now a restart, giving the user the option to continue and update the limit to the new power. * Improvements to the PCL implementation of CLOS: - The compiler and interpreter should handle SLOT-VALUE the same way. Previously, (SLOT-VALUE obj :a) would behave differently in the compiler and interpreter. - Some issues with get-accessor-method-function and slot-value-using-class have been fixed. Get-accessor-method-function was causing an error to be signaled incorrectly. * Changes to building procedure: This release is not binary compatible with code compiled using CMUCL 19e; you will need to recompile FASL files. See for download information, guidelines on reporting bugs, and mailing list details. We hope you enjoy using this release of CMUCL!