[webkit-dev] Integrating WebKit GC with other runtimes.

Antony Blakey antony.blakey at gmail.com
Mon Apr 21 06:00:03 PDT 2008

    I'm working on embedding WebKit in Smalltalk (initially  
VisualWorks, probably also GST). I'm not aiming at the common embedded- 
browser use-cases. Instead the aim is to use WebKit as a UI toolkit in  
the same way that you would use Cocoa/Win32/GTK e.g. rather than your  
code having a reference to a text editing field, you have a reference  
to an 'INPUT' DOM node. I've got a few blog posts that go into more  
detail if anyone is interested: (there is a question at the end of  
this email, after the explanation of what I'm trying to do)



This work relies on a seamless integration of the Smalltalk garbage  
collection, which uses an generational tracing collector, with the  
WebKit reference counting system. It is theoretically possible to do  
this without requiring the programmer to handle the WebKit reference  
counting to avoid cycles, using a mechanism I outline here:


My question is how to best do the tracing within WebKit. Considering  
first a purely DOM-based solution i.e. ignoring javascript - if I have  
a WebKit object reference, what is the best way to trace the tree and  
find all reachable objects? Specifically I need to get to all my  
Smalltalk proxies. For efficiency purposes I need to keep track of  
what objects have already been visited in a given gc pass. Ideally  
every WebKit object would have a 2 bit colour (3 colours are needed to  
avoid a flag-reset pass, and 4 colors make the new-node code easier)  
but I could handle this using a per-pass identity set. The API  
abstraction I'm looking for is something like:

   <...>.visit(<color>, <callback>)

Which needs to be defined for every object that can be referenced from  

Does anyone have any suggestions about the best way to do this? A  
principal concern is that if I have to add a tracing method to every  
class that introduces reference members then merging with new WebKit  
releases will be a real PITA.

A related question is about threading - I've noticed with the  
integration I have so far that events are all handled on the primary  
thread (as I would have expected), but does any GC-significant  
mutation occur on secondary threads? Can I assume a single threaded  
mutator abstraction?

IMO this facility would not only be generally useful for other  
language integration e.g. I'm considering Gambit or Chicken (Scheme)  
integration, but would also enable a tracing collector for WebKit  

Antony Blakey
CTO, Linkuistics Pty Ltd
Ph: 0438 840 787

What can be done with fewer [assumptions] is done in vain with more
   -- William of Ockham (ca. 1285-1349)

More information about the webkit-dev mailing list