view src/README.kkcc @ 1324:70841e88fbee

[xemacs-hg @ 2003-02-24 12:42:34 by michaels] 2003-02-20 Mike Sperber <mike@xemacs.org> * Makefile.in.in (update-elc-2): Sequentialize dependencies even more.
author michaels
date Mon, 24 Feb 2003 12:42:39 +0000
parents e22b0213b713
children ac1be85b4a5f
line wrap: on
line source

2002-07-17  Marcus Crestani  <crestani@informatik.uni-tuebingen.de>
	    Markus Kaltenbach  <makalten@informatik.uni-tuebingen.de>
	    Mike Sperber <mike@xemacs.org>

	New KKCC-GC mark algorithm:
	configure flag : --use-kkcc

	For better understanding, first a few words about the mark algorithm 
	up to now:
	Every Lisp_Object has its own mark method, which calls mark_object
	with the stuff to be marked.
	Also, many Lisp_Objects have pdump descriptions, which are used by 
	the portable dumper. The dumper gets all the information it needs 
	about the Lisp_Object from the descriptions.

	Also the garbage collector can use the information in the pdump
	descriptions, so we can get rid of the mark methods.
	That is what we have been doing.

	
	DUMPABLE FLAG
	-------------
	First we added a dumpable flag to lrecord_implementation. It shows,
	if the object is dumpable and should be processed by the dumper.
	The dumpable flag is the third argument of a lrecord_implementation
	definition (DEFINE_LRECORD_IMPLEMENTATION).
	If it is set to 1, the dumper processes the descriptions and dumps
	the Object, if it is set to 0, the dumper does not care about it.
		

	TODO
	----
	After all Lisp_Objects have pdump descriptions (THEY DO NOW!!), 
	(mark_with_description) can get rid of the mark_object calls.

	
	There are a few Lisp_Objects, where there occured differences and
	inexactness between the mark-method and the pdump description.  All
	these Lisp_Objects get dumped (except image instances), so their
	descriptions have been written, before we started our work:

	* alloc.c: lcrecord_list
	description:
	mark: performs extra gc_checking_assert() for various checks.

	* alloc.c: cons
	description: car and cdr
	mark: cdr is marked, only if its != Qnil

	* alloc.c: string
	description: ???
	mark: ???

	* buffer.c: buffer
	description: XD_LISP_OBJECT indirect_children
	mark: indirect_children not marked if Qnull_pointer

	* eval.c: subr
	description: XD_DOC_STRING doc
	mark: empty, nothing is marked

	* file-coding.c: coding_system
	description: ???
	mark: ???

	* glyphs.c: image_instance
	description:
	mark: mark method sets device to nil if dead