- si:bds-value returns si:unbound when finding a binding for a previously unbound variable.

- The command :bds no longer chokes when finding unbound special variables.

- Fixed a problem with SI:MKSTEMP under windows (DS).

* Numerics:

- EXT:OUTPUT-FLOAT-NAN and EXT:OUTPUT-FLOAT-INFINITY can be redefined to customized how NaNs and infinities are output.

- RATIONAL and FLOAT work more accurately with long-floats.

- IMAGPART returns (* 0 x) when the argument X is a real. This follows the ANSI specification, but has the (wrong?) side effect that the imaginary part of -0.0 is -0.0, not 0.

- Three new C constants {single,double,long}float_minus_zero in cl_core save memory when creating zeros.

- The constants in cl_core are now used in compiled code.

- (MINUSP -0.0) => NIL

* Characters:

- ECL now uses ISO Latin names for the lowest part of the character set.

ECL 9.6:========

* MOP:

- CALL-METHOD has only one required argument. Affects only calls to this macro inside nonstandard method combinations.

* Visible changes:

- Physical pathnames do not always have a namestring from which they can be reconstructed. This is the case of directory pathnames with version numbers, for instance. Formerly ECL would refuse to print those pathnames if *PRINT-READABLY* was true, but now it uses instead a #. form. > (write (make-pathname :directory '(:relative) :name nil :type nil :version :newest) :readably t)) #.(MAKE-PATHNAME :HOST NIL :DEVICE NIL :DIRECTORY '(:RELATIVE) :NAME NIL :TYPE NIL :VERSION :NEWEST :DEFAULTS NIL)

- WITH-CSTRING automatically coerces extended strings to base strings, signalling an error when this is not possible.

- New command line arguments, --heap-size, --lisp-stack, --frame-stack and --c-stack control the different memory limits.

- The stack size is now measured in bytes, not in lisp words.

- The out of memory error (ext:storage-exhausted) can now be recovered. By default a correctable error is signaled and the user is given the chance to increase the heap size.

* Function names:

- Added a new section in external.h for defining compatibility macros for functions that changed name.

- A new configuration flag --with-ieee-fp adds support for NaN's, infinities and signed zeros, disabling certain floating point exceptions by default. In addition, when this is set, functions like LOG or ATAN will not signal errors when their arguments are not valid, but rather return NaN's (LOG 0) => -infinity, (ATAN 0.0 0.0) => NaN

- A new command line option --trap-fpe / --no-trap-fpe tells whether ECL should ignore floating point exceptions and produce NaNs and infinities or either use the condition system to produce the associated errors.

- Two new functions, EXT:FLOAT-NAN-P and EXT:FLOAT-INFINITY-P.

- Eight new constants for the eight possible infinities EXT:{SHORT,SINGLE,DOUBLE,LONG}-FLOAT-{POSITIVE,NEGATIVE}-INFINITY

* Interrupt handling:

- Under Mac OS/X, ECL now uses its own modified version of the Boehm-Weiser garbage collector that allows both --enable-gengc and our optimized code for signal handling.

- New condition EXT:SEGMENTATION-VIOLATION signaled by SIGSEGV and SIGBUS events.

- Added support for the floating point exception FE_INVALID, which is signalled when trying to do 0/0 or sqrt(-1) (A. Gavrilov)

- SI:TRAP-FPE always returns an integer denoting the new active / inactive floating point traps. In particular, (SI:TRAP-FPE 'LAST T) returns the currently active traps. This value can be passed to SI:TRAP-FPE as first argument again. This is useful for performing a computation without traps (let* (( (si::trap-fpe 'last nil))) (prog1 (/ 0.0 0.0) (si::trap-fpe bits t)))

- A new configurable option ECL_OPT_THREAD_INTERRUPT_SIGNAL determines which Unix interrupt type is used to communicate between threads.

* Debugger:

- Compiled functions now carry information about their source file (based on patches by Jean-Claude Beaudoin)

- The compiler can now generate some Lisp constants as static C expressions (based on patches by JCB)

- The debugger is now fit for multithreaded environments (JCB)

- Compiled functions with DEBUG=3 now produce information about their arguments and variables, that can be inspected in the debugger (evolved from patches by JCB).

- ECL records the file position of a compiled form / function instead of the form number in that file.

* Bugs fixed:

- Remove an obsolete #if statement for Solaris that broke current builds with Solaris 10.

- The mechanism for checking the existence of [u]int{16,32,64}_t or other replacement types was not used for [u]int8_t.

- When COMPILE-FILE is invoked with a non-nil value of :OUTPUT-FILE, ECL now honors the file type supplied by the user, instead of overriding it with "fas" or "fasl". The same applies to COMPILE-FILE-PATHNAME.

- When building ECL's C preprocessor (dpp), the value of CPPFLAGS was not used.

- A wrong order in the list of libraries (-lpthread -lgc) prevented ECL from having multithread support in FreeBSD, OpenBSD and NetBSD.

- Removed a shell command from src/Makefile.in The command used braces {} which FreeBSD does not understand.

- Changed the way in which threads are created and registered with ECL to avoid certain race conditions and data loss when it takes a long time betwee calls to mp:make-proceess and mp:process-enable

- ecl_import_current_thread() now properly stores the thread handle in the process object and can be called multiple times for the same thread.

- When performing unoptimized function calls, the interpreter did not save actual value of the lexical environment, thus preventing the debugger from inspecting it (fixed by JCB).

Assuming you are under Windows, you may try Cygwin to compile ECL as well - just choose to install gcc and perhaps libgc (I installed more things, but I guess this is enough). I compiled ECL here under Cygwin with unicode support without problems:

Without --enable-unicode works too, of course. Just a note: it didn't work with --enable-threads here.

If you find this too complicated, you have easier and newbie-friendlier options: Cusp, Lisp Starter Pack or Able with SBCL (as I can see, Able have a few dependencies you'll need to install, though, which may be a little tricky in Windows).

Download Microsoft Visual studio C++ 2008 (I had some problems with 2010 for the next step but eventually got it to work).

Open the Microsoft Visual Studio Tools Command Prompt (this sets the environment variables needed to compile). You can find it under the program start menu under visutal studio c++->visual studio tools

Browse to your ecl directory then browse to msvc under it.

Open up the make file (or whatever they call it) in there and search for 'unicode' if you want unicode support. add a '1' after = sign (instructions are above it in the makefile)

Better make sure there are no spaces in your path to the msvc folder or it will fail!

type nmaketypenmake install prefix=C:\path\to\wherever\you\want\ecl\

You're done!

Now don't close the command prompt yet. You need to set the correct variables. This is how i did it on windows 7. If it says setx doesn't exist thats because you dont have C:\Windows\System32 in your path environment variable.type the below (WARNING! THIS WILL PERMANENTLY RESET your environment variables. so, type in echo %path% and similar and make sure that what is listed there is what you want to reset your vars to. )