Standard Library Concerns (Phobos / Tango)

Alexander Panek alexander.panek at lomography.com
Thu Feb 7 08:07:23 PST 2008


Michel Fortin wrote:
> I haven't used Tango that much, but each time I look at it it takes much 
> more time to find what I need than with Phobos. With Phobos, I generally 
> open the std folder, glance at the file, pick the one that looks like it 
> has what I need, and find what I want in it (most of the time). In 
> tango, this is much more difficult unless you are already familiar with 
> the layout of the library.

There is a book about D+Tango, and it's really a good reference. Apart 
from that, the online documentation is being worked on. It's not so easy 
to keep the documentation up-to-date by automated ddoc generation while 
putting it in a reasonable format right now. That's a lack that is 
known. If you have any ideas how to improve it, they are very welcome.

> Case in point: tango.stdc.stringz; why does that deserve its own module?

Because you just need that functions, sometimes, without anything else 
from tango.stdc .

> There are so much tiny modules in Tango that I find it difficult to find 
> what I want.

That's true. The tango.group packages try to address this. Have you 
looked at them yet? Maybe you can come up with something you'd need 
additionally?

> Still tango.stdc.stringz, I wonder why the function to 
> convert to a D string is called fromStringz... I can understand the 
> function's name, but it just seem silly to not call it toString and take 
> advantage of function overloading. In this case I find Phobos approach 
> better: string functions are concentrated in one easy-to-find place. 

It's not always ideal to have everything in one place. Contextual 
grouping (tango.group) in combination with selective modules is probably 
  better - besides actually /using/ D's namespace/module features.

 > In
> Tango, you have tango.stdc.stringz, then you have 
> tango.text.convert.<insert your type here>, then you have 
> tango.text.Text, tango.text.Ascii, tango.text.Util and so on. Anyone can 
> guess where the replace function is (within the last three) without 
> looking in each module separately?
> 
> Answer: it's in tango.text.Util; tango.text.Text doesn't deal with D 
> strings, it's the home of the Text class (with also has a replace 
> function, although not the one I was searching for) and tango.text.Ascii 
> holds (as one would expect) functions (only four!) relating to character 
> case which are restricted to ASCII domain.

Where would you put or expected it?

> There are also a few stylistic things I don't like about tango: 
> character case for abbreviations for instance (Ascii instead of ASCII?) 
> and the uppercase module names.

It's a one convention that was chosen in an early stage - one of many, 
where none fits everyone perfectly.



More information about the Digitalmars-d mailing list