XPCOM Chat
with Scott Collins

12/17/1999

<chrisn> now, I know a lot of people here don't know much about XPCOM, so scott, maybe you'd like to give a short intro to it (and yourself), and then we'll start the chat
<scc> OK
  I'm the current owner of XPCOM
  I've been at Netscape about 3 years
  I spend most of my time working out of Michigan
  XPCOM is our cross-platform solution to object-oriented programming, sort of
  it is based on Microsoft's COM
  and is _theoretically_ binary compatible with it
  COM, and XPCOM are essentially a set of non-compiler enforced rules
  that say what you _can't_ do
  to get some of what C++ would normally give you
  [XP]COM is both a model for selecting and loading components
  that may have been built _long_ after the app
  and a scheme for managing ownership
  via reference counting
  [XP]COM is really just the girders out of which the rest of our app is built
  and it's nothing more than some simple rules, and a little glue
<simeon> what are some high level implications with being binary compatible with Microsoft COM? As in, what can you do with it?
<scc> Hmmm, well first off, I question whether we actually _are_ binary compatible with COM
  However,
  the things we could are pretty cool
  for instance,
  we could directly support components that had been written for IE
  theoretically
  and work with existing OLE parts
  the main implication is leverage ... exploiting code people have already written
<dougt> hey scc, could you talk about your vision of xpcom nspr apart from the browser? Is there one?
<scc> Hmmm
  Well, first the plans are pretty public
  I've posted them to <http://www.mozilla.org/projects/xpcom/XPCOM_plans.html>
  My primary objective
  is to make XPCOM as _light_ as possible
  exploit the C/C++ standard libraries more
  Move to API's that compatible with that objective
  support the standard algorithms, etc
  I think that will make XPCOM cost less to use for typical implementors
  who will certainly, in C++ at least, be exploiting the standard libraries
  and such usage is compatible with Java iterators, etc
  The less XPCOM gets in the way, the more useful I think it will be
  As for NSPR ... that's really it's own thing, outside the scope of XPCOM
<chrisn> scc: could you talk a little bit about how xpcom will be useful to the skin and component developers down the line? For example, people like me who aren't programmers...
  not a great question, I know
<scc> The main facility of XPCOM that matters to non-C++ programmers
  is that XPT, XPTCall, XPConnect, et al make our internal APIs available through JavaScript
  which is vital to manipulating the DOM within your interface
  Because we use XPCOM for everything you might want to control
  The JS you write in your GUI has as much control as any hunk of compiled C++ could hope
<_AsA_> Hi scc. Where in the mozilla code does XPCOM live and which parts of that code are you working with the most heavily. Also, are there other parts of mozilla that are holding up XPCOM progress (making it less visible/lighter)or parts of mozilla that are being held up (significantly) by XPCOM's status?
<scc> Where does XPCOM live? -- /mozilla/xpcom
  What parts am I working with? -- currently the things I'm cleaning up right now are in xpcom/ds ... `data structures'
  Anything holding XPCOM up? -- No, XPCOM is pretty low-level, the only things that get in the way are compiler differences
  Anything waiting on XPCOM? -- actually, no! There have been some significant and unexpected speed-ups recently (thanks, dougt)
<dougt> :-)
<scc> but nobody was _waiting_ for that
  remember, for the most part, XPCOM is really just a set of coding guidelines, and a grab bag of utility data structures
  The main problem is people see the XPCOM directory hierarchy as a dumping ground for anything lower level than their own code
  so innappropriate code lands there frequently.
<Seventh> how much work would be required to add another scripted language (like Perl) integrated with XPCOM like JavaScript is (thanks to XPConnect)
<scc> Hmmm, interesting question
  I think the best answer to this question would come from John Bandhaur (jband@netscape.com) as the primary author of the XPConnect stuff
  however, speaking for perl
  I don't think much work would be needed at all
  perhaps less than 2 weeks worth
<chrisn> holy crap
  sorry
<_AsA_> :)
<scc> Something to construct the appropriate data-structure to do the call throughs
  based on the XPT type information generated automatically by XPIDL
<waterson> but understand also that the DOM code does -not- use XPConnect
<scc> It could easily be done as a perl component
  right
<chrisn> waterson: what do you mean?
<waterson> the DOM/JS glue predates XPConnect, and has not yet been converted to use it
  it uses a JavaScript-centric, generated layout of C++ code
  er, layer of C++ code
<scc> The plan is to convert the DOM to XPIDL, though, solving this dilemma
  I don't know the time frame for that conversion
<Seventh> how fast could be rated the XPConnect layer? how does threading impact speed (all over XPCOM in fact), mostly in relation to auto-proxied interfaces?
<scc> threading may well be the single biggest performance bottleneck in Mozilla
<Seventh> (inline Obj-C style dispatch would rate as "very fast" to me)
<waterson> *cough* WHAT?
<scc> dougt has already found and fixed major slowdowns in it
  There is no question that the XPConnect layer has a non-negligable cost
<waterson> scc: i disagree with both your statements
<scc> I couldn't say with certainty how it compares to a simple dispatch from C++, Objective-C, or Object Pascal, but it is certainly more costly
  waterson: go on
