Adobe Source Libraries, GIL, and Boost

I'll just say a public thanks to yourself, Adobe, and the folks behind ASL for dipping their toe in the open source water. I think it will take several years to see the full effect, but it's very exciting to me to see you guys getting a chance to bring these ideas out into the world. Probably more than several years (given that it isn't clear the Generic Programming has caught on yet) :-(
I will also support anyone who would like to borrow portions of ASL to contribute them to Boost.
This is really great -- it seems there is much common activity with other things happening in Boost (see below).
Some libraries that I think would be interesting to get into Boost with some comments about what I see as still needing to be done.
Forest <http://opensource.adobe.com/ group__asl__tutorials__forest.html> .....
We have an active SOC project to build a generic tree...
https://boost-consulting.com:8443/trac/soc/wiki/tree https://boost-consulting.com:8443/trac/soc/wiki/tree/design Are there links to these on port 80? I can't get to 8443 from inside Adobe.
Range Based Algorithms (using the boost range library) <http:// opensource.adobe.com/group__standard__extensions.html>
Eric Niebler has written some range algorithms in the vault -- be nice to see if he's covered all the ones you'all have:
http://www.boost-consulting.com/vault/index.php? &direction=0&order=&directory=Algorithms There is some nice work here to specialize for the standard containers - something I hadn't considered and isn't part of my
Hi Jeff, library. Thanks for the pointer!
ZUIDs <http://opensource.adobe.com/classadobe_1_1zuid__t.html>
Hmm, I guess I would think zuid should be its own little library. There is already a GUID in the vault which again might benefit from collaboration here:
http://www.boost-consulting.com/vault/index.php -- guid_v3.zip Interesting - this is not quite a conforming GUID (deviates in many of the same ways that ZUIDs do from the specification but I try to be honest and not call them GUIDs...
I don't know if we've really found an active maintainer for Boost.Threads....library abandonment is starting to become a much bigger issue for Boost as time goes on :-( Maintenance for any large library is problematic. I ask that for each release, my developers improve one existing library (both documentation and code) - we release once a month so this helps to keep things from stagnating. Right now I don't mandate _which_
regular_object <http://opensource.adobe.com/ classadobe_1_1regular__object.html> This is a generalization of value_t (and boost any) - the idea is to be able to parameters an "any" object by concept. Mat Marcus has been doing a fair amount of work with this library. Needs better docs and tutorial.
Interesting. Don't know of any current Boost work here. We're currently putting a fair amount of emphasis on this work - the general idea is that the requirement of polymorphism comes from the requirement to apply algorithms to heterogeneous collections of objects. Hence - runtime polymorphism should be based on Concepts and cannot be properly described by intrusive means (such as inheritance). I'm currently collaborating on a paper on the topic
<http://www.uddi.org/pubs/draft-leach-uuids-guids-01.txt> AFAICT the node ID in the boost code is purely dependent on the clock - this makes the entire ID uniqueness of the ID a function of time (making for a fairly high probability of collision). The ZUID code includes machine specific and process specific information in the node generation and has code to synchronize threads to avoid collisions from requesting IDs from separate threads at the same time. Anybody know how to contact Andy Tompkins to see if he wants to collaborate? library is improved but at some point I'll have to start dictating the priority. Of course, the folks working for me aren't quite volunteers so I can get away with that. But some possible suggestions for boost - 1. Speed up the release cycle - I would try to get two two releases a year at a minimum. Just upping the release pace will help avoid stagnation. 2. Make maintenance part of the cost of admission - "We're really happy to take your GIL submission, but part of contributing to Boost is to assist with the general maintenance. Here's a short list of tasks we'd like you to take on..." (Sorry Lubomir!) I'm constantly looking at ways that we can improve this with ASL - honestly the library as it stands today is large enough that I could burn my entire team just maintaining and improving the current libraries without ever adding any more (at least for the next few years). Balancing this with adding new libraries and showing forward progress is very difficult. that I'm hoping to have ready for LCSD <http://lcsd.cs.tamu.edu/2006/>
Copy-On-Write <http://opensource.adobe.com/ classadobe_1_1copy__on__write.html>
I guess the ever-languishing policy_pointer is the closest Boost work. A key simplification here was realizing that copy-on-write deals with values, not pointers.
XML Parser <http://opensource.adobe.com/ classadobe_1_1xml__parser__t.html>
There is a Boost xml, but I haven't seen much Boost activity here. Property tree does some too, but full XML support is hard enough that it will be hard to do in Boost.
http://www.boost-consulting.com/vault/index.php? direction=0&order=&directory=Progamming%20Interfaces We're getting close to a complete XML parser - this is not a DOM, the idea is that a DOM would be a separate library that could be used with the parser - but the parser can be used just fine without a DOM. Hopefully people will make you very busy :-) Already you've given me some nice references. Thanks.
Sean

Sean Parent wrote:
ZUIDs <http://opensource.adobe.com/classadobe_1_1zuid__t.html>
Hmm, I guess I would think zuid should be its own little library. There is already a GUID in the vault which again might benefit from collaboration here:
http://www.boost-consulting.com/vault/index.php -- guid_v3.zip Interesting - this is not quite a conforming GUID (deviates in many of the same ways that ZUIDs do from the specification but I try to be honest and not call them GUIDs...
<http://www.uddi.org/pubs/draft-leach-uuids-guids-01.txt>
AFAICT the node ID in the boost code is purely dependent on the clock - this makes the entire ID uniqueness of the ID a function of time (making for a fairly high probability of collision). The ZUID code includes machine specific and process specific information in the node generation and has code to synchronize threads to avoid collisions from requesting IDs from separate threads at the same time.
Most people don't even bother with proper GUIDs nowadays, they just generate a cryptographic quality random number. The probability of a collision is "sufficiently low for most practical uses".

Sean Parent wrote:
Hi Jeff,
Some libraries that I think would be interesting to get into Boost with some comments about what I see as still needing to be done.
Forest <http://opensource.adobe.com/ group__asl__tutorials__forest.html> ..... We have an active SOC project to build a generic tree...
https://boost-consulting.com:8443/trac/soc/wiki/tree https://boost-consulting.com:8443/trac/soc/wiki/tree/design Are there links to these on port 80? I can't get to 8443 from inside Adobe.
There isn't I'm afraid. There's more here: http://code.google.com/soc/boost/appinfo.html?csaid=E17EA7C7C537C131 including a pointer to the developers blog. It has some of the design stuff, but not all of it.
Eric Niebler has written some range algorithms in the vault -- be nice to see if he's covered all the ones you'all have:
http://www.boost-consulting.com/vault/index.php? &direction=0&order=&directory=Algorithms There is some nice work here to specialize for the standard containers - something I hadn't considered and isn't part of my library. Thanks for the pointer!
Sure :-)
ZUIDs <http://opensource.adobe.com/classadobe_1_1zuid__t.html>
I'll defer to the new thread on this topic.
Anybody know how to contact Andy Tompkins to see if he wants to collaborate?
I don't. Searching the list archive the last message I found was in 2004...I guess that doesn't bode well...
I don't know if we've really found an active maintainer for Boost.Threads....library abandonment is starting to become a much bigger issue for Boost as time goes on :-(
Maintenance for any large library is problematic. I ask that for each release, my developers improve one existing library (both documentation and code) - we release once a month so this helps to keep things from stagnating. Right now I don't mandate _which_ library is improved but at some point I'll have to start dictating the priority. Of course, the folks working for me aren't quite volunteers so I can get away with that. But some possible suggestions for boost -
1. Speed up the release cycle - I would try to get two two releases a year at a minimum. Just upping the release pace will help avoid stagnation.
We all want that -- there's been some discussion of how to provide a more continuous release process. Hopefully that will improve things.
2. Make maintenance part of the cost of admission - "We're really happy to take your GIL submission, but part of contributing to Boost is to assist with the general maintenance. Here's a short list of tasks we'd like you to take on..." (Sorry Lubomir!)
Yeah, well I'm afraid the cost of admission is already a pretty high -- adding a non-related task sounds like it might kill off some authors to me.
I'm constantly looking at ways that we can improve this with ASL - honestly the library as it stands today is large enough that I could burn my entire team just maintaining and improving the current libraries without ever adding any more (at least for the next few years). Balancing this with adding new libraries and showing forward progress is very difficult.
Yep -- been there before. The good thing is that the folks working on ASL are being paid to work on it. Most Boost authors don't get paid -- at least not directly. So there's a simple limit there on how much time they can spend and 'feed their families' as well.
regular_object <http://opensource.adobe.com/ classadobe_1_1regular__object.html>
We're currently putting a fair amount of emphasis on this work - the general idea is that the requirement of polymorphism comes from the requirement to apply algorithms to heterogeneous collections of objects. Hence - runtime polymorphism should be based on Concepts and cannot be properly described by intrusive means (such as inheritance). I'm currently collaborating on a paper on the topic that I'm hoping to have ready for LCSD <http://lcsd.cs.tamu.edu/2006/>
Cool, I'll be at OOPSLA so I'll be there for sure :-) I read through you slides on this subject and I found the case quite compelling -- nothing quite like the 'here's ugly code' to 'here's beautiful code' story to sell a programmer.
XML Parser <http://opensource.adobe.com/ classadobe_1_1xml__parser__t.html> There is a Boost xml, but I haven't seen much Boost activity here. Property tree does some too, but full XML support is hard enough that it will be hard to do in Boost.
http://www.boost-consulting.com/vault/index.php? direction=0&order=&directory=Progamming%20Interfaces
We're getting close to a complete XML parser - this is not a DOM, the idea is that a DOM would be a separate library that could be used with the parser - but the parser can be used just fine without a DOM.
Excellent -- XML parsing is certainly something frequently requested in Boost. I don't think you need a DOM parser, btw, just one that meets the Boost standards -- which I'm sure yours will.
Hopefully people will make you very busy :-) Already you've given me some nice references. Thanks.
You're welcome. Jeff

