Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

doc.title

Go to the documentation of this file.
00001 /******************************************************************************
00002 
00003         @mainpage The Mango Tree
00004 
00005         Mango is a collection of D packages with an orientation toward server-side programming. These packages may be used together or in isolation and, in many cases, can be just as applicable to client-side development. Mango is targeted for Win32 and linux platforms.
00006 
00007         There are currently eleven packages under the Mango Tree:
00008 
00009         @li mango.io: a high-performance buffered IO package. Primary functionality includes memory Buffers, external Conduits (files, sockets, etc), file-system manipulation, several flavors of Readers and Writers (formatted data), TextLayout support, class serialization, tokenization, and a whole lot more. Socket support is via the gracious provision of Christopher Miller's socket module. See File, UnicodeFile, FilePath, FileProxy, FileConduit, FileSystem, FileConst, SocketConduit, ServerSocket, MulticastSocket, SocketListener, Token, Print, Stdin, Stdout, Buffer, Reader, Writer, IPickle and PickleRegistry. Mango.io is configurable for stream-filtering, and for a variety of text-encodings (via BufferCodec, or the ICU wrappers).
00010 
00011         @li mango.http.client: An HTTP client for conversing with a remote HTTP server. Supports headers, query parameters, cookies, timeout etc. Tokenizer classes in mango.io are handy for parsing returned content. See HttpClient.
00012 
00013         @li mango.http.server: an HTTP server framework is provided for implementing a variety of high performance servers based on the HTTP protocol. This is not a fully-fledged v1.1 implementation. That is, it doesn't currently support 'fields' or 'keep alive'. However, it happily processes each request without allocating memory, making it unusually efficient. This is an example of how D array-slicing can seriously improve runtime efficiency. An open-source HTTPS library should be fairly easy to bolt in. Modules HttpServer and IProvider are the primary entry points: you implement an instance of the latter, and hand it to the former.
00014 
00015         @li mango.servlet: A servlet-style engine that sits upon mango.server. Includes most of the things that Java servlet programmers would expect, and attempts to improve in certain key areas such as the IO system. See Servlet and ServletProvider, and the <A HREF="http://trac.dsource.org/projects/mango/browser/trunk/example/servlets.d">Servlets</A> example.
00016 
00017         @li mango.cache: Some simple caching mechanisms. Includes MRU caching via a queue, and level-two caching (to disk) via class-serialization. Now based upon a derivative of Doug Lea's concurrent hashmap. The mango.cluster package derives from  mango.cache, so it's really easy to switch between a local cache implementation and a clustered version. See ICache, IMutableCache, PlainCache, QueuedCache and VirtualCache.
00018 
00019         @li mango.log: An implementation of the popular Log4J package, for logging and tracing of runtime behaviour. See <A HREF="http://logging.apache.org/log4j/docs/documentation.html">this page</A> for an introduction to Log4J. Mango.log exposes an extensible and customizable framework, has been optimised heavily for minimal runtime overhead, does not impact the GC once initialised, and operates with either Mango.io or Phobos streams. Mango.log can generate remote log messages for use with <A HREF="http://logging.apache.org/log4j/docs/chainsaw.html">Chainsaw</A>, and has a browser-based 'Administrator' which allows remote, dynamic inspection and adjustment of the log settings within an executing program. See Logger, BasicConfigurator and PropertyConfigurator. There are a number of examples that show how to use these facilities ~ see <A HREF="http://trac.dsource.org/projects/mango/browser/trunk/example/logging.d">Logging</A>
00020 
00021         @li mango.cluster: A clustering package for servers and other network aware applications. Currently supports clustered caching and queuing, where the former is limited to a fixed MRU number of entries per node, and the latter is limited to an upper memory waterline. While the underlying QOS (quality of service) substrate is setup to be plugable, the QOS currently provided is stream/multicast based. Note that this package is not a substitute for a persistence layer; instead it is a tool for enabling horizontal scaling within a system that has been designed explicitly from the outset to scale. On the other hand, it can significantly enhance the throughput of any persistence layer by offloading a large percentage of read operations. See CacheInvalidatee, CacheInvalidator,NetworkCombo, NetworkAlert, NetworkCache and NetworkQueue.
00022 
00023         @li mango.icu: Set of wrappers around the ICU I18N project. See <A HREF="http://www-306.ibm.com/software/globalization/icu/index.jsp">this page</A> for the scoop on what is probably the most comprehensive and functional project in this particular arena. Mango.icu exposes the C API in a manner that takes advantage of D arrays and so on. See UCalendar, UChar, UConverter, UDateFormat, ULocale, UMessageFormat, UNumberFormat, UResourceBundle, UString, UText, UCollator, USet, UTransform, USearch, UNormalize, UDomainName, UBreakIterator, URegex, and UTimeZone. Numeric formatting is handled by a range of subclasses,including UDecimalFormat, UCurrencyFormat, UPercentFormat, UScientificFormat, and USpelloutFormat. There's a set of adapter classes in UMango which can be used to bind the ICU converters to Mango.io, thereby enabling Reader/Writer streaming with the full suite of ICU transcoders.
00024 
00025         @li mango.convert: includes a range of formatting modules, including Sprint, Format, Integer, Double, and Atoi. The precision floating-point converters from David Gay are wrapped as DGDouble, and can be configured instead of Double. There's also a date parser and formatter, Rfc1123. Finally, there's a complement of high-performance Unicode converters, along with a module for handling unicode BOM. Mango.convert is templated for char, wchar, and dchar. The printf() compatable Sprint and Print convert char, wchar, and dchar arguments appropriately for the target representation.
00026 
00027         @li mango.sys: includes a number of low-level utilities such as ByteSwap, and various O/S-specific functions. Also includes a great time-conversion module, Epoch, which hides the complexity of the relevant O/S functions ~ see <A HREF="http://trac.dsource.org/projects/mango/browser/trunk/example/localtime.d">LocalTime</A>.
00028 
00029         @li mango.text: Low overhead unicode token-parsing and string handling. Includes String, ImmutableString, CharToken, SetToken, QuotedToken, LineToken and RegexToken. Tokens support streaming via a callback mechanism to update the content.
00030 
00031         Additional packages under construction:
00032 
00033         @li mango.containers: includes a hierarchical based containers (collections, as they are known in Java) library.  This library is still a work in progress.
00034 
00035         @li mango.xml.dom: provides a DOM implementation as well as a parser to go along with it.
00036 
00037         @li mango.xml.rpc: uses the dom package to provide an <A HREF="http://www.xmlrpc.com/">XML-RPC</A> interface
00038 
00039 
00040         Mango packages target both Ares and Phobos. To compile for Ares, make sure to use -version=Ares when compiling, and point the -I option at the Ares packages. Build.exe will need a -X option also (for Ares).
00041 
00042         Package dependencies are as follows (from left to right):
00043 
00044         @li mango.sys          => [none]
00045         @li mango.convert      => [none]
00046         @li mango.io           => mango.convert, mango.sys
00047         @li mango.log          => mango.io (without -version=Isolated)
00048         @li mango.icu          => mango.io (without -version=Isolated)
00049         @li mango.cache        => mango.io
00050         @li mango.http.server  => mango.io
00051         @li mango.http.client  => mango.io, mango.server
00052         @li mango.cluster      => mango.io, mango.cache, mango.log
00053         @li mango.servlet      => mango.io, mango.http.server, mango.cache, mango.log
00054         @li mango.containers   => [none]
00055         @li mango.xml.dom      => mango.icu, mango.containers, mango.io
00056         @li mango.xml.rpc      => mango.xml.dom
00057         @li mango.text         => mango.convert
00058 
00059         Mango.icu and Mango.log are also made available as independent packages, outside of the regular Mango Tree. To enable this, specify the flag -version=Isolated when building those packages
00060 
00061         You might take a look at the examples <A HREF="http://svn.dsource.org/projects/mango/trunk/example/">over here</A> to get a general feel for functionality, and browse the pdf files <A HREF="http://svn.dsource.org/projects/mango/trunk/doc/">here</A>. Those will probably be sufficient to get an idea where the Mango Tree might come in handy within your projects.
00062 
00063         Discussion forums are hosted <A HREF="http://www.dsource.org/forums/viewforum.php?f=5">here</A>, and the general introduction starts <A HREF="http://www.dsource.org/forums/viewtopic.php?t=148">here</A>. There's also a <A HREF="http://trac.dsource.org/projects/mango/">Wiki</A>, which has the most up-to-date information. Please also check the <A HREF="http://trac.dsource.org/projects/mango/browser/trunk/readme.txt">release notes</A> for details on what has changed.
00064 
00065 *******************************************************************************/
00066 

Generated on Sat Dec 24 17:28:32 2005 for Mango by  doxygen 1.4.0