diff src/README.kkcc @ 1598:ac1be85b4a5f

[xemacs-hg @ 2003-07-31 13:32:24 by crestani] 2003-07-29 Marcus Crestani <crestani@informatik.uni-tuebingen.de> Markus Kaltenbach <makalten@informatik.uni-tuebingen.de> * README.kkcc: Aligned to the changes. * alloc.c: Implemented the kkcc_gc_stack. (kkcc_gc_stack_init): (kkcc_gc_stack_free): (kkcc_gc_stack_realloc): (kkcc_gc_stack_full): (kkcc_gc_stack_empty): (kkcc_gc_stack_push): (kkcc_gc_stack_pop): (kkcc_gc_stack_push_lisp_object): (mark_object_maybe_checking_free): Push objects on kkcc stack instead of marking. (mark_struct_contents): Push objects on kkcc stack instead of marking. (kkcc_marking): KKCC mark algorithm using the kkcc_gc_stack. (mark_object): Removed KKCC ifdefs. (garbage_collect_1): Push objects on kkcc stack instead of marking. * data.c: Added XD_FLAG_NO_KKCC to ephemeron_description and to weak_list_description. * data.c (finish_marking_weak_lists): Push objects on kkcc stack instead of marking. (continue_marking_ephemerons): Push objects on kkcc stack instead of marking. (finish_marking_ephemerons): Push objects on kkcc stack instead of marking. * elhash.c (finish_marking_weak_hash_tables): Push objects on kkcc stack instead of marking. * eval.c: Added XD_FLAG_NO_KKCC to subr_description. * lisp.h: Added prototype for kkcc_gc_stack_push_lisp_object. * profile.c (mark_profiling_info_maphash): Push keys on kkcc stack instead of marking.
author crestani
date Thu, 31 Jul 2003 13:32:26 +0000
parents e22b0213b713
children 3889ef128488
line wrap: on
line diff
--- a/src/README.kkcc	Wed Jul 30 21:52:22 2003 +0000
+++ b/src/README.kkcc	Thu Jul 31 13:32:26 2003 +0000
@@ -2,6 +2,8 @@
 	    Markus Kaltenbach  <makalten@informatik.uni-tuebingen.de>
 	    Mike Sperber <mike@xemacs.org>
 
+	updated 2003-07-29
+
 	New KKCC-GC mark algorithm:
 	configure flag : --use-kkcc
 
@@ -9,9 +11,9 @@
 	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, many Lisp_Objects have pdump descriptions memory_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.
@@ -28,41 +30,44 @@
 	the Object, if it is set to 0, the dumper does not care about it.
 		
 
+	KKCC MARKING
+	------------
+	All Lisp_Objects have memory_descriptions now, so we could get
+	rid of the mark_object calls.
+	The KKCC algorithm manages its own stack. Instead of calling 
+	mark_object, all the alive Lisp_Objects are pushed on the 
+	kkcc_gc_stack. Then these elements on the stack  are processed 
+	according to their descriptions.
+
+
 	TODO
 	----
-	After all Lisp_Objects have pdump descriptions (THEY DO NOW!!), 
-	(mark_with_description) can get rid of the mark_object calls.
+	- For weakness use weak datatypes instead of XD_FLAG_NO_KKCC.
+	  XD_FLAG_NO_KKCC occurs in:
+		* elhash.c: htentry
+		* extents.c: lispobject_gap_array, extent_list, extent_info
+		* marker.c: marker     
+	  Not everything has to be rewritten. See Ben's comment in lrecord.h.
+	- Clean up special case marking (weak_hash_tables, weak_lists,
+	  ephemerons).
+	- Stack optimization (have one stack during runtime instead of 
+	  malloc/free it for every garbage collect)
 
-	
 	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: ???
+	description: size_, data_, and plist is described
+	mark: only plist is marked, but flush_cached_extent_info is called.
+	      flush_cached_extent_info ->
+		free_soe ->
+		  free_extent_list ->
+		    free_gap_array ->
+		      gap_array_delete_all_markers ->
+			Add gap_array to the gap_array_marker_freelist
 
 	* glyphs.c: image_instance
-	description:
+	description: device is not set to nil
 	mark: mark method sets device to nil if dead
+	See comment above the description.