Jeff Garland wrote:
Sean Parent wrote:
Forest <http://opensource.adobe.com/ group__asl__tutorials__forest.html> ..... We have an active SOC project to build a generic tree...
https://boost-consulting.com:8443/trac/soc/wiki/tree https://boost-consulting.com:8443/trac/soc/wiki/tree/design Are there links to these on port 80? I can't get to 8443 from inside Adobe.
There isn't I'm afraid. There's more here:
http://code.google.com/soc/boost/appinfo.html?csaid=E17EA7C7C537C131
including a pointer to the developers blog. It has some of the design stuff, but not all of it.
I also just started a Google group to collect the non-structured talk <http://groups.google.com/group/boostsoc2006tree> between Bernhard and myself. So if Sean, or whomever at Adobe, feels like discussing trees they are welcome to participate. -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - grafikrobot/yahoo

Rene Rivera wrote:
Jeff Garland wrote:
Sean Parent wrote:
Forest <http://opensource.adobe.com/ group__asl__tutorials__forest.html> ..... We have an active SOC project to build a generic tree...
https://boost-consulting.com:8443/trac/soc/wiki/tree https://boost-consulting.com:8443/trac/soc/wiki/tree/design Are there links to these on port 80? I can't get to 8443 from inside Adobe.
PS. You can also try one of the many anonymous web proxies <http://www.google.com/search?q=anonymous+web+proxy> -- -- Grafik - Don't Assume Anything -- Redshift Software, Inc. - http://redshift-software.com -- rrivera/acm.org - grafik/redshift-software.com -- 102708583/icq - grafikrobot/aim - grafikrobot/yahoo