<Seventh> (C++ would rate as "extremely fast" and C as "instantaneous", BTW) :-)
<waterson> 1. threading has never shown up as a bottleneck in any profiling that i've done
  2. although there is a non-zero cost associated with method dispatch for XPC
  and it is large wrt. to say, native dispatch
  it is still dwarfed by other things
<scc> My answer is compatible with (and I agree with) 2
<waterson> (1) may be very dependent on platform
  e.g., i know you are a mac user
  there may be costs i haven't seen there.
<scc> As for 1, I defer to your knowledge ... waterson has done much more profiling than I have
  threading on the Mac _certainly_ sucks
  OK, next biggest bottleneck then: recursive layout?
<waterson> IMHO
<scc> I think dougt's recent work shows that threading could stand closer examination
<waterson> Seventh: relative to the overall computation in the app, thread switching on Win32 is negligible
<dougt> unix too.
<chrisn> has XPCOM's performance been impacted by its cross-platform nature (having to develop around the lowest-common-denominator of the platforms)?
<scc> hmmm
  I think the only thing that has impacted XPCOMs performance is bad code
  platform concerns are more likely to dominate NSPRs performance differences than XPCOMs
  The biggest impact on XPCOM from platform differences is compiler capabilities
  which has really only hit us in utility facilities like |nsCOMPtr| which push the limits of what some of the older compilers are willing to do
  Certainly, threading is an issue on the Mac
  As is the filesystem
  (but again, filesystem falls more under NSPR than XPCOM)
  other than that, however, I think XPCOM is fairly bipartisan
<simeon> What are XPCOM's impact on memory usage, as it compares to 4.x. Does it help memory management? are there downsides?
<scc> The primary downside to XPCOM may also be considered one of its strengths
  XPCOM enforces a reference-counting model for almost all objects
  This causes objects to live longer than they otherwise might have
  in other words, the app is `leakier'
  It helps in that most objects are now guaranteed to live _at_least_ as long as you want them to
  something waterson recently pointed out to me _was_not_ the case in 4.x
  But steady-state memory consumption ends up being greater
  and reference-counting is an ownership model
  it's an ownership modeling mechanism
  that lulls people into thinking they have an ownership model
  so developers fail to figure out in advance what the appropriate lifetime for any given object should be
  just because one object holds a pointer to another does not mean that other object should live as long as the first!
  To solve our memory problems, we need to make better use of weak references and think about the ownership model _before_ the fact
  should have said "reference-counting is _not_ an ownership model... it's an ..."
<jst_home> Has ther been any thoughts/plans for inventing distributed XPCOM (DXPCOM) yet, if not do you think this is something that will/should hapend within the scope of the mozilla project?
<scc> There has been talk
  however the scope of distributed COM is significantly bigger than COM
  There could be significant cross-process wins
  but cross-machine wins are questionable
  Currently, the main reason to use XPCOM is portability, and perhaps the ability to upgrade specific components independently
  we're using it most effectivly as a librarying technique
  No part of the project has yet called for a facility that could only be satisfied by a DXPCOM
  and until that happens, I doubt that we will internally be able to expend resources to do it
  but it could very well be an interesting outside project :-)
<Seventh> is anybody putting thoughts into going away from constructed progids and into component categories?
  if so, what is being done?
<scc> So far, we have been using the hierachical nature of our progids to serve the category role
  but categories is an often discussed topic
  AFAIK, no one is currently working on any deeper meaning for categories that what I just said
  It would make a good topic on netscape.public.mozilla.xpcom
<Seventh> is there a way to enumerate ProgIDs that implement a "category", or have two component implement the same thing, maybe differently? (like two 3D renderers in a game for example, one software and one hardware)
* scc blushes
<scc> I have no idea
  I don't know of one right off-hand
  the notion of category as it applies to progids is much more loosely defined that official component categories
  so things that do the same work, need to share progid prefixes
  I don't offhand know what facility is available for exploring registered progids with a given prefix
  but I'll look into it
* Seventh has his issues with the current progids scheme... :-)
<scc> :-)
<myk> scc: one of your first answers mentioned XPCOM exposing mozilla components to javascript. how cross-browser is that right now (i am assuming not at all) and how cross-browser is it likely to become? in other words, are there reasons for other browser manufacturers to support access to similar objects (like if such access became a standardized part of some generation of JavaScript)? basically, i'm wondering how much this internals exposure is useful to
<scc> Well, primarily, the current access is useful to people writing skins and interfaces in XUL
  until other browsers support XUL and a UI as configurable as ours, such code is not really cross _app_, though it is of course cross platform
  As mentioned previously, the scheme by which the DOM is made public in JavaScript is _currently_ a throwback
  since it is a standard API, I would expect it to be useful cross-app, though other apps need not implement their DOM using XPCOM
  and eventually the DOM access will be implmemented using XPIDL just like the rest of the app, but that change should be transparent to clients
  There is even a question about what access a normal web page might have to core app routines
  Not all the security issues have been worked out with this
  and for all I know, such considerations might end up crippling such access for anything other than DOM work ... except in `skins' and UI code
  so: DOM cross app; XUL, UI stuff, `skins' ... not yet
<chrisn> ok, any other questions tonight?
  Alright, I'd like to thank Scott Collins for showing up this evening
<myk> thanks Scott
<simeon> yay Scott!
<chrisn> we appreciate you stopping by
<scc> It was a pleasure ... don't hesitate to email me questions or post to n.p.m.xpcom