Hi,
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)

http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&printTitle=WebInspector_for_WebKit_in_VW,_and_some_points_about_using_WebKit_as_a_replacement_GUI.&entry=3375921297

http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&printTitle=Integrating_Gecko/Webkit_into_VisualWorks&entry=3374769328

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:

http://www.cincomsmalltalk.com/userblogs/antony/blogView?showComments=true&printTitle=A_seamless_integration_of_VWs_tracing_collector_with_WebKits_reference_counting.&entry=3377387320

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 Smalltalk.

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 itself.

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)



_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to