chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Chicken-users] another proposal to modify runtime.c


From: Alan Post
Subject: Re: [Chicken-users] another proposal to modify runtime.c
Date: Tue, 27 Sep 2011 20:49:06 -0600

On Wed, Sep 28, 2011 at 01:41:03PM +0200, Jörg F. Wittenberger wrote:
> I can't resist to propose another minor code improvement.
> 
> For this one I even recall where I learned the trick: early in my CS
> studies, we been taken to analyse how we could do better than the
> straight forward implementation of double linked lists.
> (Which would be the implementation of e.g., the finalizer_list
> in runtime.c)
> 
> The idea is: unlinking requires too many conditionals.
> The solution would be: you don't want to keep a pointer to the list
> elements (which in case of the empty list would be NULL) as root.
> Instead you use a static list node (thereby wasting the unused memory
> for the payload).  As end-of-list marker you don't use NULL, but
> the address of that root node.  You initialize the root nodes
> previous and next to the address of the root node.
> 
> Now you can save all those conditionals.  Unlinking is turned into
> two straight forward updates of the previous and next pointers
> handing on the corresponding fields of the node.
> 
> Saves a few line, conditional and looks IMHO more clever.
> Though I'm biased by the abovementioned history.
> 
> Find the diff attached.
> 
> /Jörg
> 
> 

I've heard this called a "dummy head" list.  I didn't think people
wrote linked list code any other way...  You use one extra cons
cell and remove all the beginning of list checks you'd otherwise
require.

I thought this part came standard.  ;-)  Good catch.  It's a trick
I've been able to use well outside of C programming.  Heck, I think
my egg, genturfahi, uses this one somewhere.

-Alan
-- 
.i ma'a lo bradi cu penmi gi'e du



reply via email to

[Prev in Thread] Current Thread [Next in Thread]