From 1b20f768c70521144863cb8b381199f4f7e7e366 Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 20 Sep 2019 16:04:41 +0200 Subject: lib.rst cleanups and reorderings --- doc/lib.rst | 415 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 212 insertions(+), 203 deletions(-) (limited to 'doc/lib.rst') diff --git a/doc/lib.rst b/doc/lib.rst index de7b4dd45..d9c471bbc 100644 --- a/doc/lib.rst +++ b/doc/lib.rst @@ -7,10 +7,7 @@ Nim Standard Library .. 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*. +Nim's library 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 @@ -18,16 +15,19 @@ low-level interface to a C library. Read this `document `_ for a quick overview of the API design. -In addition to the modules in the standard library, third-party packages -created by the Nim community can be used via `Nimble <#nimble>`_, Nim's -package manager. + +Nimble +====== + +Nim's standard library only covers the basics, check +out ``_ for a list of 3rd party packages. Pure libraries ============== -Core ----- +Automatic imports +----------------- * `system `_ Basic procs and operators that every program needs. It also provides IO @@ -36,56 +36,67 @@ Core magic to work. * `threads `_ - Nim thread support. **Note**: This is part of the system module. Do not - import it explicitly. + Basic Nim thread support. **Note**: This is part of the system module. Do not + import it explicitly. Enabled with ``--threads:on``. * `channels `_ Nim message passing support for threads. **Note**: This is part of the - system module. Do not import it explicitly. + system module. Do not import it explicitly. Enabled with ``--threads:on``. + + +Core +---- + +* `bitops `_ + Provides a series of low level methods for bit manipulation. + +* `cpuinfo `_ + This module implements procs to determine the number of CPUs / cores. + +* `endians `_ + This module contains helpers that deal with different byte orders. + +* `lenientops `_ + Provides binary operators for mixed integer/float expressions for convenience. * `locks `_ Locks and condition variables for Nim. -* `rlocks `_ - Reentrant locks for Nim. - * `macros `_ Contains the AST API and documentation of Nim for writing macros. +* `rlocks `_ + Reentrant locks for Nim. + * `typeinfo `_ Provides (unsafe) access to Nim's run time type information. * `typetraits `_ This module defines compile-time reflection procs for working with types. -* `threadpool `_ - Implements Nim's `spawn `_. - -* `cpuinfo `_ - This module implements procs to determine the number of CPUs / cores. - -* `lenientops `_ - Provides binary operators for mixed integer/float expressions for convenience. - -* `bitops `_ - Provides a series of low level methods for bit manipulation. +* `volatile `_ + This module contains code for generating volatile loads and stores, + which are useful in embedded and systems programming. -Collections and algorithms --------------------------- +Algorithms +---------- * `algorithm `_ Implements some common generic algorithms like sort or binary search. -* `tables `_ - Nim hash table support. Contains tables, ordered tables and count tables. +* `sequtils `_ + This module implements operations for the built-in seq type + which were inspired by functional programming languages. -* `sets `_ - Nim hash and bit set support. -* `lists `_ - Nim linked list support. Contains singly and doubly linked lists and - circular lists ("rings"). + +Collections +----------- + +* `critbits `_ + This module implements a *crit bit tree* which is an efficient + container for a sorted set of strings, or for a sorted mapping of strings. * `deques `_ Implementation of a double-ended queue. @@ -97,28 +108,51 @@ Collections and algorithms * `intsets `_ Efficient implementation of a set of ints as a sparse bit set. -* `critbits `_ - This module implements a *crit bit tree* which is an efficient - container for a sorted set of strings, or for a sorted mapping of strings. +* `lists `_ + Nim linked list support. Contains singly and doubly linked lists and + circular lists ("rings"). -* `sequtils `_ - This module implements operations for the built-in seq type - which were inspired by functional programming languages. +* `options `_ + The option type encapsulates an optional value. -* `sharedtables `_ - Nim shared hash table support. Contains shared tables. +* `sets `_ + Nim hash and bit set support. * `sharedlist `_ Nim shared linked list support. Contains shared singly linked list. +* `sharedtables `_ + Nim shared hash table support. Contains shared tables. + +* `tables `_ + Nim hash table support. Contains tables, ordered tables and count tables. + + String handling --------------- -* `strutils `_ - This module contains common string handling operations like changing - case of a string, splitting a string into substrings, searching for - substrings, replacing substrings. +* `std/editdistance `_ + This module contains an algorithm to compute the edit distance between two + Unicode strings. + +* `encodings `_ + Converts between different character encodings. On UNIX, this uses + the ``iconv`` library, on Windows the Windows API. + +* `parseutils `_ + This module contains helpers for parsing tokens, numbers, identifiers, etc. + +* `pegs `_ + This module contains procedures and operators for handling PEGs. + +* `punycode `_ + Implements a representation of Unicode with the limited ASCII character subset. + +* `ropes `_ + 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). * `strformat `_ Macro based standard string interpolation / formatting. Inspired by @@ -128,9 +162,6 @@ String handling This module contains uncommon string handling operations that do not fit with the commonly used operations in strutils. -* `parseutils `_ - This module contains helpers for parsing tokens, numbers, identifiers, etc. - * `strscans `_ This module contains a ``scanf`` macro for convenient parsing of mini languages. @@ -139,6 +170,11 @@ String handling from strings to strings. Supports a case-sensitive, case-insensitive and style-insensitive modes. +* `strutils `_ + This module contains common string handling operations like changing + case of a string, splitting a string into substrings, searching for + substrings, replacing substrings. + * `unicode `_ This module provides support to handle the Unicode UTF-8 encoding. @@ -146,36 +182,41 @@ String handling It provides a single proc that does Unicode to ASCII transliterations. Based on Python's Unidecode module. -* `punycode `_ - Implements a representation of Unicode with the limited ASCII character subset. - -* `encodings `_ - Converts between different character encodings. On UNIX, this uses - the ``iconv`` library, on Windows the Windows API. - -* `pegs `_ - This module contains procedures and operators for handling PEGs. +* `std/wordwrap `_ + This module contains an algorithm to wordwrap a Unicode string. -* `ropes `_ - 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). -* `std/editdistance `_ - This module contains an algorithm to compute the edit distance between two - Unicode strings. +Time handling +------------- -* `std/wordwrap `_ - This module contains an algorithm to wordwrap a Unicode string. +* `std/monotimes `_ + The `monotimes` module implements monotonic timestamps. -* `experimental/diff `_ - This module contains an algorithm to compute the famous "diff" - of two texts by line. +* `times `_ + The ``times`` module contains support for working with time. Generic Operating System Services --------------------------------- +* `distros `_ + This module implements the basics for OS distribution ("distro") detection + and the OS's native package manager. + Its primary purpose is to produce output for Nimble packages, + but it also contains the widely used **Distribution** enum + that is useful for writing platform specific code. + +* `dynlib `_ + This module implements the ability to access symbols from shared libraries. + +* `marshal `_ + Contains procs for serialization and deseralization of arbitrary Nim + data structures. + +* `memfiles `_ + This module provides support for memory mapped files (Posix's ``mmap``) + on the different operating systems. + * `os `_ Basic operating system facilities like retrieving environment variables, reading command line arguments, working with directories, running shell @@ -184,136 +225,119 @@ Generic Operating System Services * `osproc `_ Module for process communication beyond ``os.execShellCmd``. -* `times `_ - The ``times`` module contains support for working with time. - -* `std/monotimes `_ - The `monotimes` module implements monotonic timestamps. - -* `dynlib `_ - This module implements the ability to access symbols from shared libraries. - * `streams `_ 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 `_ - Contains procs for serialization and deseralization of arbitrary Nim - data structures. - * `terminal `_ 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 `_ - This module provides support for memory mapped files (Posix's ``mmap``) - on the different operating systems. - -* `asyncfile `_ - This module implements asynchronous file reading and writing using - ``asyncdispatch``. - -* `asyncstreams `_ - This module provides `FutureStream` - a future that acts as a queue. - -* `distros `_ - This module implements the basics for OS distribution ("distro") detection - and the OS's native package manager. - Its primary purpose is to produce output for Nimble packages, - but it also contains the widely used **Distribution** enum - that is useful for writing platform specific code. - -* `volatile `_ - This module contains code for generating volatile loads and stores, - which are useful in embedded and systems programming. - Math libraries -------------- -* `math `_ - Mathematical operations like cosine, square root. - * `complex `_ This module implements complex numbers and their mathematical operations. -* `rationals `_ - This module implements rational numbers and their mathematical operations. - * `fenv `_ Floating-point environment. Handling of floating-point rounding and exceptions (overflow, zero-devide, etc.). +* `math `_ + Mathematical operations like cosine, square root. + * `mersenne `_ Mersenne twister random number generator. * `random `_ Fast and tiny random number generator. +* `rationals `_ + This module implements rational numbers and their mathematical operations. + * `stats `_ Statistical analysis + Internet Protocols and Support ------------------------------ +* `asyncdispatch `_ + This module implements an asynchronous dispatcher for IO operations. + +* `asyncfile `_ + This module implements asynchronous file reading and writing using + ``asyncdispatch``. + +* `asyncftpclient `_ + This module implements an asynchronous FTP client using the ``asyncnet`` + module. + +* `asynchttpserver `_ + This module implements an asynchronous HTTP server using the ``asyncnet`` + module. + +* `asyncnet `_ + This module implements asynchronous sockets based on the ``asyncdispatch`` + module. + +* `asyncstreams `_ + This module provides `FutureStream` - a future that acts as a queue. + * `cgi `_ This module implements helpers for CGI applications. -* `browsers `_ - This module implements procs for opening URLs with the user's default - browser. +* `cookies `_ + This module contains helper procs for parsing and generating cookies. * `httpclient `_ This module implements a simple HTTP client which supports both synchronous and asynchronous retrieval of web pages. -* `smtp `_ - This module implement a simple SMTP client. - -* `cookies `_ - This module contains helper procs for parsing and generating cookies. - * `mimetypes `_ This module implements a mimetypes database. -* `uri `_ - This module provides functions for working with URIs. - -* `asyncdispatch `_ - This module implements an asynchronous dispatcher for IO operations. - -* `asyncnet `_ - This module implements asynchronous sockets based on the ``asyncdispatch`` - module. - -* `asynchttpserver `_ - This module implements an asynchronous HTTP server using the ``asyncnet`` - module. - -* `asyncftpclient `_ - This module implements an asynchronous FTP client using the ``asyncnet`` - module. +* `nativesockets `_ + This module implements a low-level sockets API. * `net `_ This module implements a high-level sockets API. It replaces the ``sockets`` module. -* `nativesockets `_ - This module implements a low-level sockets API. - * `selectors `_ This module implements a selector API with backends specific to each OS. Currently epoll on Linux and select on other operating systems. +* `smtp `_ + This module implement a simple SMTP client. + +* `uri `_ + This module provides functions for working with URIs. + + +Threading +--------- + +* `threadpool `_ + Implements Nim's `spawn `_. + Parsers ------- -* `parseopt `_ - The ``parseopt`` module implements a command line option parser. +* `htmlparser `_ + This module parses an HTML document and creates its XML tree representation. + +* `json `_ + High performance JSON parser. + +* `lexbase `_ + 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. * `parsecfg `_ The ``parsecfg`` module implements a high performance configuration file @@ -322,24 +346,24 @@ Parsers literals, raw string literals and triple quote string literals are supported as in the Nim programming language. -* `parsexml `_ - 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 `_ The ``parsecsv`` module implements a simple high performance CSV parser. +* `parseopt `_ + The ``parseopt`` module implements a command line option parser. + * `parsesql `_ The ``parsesql`` module implements a simple high performance SQL parser. -* `json `_ - High performance JSON parser. +* `parsexml `_ + 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. -* `lexbase `_ - 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. + +Docutils +-------- * `packages/docutils/highlite `_ Source highlighter for programming or markup languages. Currently @@ -357,10 +381,6 @@ Parsers * `packages/docutils/rstgen `_ This module implements a generator of HTML/Latex from reStructuredText. -* `packages/docutils/sexp `_ - High performance sexp parser and generator, mainly for communication - with emacs. - XML Processing -------------- @@ -372,16 +392,22 @@ XML Processing * `xmlparser `_ This module parses an XML document and creates its XML tree representation. -* `htmlparser `_ - This module parses an HTML document and creates its XML tree representation. + +Generators +---------- * `htmlgen `_ 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 ------------------------- + + +Hashing +------- + +* `base64 `_ + This module implements a base64 encoder and decoder. * `hashes `_ This module implements efficient computations of hash values for diverse @@ -390,68 +416,60 @@ Cryptography and Hashing * `md5 `_ This module implements the MD5 checksum algorithm. -* `base64 `_ - This module implements a base64 encoder and decoder. +* `oids `_ + 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. * `std/sha1 `_ This module implements a sha1 encoder and decoder. -Multimedia support ------------------- - -* `colors `_ - This module implements color handling for Nim. It is used by - the ``graphics`` module. - Miscellaneous ------------- -* `oids `_ - 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. +* `browsers `_ + This module implements procs for opening URLs with the user's default + browser. -* `endians `_ - This module contains helpers that deal with different byte orders. +* `colors `_ + This module implements color handling for Nim. It is used by + the ``graphics`` module. + +* `coro `_ + This module implements experimental coroutines in Nim. * `logging `_ This module implements a simple logger. -* `options `_ - Types which encapsulate an optional value. +* `segfaults `_ + Turns access violations or segfaults into a ``NilAccessError`` exception. * `sugar `_ This module implements nice syntactic sugar based on Nim's macro system. -* `coro `_ - This module implements experimental coroutines in Nim. - * `unittest `_ Implements a Unit testing DSL. -* `segfaults `_ - Turns access violations or segfaults into a ``NilAccessError`` exception. - Modules for JS backend ---------------------- -* `dom `_ - Declaration of the Document Object Model for the JS backend. - -* `jsffi `_ - Types and macros for easier interaction with JavaScript. - * `asyncjs `_ Types and macros for writing asynchronous procedures in JavaScript. +* `dom `_ + Declaration of the Document Object Model for the JS backend. + * `jscore `_ Wrapper of core JavaScript functions. For most purposes you should be using the ``math``, ``json``, and ``times`` stdlib modules instead of this module. +* `jsffi `_ + Types and macros for easier interaction with JavaScript. + Impure libraries ================ @@ -499,6 +517,8 @@ UNIX specific * `posix `_ Contains a wrapper for the POSIX standard. +* `linux `_ + Contains a wrapper for Linux's APIs. Regular expressions @@ -533,14 +553,3 @@ Network Programming and Internet Protocols * `openssl `_ Wrapper for OpenSSL. - - -Nimble -====== - -Nimble is a package manager for the Nim programming language. -For instructions on how to install Nimble packages see -`its README `_. - -To see a list of Nimble's packages, check out ``_ -or the `packages repo `_ on GitHub. -- cgit 1.4.1-2-gfad0