Welcome to Tango!
This reference manual seeks to document a library that has blossomed from a culture of developers of unique talent, diverse experience, creative inclination, eclectic method, and hard work ethic. These people include a grand mix of visionaries, artists, students, engineers, entrepreneurs, academics, scientists, and auto didactics, who, while not so much professing to have found an ideal in software development, nevertheless continually push the limits to obtain a form that is consistent, practical, and pleasantly wieldy in the hands of the typical programmer.
No library or language can claim to be an all-encompassing ideal in the muddy fields of software engineering, and so Tango must remain modest in its proposal of its own general applicability in this area. Meanwhile, though, the proof of its worth continues to grow as applications are constructed and developer's push the limits of its capabilities, a process that essentially "tests the metal" of the library. The process has led to a much refined platform for programming and a fine vehicle for the promotion of the D language.
As the reader progresses through this manual, the style or flavor of Tango might trigger memories of Java, C++, or even Lisp. Naturally, this is merely a natural effect of the contributions made by the combined experiences of Tango's designers. The library is a project that has grown out of a community that, while often sharing conflicting opinions on many matters, nevertheless has enjoyed a common spark of vision that continues to guide its success and popularity.
This leads us to the purpose of this manual. Quite obviously, a library like Tango must be comprehensible to be of any practical benefit to its user, and this manual must be written in such a way as to make the process as painless as possible. Naturally, some pangs are nearly always present in a learning process: this manual does not pretend to be blind to this. We strive to represent Tango details, techniques, and elements in as much detail and simplicity as we feel possible: examples should be plentiful, terms and types should be well-defined, links to further reading on algorithms and techniques should abound. Most importantly, though, reader feedback is encouraged.
With that said, let us present an overview of the contents that we expect to cover in this manual:
Part 1 - First Steps
We concentrate on introducing the reader to Tango. We learn how to create a simple Tango application and get a feel for the tools used in the building process. Following chapters in this section introduce simple console interaction, input and output, and file system operations. Next we investigate slightly more complicated (though highly flexible) elements like conduits, buffers and streams.
Part 2 - Intermediate Steps
We start to explore the fundamental periphery of the library, those elements that represent some basic building blocks of applications. We introduce Tango's networking interface, math functions, and container classes before moving on to the time and locale API's, text conversion tools, and logging facilities.
Part 3 - Advanced Steps
In these chapters, we progress to some of the more esoteric functionality of Tango, even though these items are no less critical to certain applications then the previous sections. We cover the core library functionality here followed by chapters on threading and child processes. Remaining chapters detail cryptography and encoding, Tango clusters, and the virtual file system facility.
We hope you enjoy reading the manual. So that the library and documentation might continue to improve, the reader should feel no hindrance to contributing ideas or corrections should there be found anything amiss, inaccurate, or incomprehensible among these pages.