[Ecls-list] Recent changes

Juan Jose Garcia-Ripoll worm at arrakis.es
Tue Jun 10 07:27:11 UTC 2003


Hi,

here's a summary of the changes and fixes that took place in the CVS tree:

* LISTEN now uses select() to check whether there is input available in a 
file. This way, LISTEN hopefully now works on sockets. For safety I have 
included a lot of headers in the code of ECL (sys/select.h, sys/time.h...) 
and some others. The amount of platforms I have for testing is limited, 
please tell me about possible errors when building the system.

* I have fixed an important problem in DEFSTRUCT: when :CONC-NAME is NIL, it 
may happen that a second definition of a function overwrites the reader of a 
slot. For instance
	(defstruct (foo (:conc-name nil)) slot-a)
followed by
	(defstruct (faa (:include foo) (:conc-name nil)))
would produce an accessor SLOT-A which only works for structures of type FAA:
	(SLOT-A (MAKE-FAA)) => NIL
	(SLOT-A (MAKE-FOO)) => Error

* NIL could not be the name of a slot in a structure.

* Formerly, the process of inlining a call to a function would be done only 
once the C code is written. For instance, if the compiler found
	(FUNCALL (LAMBDA (X) (COS X)) 1.0)
it would only decide to do the inlining during the second phase of the 
compilation process. That meant extremely complicated and easy to break code 
in the compiler. The new engine does the inlining of these forms during the 
first phase, in which Lisp is translated to an intermediate representation. 
For instance, the previous form is translated to
	(LET ((X 1.0)) (COS X))
and here optimizations are much easier.

* The optimizers for the MAPCAR, MAPCAN, etc, were broken. They will be 
replaced with compiler macro functions, which are easier to maintain. The 
code is already there (src/cmp/cmpmap.lsp), just in case someone wants to 
find the bug which prevents using them :-/

I have committed these changes to the CVS HEAD repository. Sorry for those who 
updated to the NEW_COMPILER branch, but it's too complicated for me to 
maintain both branches plus my own CVS repository at home. Therefore I 
decided to only commit sort of "stable" code to SourceForge, and keep all 
experiments at home in my own CVS tree. This is also helped by the lack of 
other developers in the project.

For those having a ecl-0.9.tar.gz file and not wanting to use CVS, you can 
download the set of patches at http://ecls.sf.net/patch-0.9-current.gz 
Hopefully, this time everything works :-)

List of tasks (Volunteers welcome)

1) A home-made implementation of the Meta-Object Protocol for CLOS.

2) Redesign the build process so that it creates a single DLL, 
libeclrun.{so,dll}, which contains libecl.a, liblsp.a, libclos.a and 
libgmp.a. Rewrite cmpmain.lsp so that every DLL or executable is linked 
agains this library. With these two steps, DLL support for Windows and MacOSX 
would be done.

3) Finish the interface for UFFI. src/c/ffi.d has to be completed with 
functions for writing into C structures, reading from them, etc.

Best regards,

Juanjo




More information about the ecl-devel mailing list