diff options
author | Araq <rumpf_a@web.de> | 2019-12-18 18:34:39 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-12-24 17:33:27 +0100 |
commit | fd5aa8930470b7e15a30e2103f9bd088910f1a1c (patch) | |
tree | f4f851e0340aa47bde9b4e591c57d434fcea6a9d /doc | |
parent | 2616a86d4b65ae6f761721c29c8ebaf8cf5fcfff (diff) | |
download | Nim-fd5aa8930470b7e15a30e2103f9bd088910f1a1c.tar.gz |
added guidelines for evolving Nim's stdlib
Diffstat (limited to 'doc')
-rw-r--r-- | doc/contributing.rst | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/doc/contributing.rst b/doc/contributing.rst index e927683d0..9778df843 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -444,3 +444,65 @@ Code reviews .. include:: docstyle.rst +Evolving the stdlib +=================== + +As outlined in https://github.com/nim-lang/RFCs/issues/173 there are a couple +of guidelines about what should go into the stdlib, what should be added and +what eventually should be removed. + + +What the compiler itself needs must be part of the stdlib +--------------------------------------------------------- + +Maybe in the future the compiler itself can depend on Nimble packages but for +the time being, we strive to have zero dependencies in the compiler as the +compiler is the root of the bootstrapping process and is also used to build +Nimble. + + +Vocabulary types must be part of the stdlib +------------------------------------------- + +These are types most packages need to agree on for better interoperability, +for example ``Option[T]``. This rule also covers the existing collections like +``Table``, ``CountTable`` etc. "Sorted" containers based on a tree-like data +structure are still missing and should be added. + +Time handling, especially the ``Time`` type are also covered by this rule. + + +Existing, battle-tested modules stay +------------------------------------ + +Reason: There is no benefit in moving them around just to fullfill some design +fashion as in "Nim's core MUST BE SMALL". If you don't like an existing module, +don't import it. If a compilation target (e.g. JS) cannot support a module, +document this limitation. + +This covers modules like ``os``, ``osproc``, ``strscans``, ``strutils``, +``strformat``, etc. + + +New stdlib modules do not start as stdlib modules +------------------------------------------------- + +As we strive for higher quality everywhere, it's easier to adopt existing, +battle-tested modules eventually rather than creating modules from scratch. + + +Little additions are acceptable +------------------------------- + +As long as they are documented and tested well, adding little helpers +to existing modules is acceptable. For two reasons: + +1. It makes Nim easier to learn and use in the long run. + ("Why does sequtils lack a ``countIt``? + Because version 1.0 happens to have lacked it? Silly...") +2. To encourage contributions. Contributors often start with PRs that + add simple things and then they stay and also fix bugs. Nim is an + open source project and lives from people's contributions and involvement. + Newly introduced issues have to be balanced against motivating new people. We know where + to find perfectly designed pieces of software that have no bugs -- these are the systems + that nobody uses. |