========================== 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. - SSE2 support added for x86. o CMUCL automatically detects whether sse2 is supported or not and loads up the appropriate core file. o New -fpu switch allows the user to specify explicitly which core should be used. The valid values are x87, sse2, or auto (the default). o Fasls compiled with sse2 support have the extension sse2f. Otherwise, the normal x86f extension is used. This allows the user to do tests/experiments with both x87 and sse2 without having to mess around with different directories and removing fasls before building for a different FPU. o If the chip supports sse2, but CMUCL can't find the sse2 core, CMUCL will try to fall back to the x87 core. (This only happens if -fpu is auto.) - Command line parsing now recognizes the option "--". Everything after "--" is not subject to CMUCL's command line parsing, and everything after the "--" is placed in the new variable EXT:*COMMAND-LINE-APPLICATION-ARGUMENTS*. * 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. - Tracing should now be working on Darwin/x86. Previously, certain cases would cause Lisp to segfault in bad ways where you could not return to the repl. - The bounds for type (REAL lo hi) are computed better now. The REAL type is a union of SINGLE-FLOAT, DOUBLE-FLOAT, and DOUBLE-DOUBLE-FLOAT. The computed bounds for DOUBLE-DOUBLE-FLOAT only had double-float accuracy if the bound for REAL was a rational. - The FLOAT type now requires that the bounds, if given, are floats. Previously, any real type would be accepted. This makes FLOAT behave like SINGLE-FLOAT and DOUBLE-FLOAT which required the bounds to be a float of the appropriate type. * 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? Fixed via the fix for Trac #21. The original workaround has been removed. - #24: Float contagion for expt Float contagion is applied to the arguments before computing expt. - #21: Modular arith bug 3 Fixed by delaying the logand defoptimizer. - #15: x86 double-float issue Fixed when using SSE2 support. We will not fix this for x87. - #25: Compiler bug Fixed. - #26: slot-value type check Fixed for some cases. When used in methods, slot-value may not do the type check.if the object is not a argument to the method. * 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. - The Darwin/x86 port can run on Mac OS X 10.4 or later. * 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. - (setf (slot-value ) ) will now signal an error in some situations when the new value is not of the correct declared type for slot. * Changes to building procedure: - For Linux, custom CFLAGS, CC, and LDFLAGS are supported. Requested by Stelian Ionescu for Gentoo support. - The FreeBSD config file is now named Config.x86_freebsd, which is equivalent to Config.FreeBSD_gencgc. 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!