Sean Parent wrote:
There is a Boost xml, but I haven't seen much Boost activity here. Property tree does some too, but full XML support is hard enough that it will be hard to do in Boost.
http://www.boost-consulting.com/vault/index.php? direction=0&order=&directory=Progamming%20Interfaces
We're getting close to a complete XML parser - this is not a DOM, the idea is that a DOM would be a separate library that could be used with the parser - but the parser can be used just fine without a DOM.
Is my impression correct that the Adobe parser is a push parser? In my opinion, a general parser should be implemented as a pull parser, and the push parser should be implemented on top of it. This is for two simple reasons: 1) Some people will want a pull parser, so the library ought to provide one. 2) Implementing a push parser on top of a pull parser is as easy as getting tokens in a loop and dispatching them. The other way round is not easy at all. You can either parse the entire document on the first pull call, thus losing streamability and having to buffer everything, or you use some sort of context switching, which is hard to implement and has a high overhead. (Threads are actually overkill for this. Win32 Fibers would do, and it should even be possible using setjmp/longjmp - but I wouldn't want to do it.) I said I'd take on Boost.Xml, but I'm still in the design and experimentation phase (the scanner is frustrating me). If you don't mind, I'll see if I can reuse as much code from Adobe.Xml as possible. Sebastian Redl
participants (5)
-
Jeff Garland
-
Peter Dimov
-
Rene Rivera
-
Sean Parent
-
Sebastian Redl