"Phango" container classes

Bill Baxter dnewsgroup at billbaxter.com
Mon Oct 1 12:29:29 PDT 2007


Bruce Adams wrote:
> Bill Baxter Wrote:
> 
>> I just decided to do a little experiment to see how hard it would be to 
>> make Tango's containers work with Phobos.
>>
>> Answer: less than an hour's work.
>>
>> Here's all it takes:
>> - Copy tango/util/collections/* to phango/util/collections/*.
>> - Copy tango/core/Exception.di to phango/core/Exception.d
>> - Replace all instances of 'tango' with 'phango'.
>> - Replace all instances of 'toUtf8' with 'toString'
>> - Comment out the IReader,IWriter imports in LinkMap.d
>> - Comment out all function prototypes in Exception.d.
>> - Make TracedException a simple subclass of Exception in Exception.d.
>> - Comment out anything else in Exception.d that gives compiler errors.
>>
>> Then voila!  You have a set of container classes for Phobos.
>>
>> I did some rudimentary testing by copying all the unittests from the 
>> containers to one big containers.d test program.  After changing Cout's 
>> to writefln's, all seems to work like a charm.
>>
>> So this is a possible option for anyone who would like a set of 
>> Java-esque container classes to use with Phobos.  Certainly a heck of a 
>> lot easier than trying to port any implementation of C++ std::map to D.  :-)
>>
>> --bb
> 
> Good stuff. Have you posted the source anywhere?

No I mostly wanted to point out that the Tango containers are 95% 
independent of the Tango-specific runtime features, and easy to port to 
Phobos.  And I wanted to suggest the cool name "Phango, evil twin 
brother of Tangobos". :-)  Maybe "Phandango" would be a better name, 
though.

> I see tango uses Red-black trees in some places so in those its STL
> equivalent or better anyway. 

Yes, the TreeSet and TreeMap should have same asymptotic performance 
characteristics as STL std::set and std::map.

> I guess we will get all this stuff as
> soon as the tango / phobos incompatability is resolved. 

That's what I'm thinking too.  But I wanted to point out that anyone who 
is desperate for containers today can extract them from Tango with less 
than an hour's work of mostly mindless search and replace.

> Out of
> interest, if you just throw the all incompatibles out of tango what
> kind of phango are we left with? Does it look like a worthwhile job? 

I suspect you'd still have most of it.  Far easier than porting C++ code 
anyway.  Maybe the threading stuff is too dependent on tango's Object to 
port easily.  I'm not sure.

--bb



More information about the Digitalmars-d mailing list