Any chance to call Tango as Extended Standard Library

Denis Koroskin 2korden at gmail.com
Thu Jan 22 01:45:54 PST 2009


On Thu, 22 Jan 2009 09:18:52 +0300, Benji Smith <dlanguage at benjismith.net> wrote:

> IUnknown wrote:
>> Agree. Which is why I said the problems you are facing seem to be  
>> non-technical. I'm suggesting that the D library developers should pick  
>> one and axe the other. *I* think what more important is to have one  
>> single set of containers in a single style rather than have two  
>> separate ones. There is going to be complaining for sure from the  
>> current developers, but in my opinion, the target of having a single  
>> standard library (with core and advanced modules to suit system/ app  
>> programming) is more important than having to make a difficult choice.
>
> Totally agree. While I personally prefer the Java-style containers, I'd  
> gladly accept the STL-style containers if it meant unification of Phobos  
> and Tango.
>
> Having druntime is nice, sure, but application-level code and high-level  
> libraries will bake the container API into their public interfaces, and  
> any code that uses both the Phobos and Tango libraries would have to  
> perform a zillion tedious conversions.
>
> In my mind, the things that need a unified API are (in order of  
> importance):
>
> 1. GC and TypeInfo
> 2. Data structures
> 3. Algorithms
> 4. String processing
> 5. Date & Time
> 6. IO
>
> Everything else (encryption, compression, sockets, regular expressions,  
> could have a totally different API in Tango & Phobos and I wouldn't care  
> much.
>
> Having a common runtime (GC and TypeInfo) is a neat trick, but pretty  
> useless if the data structures and algorithms are entirely different.
>
> And, while I'm perfectly willing to accept either Java-style or  
> STL-style containers, I'd also really appreciate it if the design  
> anticipates and supports custom implementations (because I almost always  
> end up implementing my own multimaps, multisets, circular queues etc)
>
> --benji

I think believe we could take advantage of current state of both libraries in D2 - they are both incomplete and being redesigned to fit D2 better.
We could revisit both Tango and Phobos, and clean them up by removing outdated modules and modules with same functionality. This will make Phobos really small and much easier to learn.

On the other hand, Tango will continue providing all the extended functionality.

Here is a list of Phobos modules that I believe could be safely removed:

- crc32 and std.md5 - these should be deprecated in favor of tango.io.digest.Crc32 and tango.io.digest.Md5
Tango is better designed and has support for other algoriths (MD2, MD4, SHA256, SHA512, Tiger and more).
See http://www.dsource.org/projects/tango/wiki/ChapterEncodingAndCrypto for details.

- std.atomics - tango.core.Atomic is superior to it (std.atomics has nothing but CAS anyway).
- std.base64 - deprecate in favor of tango.io.encode.Base64
- std.cover - is it supposed to be visible to user? Should it be in Phobos?
- std.loader - deprecate in favor of tango.sys.SharedLib
- std.bitarray
- std.openrj
- std.process - merge with tango.sys.Process
- std.regexp - buggy, deprecate in favor of tango.text.Regex
- std.socket, std.socketstream - deprecate in favor of tango.net.*
- std.uni - deprecate in favor of tango.text.Unicode
- std.uri - deprecate in favor of tango.net.Uri
- std.xml - deprecate in favor of tango.text.xml.*
- std.zip and std.zlib - deprecate in favor of tango.io.compress.*

In almost *all* cases Tango has cleaner, faster and less buggy implementation of the same functionality.

Other modules - does anyone use any of these:
std.bitmanip
std.bind
std.boxer
std.outbuffer
std.stdint
std.syserror
std.system
?

There are a lot of modules that only exist in Phobos because of some historical reasons or because Walter wrote it. Is it a sufficient reason for them to stay?
They are no doubt useful sometimes, but are we going to put everything that is useful sometimes into Phobos?

I believe it would be better for everyone to keep Phobos simple and prevent the two libraries from competing by separating the functionality.
Once they don't compete anymore, users won't have to worry about what library to use how to stay compatible.




More information about the Digitalmars-d mailing list