diff options
Diffstat (limited to 'doc/lib.rst')
-rw-r--r-- | doc/lib.rst | 585 |
1 files changed, 585 insertions, 0 deletions
diff --git a/doc/lib.rst b/doc/lib.rst new file mode 100644 index 000000000..66928055a --- /dev/null +++ b/doc/lib.rst @@ -0,0 +1,585 @@ +==================== +Nim Standard Library +==================== + +:Author: Andreas Rumpf +:Version: |nimversion| + +.. contents:: + + "The good thing about reinventing the wheel is that you can get a round one." + +Though the Nim Standard Library is still evolving, it is already quite +usable. It is divided into *pure libraries*, *impure libraries* and *wrappers*. + +Pure libraries do not depend on any external ``*.dll`` or ``lib*.so`` binary +while impure libraries do. A wrapper is an impure library that is a very +low-level interface to a C library. + +Read this `document <apis.html>`_ for a quick overview of the API design. + +The `bottom <#nimble>`_ of this page includes a list of 3rd party packages +created by the Nim community. These packages are a useful addition to the +modules in the standard library. + + +Pure libraries +============== + +Core +---- + +* `system <system.html>`_ + Basic procs and operators that every program needs. It also provides IO + facilities for reading and writing text and binary files. It is imported + implicitly by the compiler. Do not import it directly. It relies on compiler + magic to work. + +* `threads <threads.html>`_ + Nim thread support. **Note**: This is part of the system module. Do not + import it explicitly. + +* `channels <channels.html>`_ + Nim message passing support for threads. **Note**: This is part of the + system module. Do not import it explicitly. + +* `locks <locks.html>`_ + Locks and condition variables for Nim. + +* `rlocks <rlocks.html>`_ + Reentrant locks for Nim. + +* `macros <macros.html>`_ + Contains the AST API and documentation of Nim for writing macros. + +* `typeinfo <typeinfo.html>`_ + Provides (unsafe) access to Nim's run time type information. + +* `typetraits <typetraits.html>`_ + This module defines compile-time reflection procs for working with types. + +* `threadpool <threadpool.html>`_ + Implements Nim's `spawn <manual.html#spawn>`_. + +* `cpuinfo <cpuinfo.html>`_ + This module implements procs to determine the number of CPUs / cores. + + +Collections and algorithms +-------------------------- + +* `algorithm <algorithm.html>`_ + Implements some common generic algorithms like sort or binary search. +* `tables <tables.html>`_ + Nim hash table support. Contains tables, ordered tables and count tables. +* `sets <sets.html>`_ + Nim hash and bit set support. +* `lists <lists.html>`_ + Nim linked list support. Contains singly and doubly linked lists and + circular lists ("rings"). +* `queues <queues.html>`_ + Implementation of a queue. The underlying implementation uses a ``seq``. +* `intsets <intsets.html>`_ + Efficient implementation of a set of ints as a sparse bit set. +* `critbits <critbits.html>`_ + This module implements a *crit bit tree* which is an efficient + container for a set or a mapping of strings. +* `sequtils <sequtils.html>`_ + This module implements operations for the built-in seq type + which were inspired by functional programming languages. + + +String handling +--------------- + +* `strutils <strutils.html>`_ + This module contains common string handling operations like changing + case of a string, splitting a string into substrings, searching for + substrings, replacing substrings. + +* `strmisc <strmisc.html>`_ + This module contains uncommon string handling operations that do not + fit with the commonly used operations in strutils. + +* `parseutils <parseutils.html>`_ + This module contains helpers for parsing tokens, numbers, identifiers, etc. + +* `strscans <strscans.html>`_ + This module contains a ``scanf`` macro for convenient parsing of mini languages. + +* `strtabs <strtabs.html>`_ + The ``strtabs`` module implements an efficient hash table that is a mapping + from strings to strings. Supports a case-sensitive, case-insensitive and + style-insensitive mode. An efficient string substitution operator ``%`` + for the string table is also provided. + +* `unicode <unicode.html>`_ + This module provides support to handle the Unicode UTF-8 encoding. + +* `encodings <encodings.html>`_ + Converts between different character encodings. On UNIX, this uses + the ``iconv`` library, on Windows the Windows API. + +* `pegs <pegs.html>`_ + This module contains procedures and operators for handling PEGs. + +* `ropes <ropes.html>`_ + This module contains support for a *rope* data type. + Ropes can represent very long strings efficiently; especially concatenation + is done in O(1) instead of O(n). + +* `matchers <matchers.html>`_ + This module contains various string matchers for email addresses, etc. + +* `subexes <subexes.html>`_ + This module implements advanced string substitution operations. + + +Generic Operating System Services +--------------------------------- + +* `os <os.html>`_ + Basic operating system facilities like retrieving environment variables, + reading command line arguments, working with directories, running shell + commands, etc. + +* `osproc <osproc.html>`_ + Module for process communication beyond ``os.execShellCmd``. + +* `times <times.html>`_ + The ``times`` module contains basic support for working with time. + +* `dynlib <dynlib.html>`_ + This module implements the ability to access symbols from shared libraries. + +* `streams <streams.html>`_ + This module provides a stream interface and two implementations thereof: + the `FileStream` and the `StringStream` which implement the stream + interface for Nim file objects (`File`) and strings. Other modules + may provide other implementations for this standard stream interface. + +* `marshal <marshal.html>`_ + Contains procs for serialization and deseralization of arbitrary Nim + data structures. + +* `terminal <terminal.html>`_ + This module contains a few procedures to control the *terminal* + (also called *console*). The implementation simply uses ANSI escape + sequences and does not depend on any other module. + +* `memfiles <memfiles.html>`_ + This module provides support for memory mapped files (Posix's ``mmap``) + on the different operating systems. + +* `fsmonitor <fsmonitor.html>`_ + This module implements the ability to monitor a directory/file for changes + using Posix's inotify API. + + **Warning:** This module will likely be moved out to a Nimble package soon. + +* `asyncfile <asyncfile.html>`_ + This module implements asynchronous file reading and writing using + ``asyncdispatch``. + +Math libraries +-------------- + +* `math <math.html>`_ + Mathematical operations like cosine, square root. + +* `complex <complex.html>`_ + This module implements complex numbers and their mathematical operations. + +* `rationals <rationals.html>`_ + This module implements rational numbers and their mathematical operations. + +* `fenv <fenv.html>`_ + Floating-point environment. Handling of floating-point rounding and + exceptions (overflow, zero-devide, etc.). + +* `basic2d <basic2d.html>`_ + Basic 2d support with vectors, points, matrices and some basic utilities. + +* `basic3d <basic3d.html>`_ + Basic 3d support with vectors, points, matrices and some basic utilities. + +* `mersenne <mersenne.html>`_ + Mersenne twister random number generator. + +* `random <random.html>`_ + Fast and tiny random number generator. + +* `stats <stats.html>`_ + Statistical analysis + +Internet Protocols and Support +------------------------------ + +* `cgi <cgi.html>`_ + This module implements helpers for CGI applications. + +* `scgi <scgi.html>`_ + This module implements helpers for SCGI applications. + +* `browsers <browsers.html>`_ + This module implements procs for opening URLs with the user's default + browser. + +* `httpserver <httpserver.html>`_ + This module implements a simple HTTP server. + +* `httpclient <httpclient.html>`_ + This module implements a simple HTTP client which supports both synchronous + and asynchronous retrieval of web pages. + +* `smtp <smtp.html>`_ + This module implement a simple SMTP client. + +* `cookies <cookies.html>`_ + This module contains helper procs for parsing and generating cookies. + +* `mimetypes <mimetypes.html>`_ + This module implements a mimetypes database. + +* `uri <uri.html>`_ + This module provides functions for working with URIs. + +* `asyncdispatch <asyncdispatch.html>`_ + This module implements an asynchronous dispatcher for IO operations. + +* `asyncnet <asyncnet.html>`_ + This module implements asynchronous sockets based on the ``asyncdispatch`` + module. + +* `asynchttpserver <asynchttpserver.html>`_ + This module implements an asynchronous HTTP server using the ``asyncnet`` + module. + +* `asyncftpclient <asyncftpclient.html>`_ + This module implements an asynchronous FTP client using the ``asyncnet`` + module. + +* `net <net.html>`_ + This module implements a high-level sockets API. It will replace the + ``sockets`` module in the future. + +* `nativesockets <nativesockets.html>`_ + This module implements a low-level sockets API. + +* `selectors <selectors.html>`_ + This module implements a selector API with backends specific to each OS. + Currently epoll on Linux and select on other operating systems. + +Parsers +------- + +* `parseopt <parseopt.html>`_ + The ``parseopt`` module implements a command line option parser. + +* `parseopt2 <parseopt2.html>`_ + The ``parseopt2`` module implements a command line option parser. This + supports long and short command options with optional values and command line + arguments. + +* `parsecfg <parsecfg.html>`_ + The ``parsecfg`` module implements a high performance configuration file + parser. The configuration file's syntax is similar to the Windows ``.ini`` + format, but much more powerful, as it is not a line based parser. String + literals, raw string literals and triple quote string literals are supported + as in the Nim programming language. + +* `parsexml <parsexml.html>`_ + The ``parsexml`` module implements a simple high performance XML/HTML parser. + The only encoding that is supported is UTF-8. The parser has been designed + to be somewhat error correcting, so that even some "wild HTML" found on the + Web can be parsed with it. + +* `parsecsv <parsecsv.html>`_ + The ``parsecsv`` module implements a simple high performance CSV parser. + +* `parsesql <parsesql.html>`_ + The ``parsesql`` module implements a simple high performance SQL parser. + +* `json <json.html>`_ + High performance JSON parser. + +* `lexbase <lexbase.html>`_ + This is a low level module that implements an extremely efficient buffering + scheme for lexers and parsers. This is used by the diverse parsing modules. + +* `highlite <highlite.html>`_ + Source highlighter for programming or markup languages. Currently + only few languages are supported, other languages may be added. + The interface supports one language nested in another. + +* `rst <rst.html>`_ + This module implements a reStructuredText parser. A large subset + is implemented. Some features of the markdown wiki syntax are + also supported. + +* `rstast <rstast.html>`_ + This module implements an AST for the reStructuredText parser. + +* `rstgen <rstgen.html>`_ + This module implements a generator of HTML/Latex from reStructuredText. + +* `sexp <sexp.html>`_ + High performance sexp parser and generator, mainly for communication + with emacs. + + +XML Processing +-------------- + +* `xmldom <xmldom.html>`_ + This module implements the XML DOM Level 2. + +* `xmldomparser <xmldomparser.html>`_ + This module parses an XML Document into a XML DOM Document representation. + +* `xmltree <xmltree.html>`_ + A simple XML tree. More efficient and simpler than the DOM. It also + contains a macro for XML/HTML code generation. + +* `xmlparser <xmlparser.html>`_ + This module parses an XML document and creates its XML tree representation. + +* `htmlparser <htmlparser.html>`_ + This module parses an HTML document and creates its XML tree representation. + +* `htmlgen <htmlgen.html>`_ + This module implements a simple XML and HTML code + generator. Each commonly used HTML tag has a corresponding macro + that generates a string with its HTML representation. + +Cryptography and Hashing +------------------------ + +* `hashes <hashes.html>`_ + This module implements efficient computations of hash values for diverse + Nim types. + +* `md5 <md5.html>`_ + This module implements the MD5 checksum algorithm. + +* `base64 <base64.html>`_ + This module implements a base64 encoder and decoder. + +* `securehash <securehash.html>`_ + This module implements a sha1 encoder and decoder. + +Multimedia support +------------------ + +* `colors <colors.html>`_ + This module implements color handling for Nim. It is used by + the ``graphics`` module. + + +Miscellaneous +------------- + +* `events <events.html>`_ + This module implements an event system that is not dependent on external + graphical toolkits. + +* `oids <oids.html>`_ + An OID is a global ID that consists of a timestamp, + a unique counter and a random value. This combination should suffice to + produce a globally distributed unique ID. This implementation was extracted + from the Mongodb interface and it thus binary compatible with a Mongo OID. + +* `endians <endians.html>`_ + This module contains helpers that deal with different byte orders. + +* `logging <logging.html>`_ + This module implements a simple logger. + +* `options <options.html>`_ + Types which encapsulate an optional value. + +* `future <future.html>`_ + This module implements new experimental features. Currently the syntax + sugar for anonymous procedures. + +* `coro <coro.html>`_ + This module implements experimental coroutines in Nim. + +* `unittest <unittest.html>`_ + Implements a Unit testing DSL. + +Modules for JS backend +--------------------------- + +* `dom <dom.html>`_ + Declaration of the Document Object Model for the JS backend. + + +Deprecated modules +------------------ + +* `asyncio <asyncio.html>`_ + This module implements an asynchronous event loop for sockets. + **Deprecated since version 0.11.2:** + Use the `asyncnet <asyncnet.html>`_ together with the + `asyncdispatch <asyncdispatch.html>`_ module instead. + +* `ftpclient <ftpclient.html>`_ + This module implements an FTP client. + **Deprecated since version 0.11.3:** + Use the `asyncftpclient <asyncftpclient.html>`_ module instead. + +* `sockets <sockets.html>`_ + This module implements a simple portable type-safe sockets layer. + **Deprecated since version 0.11.2:** + Use the `net <net.html>`_ or the `rawsockets <rawsockets.html>`_ module + instead. + +* `rawsockets <rawsockets.html>`_ + **Deprecated since version 0.11.4:** + This module has been renamed to `nativesockets <nativesockets.html>`_. + + +Impure libraries +================ + +Regular expressions +------------------- + +* `re <re.html>`_ + This module contains procedures and operators for handling regular + expressions. The current implementation uses PCRE. + +* `nre <nre.html>`_ + Another implementation of procedures for using regular expressions. Also uses + PCRE. + + +Database support +---------------- + +* `db_postgres <db_postgres.html>`_ + A higher level PostgreSQL database wrapper. The same interface is implemented + for other databases too. + +* `db_mysql <db_mysql.html>`_ + A higher level MySQL database wrapper. The same interface is implemented + for other databases too. + +* `db_sqlite <db_sqlite.html>`_ + A higher level SQLite database wrapper. The same interface is implemented + for other databases too. + + +Other +----- + +* `ssl <ssl.html>`_ + This module provides an easy to use sockets-style + Nim interface to the OpenSSL library. + + +Wrappers +======== + +The generated HTML for some of these wrappers is so huge that it is +not contained in the distribution. You can then find them on the website. + +Windows specific +---------------- + +* `winlean <winlean.html>`_ + Contains a wrapper for a small subset of the Win32 API. + + +UNIX specific +------------- + +* `posix <posix.html>`_ + Contains a wrapper for the POSIX standard. + + +Regular expressions +------------------- + +* `pcre <pcre.html>`_ + Wrapper for the PCRE library. + + +GUI libraries +------------- + +* `iup <iup.html>`_ + Wrapper of the IUP GUI library. + + +Database support +---------------- + +* `postgres <postgres.html>`_ + Contains a wrapper for the PostgreSQL API. +* `mysql <mysql.html>`_ + Contains a wrapper for the mySQL API. +* `sqlite3 <sqlite3.html>`_ + Contains a wrapper for SQLite 3 API. +* `odbcsql <odbcsql.html>`_ + interface to the ODBC driver. + + +Network Programming and Internet Protocols +------------------------------------------ + +* `libuv <libuv.html>`_ + Wrapper for the libuv library used for async I/O programming. + +* `joyent_http_parser <joyent_http_parser.html>`_ + Wrapper for the joyent's high-performance HTTP parser. + +* `libcurl <libcurl.html>`_ + Wrapper for the libcurl library. + +* `openssl <openssl.html>`_ + Wrapper for OpenSSL. + + + +Scientific computing +-------------------- + +* `libsvm <libsvm.html>`_ + Low level wrapper for `lib svm <http://www.csie.ntu.edu.tw/~cjlin/libsvm/>`_. + + +Nimble +====== + +Nimble is a package manager for the Nim programming language. +For instructions on how to install Nimble packages see +`its README <https://github.com/nim-lang/nimble#readme>`_. + +Official packages +----------------- + +These packages are officially supported and will therefore be continually +maintained to ensure that they work with the latest versions of the Nim +compiler. + +.. raw:: html + + <div id="officialPkgList"><b>If you are reading this you are missing + nimblepkglist.js or have javascript disabled in your browser.</b></div> + +Unofficial packages +------------------- + +These packages have been developed by independent Nim developers and as +such may not always be up to date with the latest developments in the +Nim programming language. + +.. raw:: html + + <div id="unofficialPkgList"><b>If you are reading this you are missing + nimblepkglist.js or have javascript disabled in your browser.</b></div> + + <script type="text/javascript" src="nimblepkglist.js"></script> + <script type="text/javascript" src="http://irclogs.nim-lang.org/packages?callback=gotPackageList"></script> |