diff --git a/llvm/docs/CodingStandards.rst b/llvm/docs/CodingStandards.rst --- a/llvm/docs/CodingStandards.rst +++ b/llvm/docs/CodingStandards.rst @@ -70,19 +70,27 @@ C++ Standard Library -------------------- -Use the C++ standard library facilities whenever they are available for -a particular task. LLVM and related projects emphasize and rely on the standard -library facilities as much as possible. - -We avoid some standard facilities, like the I/O streams, and instead use LLVM's -streams library (raw_ostream_). More detailed information on these subjects is -available in the :doc:`ProgrammersManual`. +Instead of implementing custom data structures we encourage the use of C++ +standard library facilities or LLVM support libraries whenever they are +available for a particular task. LLVM and related projects emphasize and rely +on the standard library facilities and the LLVM support libraries as much as +possible. LLVM support libraries (for example, `ADT `_) -implement functionality missing in the standard library. Such libraries are -usually implemented in the ``llvm`` namespace and follow the expected standard -interface, when there is one. +implement specialized data structures or functionality missing in the standard +library. Such libraries are usually implemented in the ``llvm`` namespace and +follow the expected standard interface, when there is one. + +When both C++ and the LLVM support libraries provide similar functionality, +and there isn't a specific reason to favor the C++ implementation, it is +generally preferable to use the LLVM library. For example, `llvm::DenseMap` +should almost always be used instead of `std::map` or `std::unordered_map`, +and `llvm::SmallVector` should usually be used instead of `std::vector`. + +We explicitly avoid some standard facilities, like the I/O streams, and instead +use LLVM's streams library (raw_ostream_). More detailed information on these +subjects is available in the :doc:`ProgrammersManual`. Guidelines for Go code ----------------------