|
| 1 | +# Documentation Index |
| 2 | + |
| 3 | +This page describes the overall organization of documentation for the Swift toolchain. |
| 4 | +It is divided into the following sections: |
| 5 | + |
| 6 | +- [Tutorials](#tutorials) |
| 7 | + gently guide you towards achieving introductory tasks, |
| 8 | + while assuming minimal background knowledge. |
| 9 | +- [How-To Guides](#how-to-guides) |
| 10 | + help you complete specific tasks in a step-by-step fashion. |
| 11 | +- [Explanations](#explanations) |
| 12 | + discuss key subsystems and concepts, at a high level. |
| 13 | + They also provide background information and talk about design tradeoffs. |
| 14 | +- [Reference Guides](#reference-guides) |
| 15 | + contain a thorough technical reference for complex topics. |
| 16 | + They assume some overall understanding of surrounding subsystems. |
| 17 | +- [Recommended Practices](#recommended-practices) |
| 18 | + suggests guidelines for writing code and diagnostics. |
| 19 | +- [Project Information](#project-information) |
| 20 | + tracks continuous integration (CI), branching and release history. |
| 21 | +- [Evolution Documents](#evolution-documents) |
| 22 | + includes proposals and manifestos for changes to Swift. |
| 23 | +- The [External Resources](#external-resources) section provides links to |
| 24 | + valuable discussions about Swift development, in the form of talks |
| 25 | + and blog posts. |
| 26 | +- The [Uncategorized](#uncategorized) section is for documentation which does |
| 27 | + not fit neatly into any of the above categories. We would like minimize |
| 28 | + items in this section; avoid adding new documentation here. |
| 29 | + |
| 30 | +Sometimes documentation is not enough. |
| 31 | +Especially if you are a new contributor, you might run into roadblocks |
| 32 | +which are not addressed by the existing documentation. |
| 33 | +Or they are addressed somewhere but you cannot find the relevant bits. |
| 34 | +If you are stuck, please use the [development category][] on the Swift forums |
| 35 | +to ask for help! |
| 36 | + |
| 37 | +Lastly, note that we are slowly moving towards a more structured form of |
| 38 | +documentation, inspired by the Django project [[1][Django-docs-1]] |
| 39 | +[[2][Django-docs-2]]. Hence parts of this page are aspirational |
| 40 | +and do not reflect how much of the existing documentation is written. |
| 41 | +Pull requests to clean up the [Uncategorized](#uncategorized) section, |
| 42 | +or generally fill gaps in the documentation are very welcome. |
| 43 | +If you would like to make major changes, such as adding entire new pieces of |
| 44 | +documentation, please create a thread on the Swift forums under the |
| 45 | +[development category][] to discuss your proposed changes. |
| 46 | + |
| 47 | +[development category]: https://forums.swift.org/c/development |
| 48 | +[Django-docs-1]: https://docs.djangoproject.com/ |
| 49 | +[Django-docs-2]: https://documentation.divio.com/#the-documentation-system |
| 50 | + |
| 51 | +## Tutorials |
| 52 | + |
| 53 | +- [libFuzzerIntegration.md](/docs/libFuzzerIntegration.md): |
| 54 | + Using `libFuzzer` to fuzz Swift code. |
| 55 | + |
| 56 | +## How-To Guides |
| 57 | + |
| 58 | +- [DebuggingTheCompiler.md](/docs/DebuggingTheCompiler.md): |
| 59 | + Describes a variety of techniques for debugging. |
| 60 | +- Building for Android: |
| 61 | + - [Android.md](/docs/Android.md): |
| 62 | + How to run some simple programs and the Swift test suite on an Android device. |
| 63 | + - [AndroidBuild.md](/docs/AndroidBuild.md): |
| 64 | + How to build the Swift SDK for Android on Windows. |
| 65 | +- Building for Windows: |
| 66 | + - [Windows.md](/docs/Windows.md): |
| 67 | + Overview on how to build Swift for Windows. |
| 68 | + - [WindowsBuild.md](/docs/WindowsBuild.md): |
| 69 | + How to build Swift on Windows using Visual Studio. |
| 70 | + - [WindowsCrossCompile.md](/docs/WindowsCrossCompile.md): |
| 71 | + How to cross compile Swift for Windows on a non-Windows host OS. |
| 72 | + |
| 73 | +## Explanations |
| 74 | + |
| 75 | +- [ByteTree.md](/docs/ByteTree.md): |
| 76 | + Describes the ByteTree binary format used for serializing syntax trees |
| 77 | + in `libSyntax`. |
| 78 | + |
| 79 | +### Compiler and Runtime Subsystems |
| 80 | + |
| 81 | +- Driver: |
| 82 | + - [Driver.md](/docs/Driver.md): |
| 83 | + Provides an overview of the driver, compilation model, and the compiler's |
| 84 | + command-line options. Useful for integration into build systems other than |
| 85 | + SwiftPM or Xcode. |
| 86 | + - [DriverInternals.md](/docs/DriverInternals.md): |
| 87 | + Provides a bird's eye view of the driver's implementation. |
| 88 | + <!-- NOTE: Outdated --> |
| 89 | +- [DependencyAnalysis.md](/docs/DependencyAnalysis.md): |
| 90 | + Describes different kinds of dependencies across files in the same module, |
| 91 | + important for understanding incremental builds. |
| 92 | +- C and ObjC interoperability: Clang Importer and PrintAsObjC |
| 93 | + - [CToSwiftNameTranslation.md](/docs/CToSwiftNameTranslation.md): |
| 94 | + Describes how C and ObjC entities are imported into Swift |
| 95 | + by the Clang Importer. |
| 96 | + - [CToSwiftNameTranslation-OmitNeedlessWords.md](/docs/CToSwiftNameTranslation-OmitNeedlessWords.md): |
| 97 | + Describes how the "Omit Needless Words" algorithm works, |
| 98 | + making imported names more idiomatic. |
| 99 | +- Type-checking and inference: |
| 100 | + - [TypeChecker.rst](/docs/TypeChecker.rst): |
| 101 | + Provides an overview of how type-checking and inference work. |
| 102 | + - [RequestEvaluator.md](/docs/RequestEvaluator.md): |
| 103 | + Describes the request evaluator architecture, which is used for |
| 104 | + lazy type-checking and efficient caching. |
| 105 | + - [Literal.md](/docs/Literal.md): |
| 106 | + Describes type-checking and inference specifically for literals. |
| 107 | +- [Serialization.rst](/docs/Serialization.rst): |
| 108 | + Gives an overview of the LLVM bitcode format used for swiftmodules. |
| 109 | + - [StableBitcode.md](/docs/StableBitcode.md): |
| 110 | + Describes how to maintain compatibility when changing the serialization |
| 111 | + format. |
| 112 | +- SIL and SIL Optimizations: |
| 113 | + - [SILProgrammersManual.md](/docs/SILProgrammersManual.md): |
| 114 | + Provides an overview of the implementation of SIL in the compiler. |
| 115 | + - [OptimizerDesign.md](/docs/OptimizerDesign.md): |
| 116 | + Describes the design of the optimizer pipeline. |
| 117 | + - [HighLevelSILOptimizations.rst](docs/HighLevelSILOptimizations.rst): |
| 118 | + Describes how the optimizer understands the semantics of high-level |
| 119 | + operations on currency data types and optimizes accordingly. |
| 120 | + Includes a thorough discussion of the `@_semantics` attribute. |
| 121 | + |
| 122 | +### SourceKit subsystems |
| 123 | + |
| 124 | +- [SwiftLocalRefactoring.md](/docs/refactoring/SwiftLocalRefactoring.md): |
| 125 | + Describes how refactorings work and how they can be tested. |
| 126 | + |
| 127 | +### Language subsystems |
| 128 | + |
| 129 | +- Swift's Object Model |
| 130 | + - [LogicalObjects.md](): |
| 131 | + Describes the differences between logical and physical objects and |
| 132 | + introduces materialization and writeback. |
| 133 | + - [MutationModel.rst]() <!--: NOTE: Outdated --> |
| 134 | +- [DocumentationComments.md](/docs/DocumentationComments.md): |
| 135 | + Describes the format of Swift's documentation markup, including |
| 136 | + specially-recognized sections. |
| 137 | + |
| 138 | +### Stdlib Design |
| 139 | + |
| 140 | +- [SequencesAndCollections.rst](/docs/SequencesAndCollections.rst): |
| 141 | + Provides background on the design of different collection-related protocols. |
| 142 | +- [StdlibRationales.rst](/docs/StdlibRationales.rst): |
| 143 | + Provides rationale for common questions/complaints regarding design decisions |
| 144 | + in the Swift stdlib. |
| 145 | + |
| 146 | +## Reference Guides |
| 147 | + |
| 148 | +- [DriverParseableOutput.md](/docs/DriverParseableOutput.md): |
| 149 | + Describes the output format of the driver's `-parseable-output` flag, |
| 150 | + which is suitable for consumption by editors and IDEs. |
| 151 | +- [ObjCInterop.md](/docs/ObjCInterop.md) |
| 152 | + Documents how Swift interoperates with ObjC code and the ObjC runtime. |
| 153 | +- [LibraryEvolution.rst](/docs/LibraryEvolution.rst): |
| 154 | + Specifies what changes can be made without breaking binary compatibility. |
| 155 | +- [SIL.rst](/docs/SIL.rst): |
| 156 | + Documents the Swift Intermediate Language (SIL). |
| 157 | + - [TransparentAttr.md](/docs/TransparentAttr.md): |
| 158 | + Documents the semantics of the `@_transparent` attribute. |
| 159 | +- [Runtime.md](/docs/Runtime.md): |
| 160 | + Describes the ABI interface to the Swift runtime. |
| 161 | + <!-- NOTE: Outdated --> |
| 162 | +- [Lexicon.md](/docs/Lexicon.md): |
| 163 | + Canonical reference for terminology used throughout the project. |
| 164 | + |
| 165 | +## Recommended Practices |
| 166 | + |
| 167 | +### Coding |
| 168 | + |
| 169 | +- [AccessControlInStdlib.rst](/docs/AccessControlInStdlib.rst): |
| 170 | + Describes the policy for access control modifiers and related naming |
| 171 | + conventions in the stdlib. |
| 172 | + <!-- NOTE: Outdated --> |
| 173 | +- [IndexInvalidation.md](/docs/IndexInvalidation.md): |
| 174 | + Describes the expected behavior of indexing APIs exposed by the stdlib. |
| 175 | +- [StdlibAPIGuidelines.rst](/docs/StdlibAPIGuidelines.rst): |
| 176 | + Provides guidelines for designing stdlib APIs. |
| 177 | + <!-- NOTE: Outdated --> |
| 178 | +- [StandardLibraryProgrammersManual](/docs/StandardLibraryProgrammersManual.md): |
| 179 | + Provides guidelines for working code in the stdlib. |
| 180 | +- [OptimizationTips.rst](/docs/OptimizationTips.rst): |
| 181 | + Provides guidelines for writing high-performance Swift code. |
| 182 | + |
| 183 | +### Diagnostics |
| 184 | + |
| 185 | +## Project Information |
| 186 | + |
| 187 | +- [Branches.md](/docs/Branches.md): |
| 188 | + Describes how different branches are setup and what the automerger does. |
| 189 | +- [ContinuousIntegration.md](ContinuousIntegration.md): |
| 190 | + Describes the continuous integration setup, including the `@swift_ci` bot. |
| 191 | + |
| 192 | +## Evolution Documents |
| 193 | + |
| 194 | +### Manifestos |
| 195 | + |
| 196 | +- ABI Stability and Library Evolution |
| 197 | + - [ABIStabilityManifesto.md](/docs/ABIStabilityManifesto.md): |
| 198 | + Describes the goals and design for ABI stability. |
| 199 | + - [LibraryEvolutionManifesto.md](/docs/LibraryEvolutionManifesto.md): |
| 200 | + Describes the goals and design for Library Evolution. |
| 201 | +- [BuildManifesto.md](BuildManifesto.md): |
| 202 | + Provides an outline for modularizing the build system for the Swift toolchain. |
| 203 | +- [CppInteroperabilityManifesto.md](CppInteroperabilityManifesto.md): |
| 204 | + Describes the motivation and design for first-class Swift-C++ interoperability. |
| 205 | +- [DifferentiableProgramming.md](/docs/DifferentiableProgramming.md): |
| 206 | + Outlines a vision and design for first-class differentiable programming in Swift. |
| 207 | +- [GenericsManifesto.md](/docs/GenericsManifesto.md): |
| 208 | + Communicates a vision for making the generics system in Swift more powerful. |
| 209 | +- [OwnershipManifesto.md](/docs/OwnershipManifesto.md): |
| 210 | + Provides a framework for understanding ownership in Swift, |
| 211 | + and highlights potential future directions for the language. |
| 212 | +- [StringManifesto.md](/docs/StringManifesto.md): |
| 213 | + Provides a long-term vision for the `String` type. |
| 214 | + |
| 215 | +### Proposals |
| 216 | + |
| 217 | +Old proposals are present in the [/docs/proposals](/docs/proposals) directory. |
| 218 | +More recent proposals are located in the [apple/swift-evolution][] repository. |
| 219 | +You can see the status of different proposals at |
| 220 | +<https://apple.github.io/swift-evolution/>. |
| 221 | + |
| 222 | +[swift-evolution]: https://github.com/apple/swift-evolution |
| 223 | + |
| 224 | +### Surveys |
| 225 | + |
| 226 | +- [ErrorHandlingRationale.rst](/docs/ErrorHandlingRationale.rst): |
| 227 | + Surveys error-handling in a variety of languages, and describes the rationale |
| 228 | + behind the design of error handling in Swift. |
| 229 | +- [weak.rst](/docs/weak.rst): |
| 230 | + Discusses weak references, including the designs in different languages, |
| 231 | + and proposes changes to Swift (pre-1.0). |
| 232 | + <!-- NOTE: Outdated --> |
| 233 | + |
| 234 | +### Archive |
| 235 | + |
| 236 | +These documents are known to be out-of-date and are superseded by other |
| 237 | +documentation, primarily [The Swift Programming Language (TSPL)][]. |
| 238 | +They are preserved mostly for historical interest. |
| 239 | + |
| 240 | +- [AccessControl.rst](/docs/AccessControl.swift) |
| 241 | +- [Arrays.rst](/docs/Arrays.rst) |
| 242 | + <!-- Has additional notes on bridging that may be of general interest? --> |
| 243 | +- [Generics.rst](/docs/Generics.rst) |
| 244 | +- [ErrorHandling.rst](/docs/ErrorHandling.rst) |
| 245 | +- [StringDesign.rst](/docs/StringDesign.rst) |
| 246 | +- [TextFormatting.rst](/docs/TextFormatting.rst) |
| 247 | + |
| 248 | +[The Swift Programming Language]: https://docs.swift.org/swift-book |
| 249 | + |
| 250 | +## External Resources |
| 251 | + |
| 252 | +The official [Swift blog](https://swift.org/blog/) contains a lot of useful |
| 253 | +information, such as how library evolution works and how the compiler's new |
| 254 | +diagnostic architecture is structured, helping us provide more precise |
| 255 | +diagnostics. |
| 256 | + |
| 257 | +TODO: Add a new document ExternalResources.md. |
| 258 | + |
| 259 | +## Uncategorized |
| 260 | + |
| 261 | +### Needs refactoring |
| 262 | + |
| 263 | +The documents in this section might be worth breaking up into several documents, |
| 264 | +and linking one document from the other. Breaking up into components will |
| 265 | +provide greater clarity to contributors wanting to add new documentation. |
| 266 | + |
| 267 | +- [ARCOptimization.rst](/docs/ARCOptimization.rst): |
| 268 | + Covers how ARC optimization works, with several examples. |
| 269 | + TODO: Not clear if this is intended to be an explanation or a reference guide. |
| 270 | +- [CompilerPerformance.md](/docs/CompilerPerformance.md): |
| 271 | + Thoroughly discusses different ways of measuring compiler performance |
| 272 | + and common pitfalls. |
| 273 | + TODO: Consider breaking up into one high-level explanation explaining key |
| 274 | + concepts and individual how-to guides that can be expanded independently. |
| 275 | + Also, it's not the right place to explain details of different compiler modes. |
| 276 | +- [DevelopmentTips.md](/docs/DevelopmentTips.md): |
| 277 | + Contains an assortment of tips for better productivity when working on the |
| 278 | + compiler. |
| 279 | + TODO: Might be worthwhile to make a dedicated how-to guide or explanation. |
| 280 | + It might also be valuable to introduce the tips in context, and have the |
| 281 | + explanation link to all the different tips. |
| 282 | +- [Diagnostics.md](/docs/Diagnostics.md): |
| 283 | + Describes how to write diagnostic messages and associated educational notes. |
| 284 | + TODO: Consider splitting into how-tos and recommended practices. |
| 285 | + For example, we could have a how-to guide on adding a new diagnostic, |
| 286 | + and have a recommended practices page which explains the writing style |
| 287 | + for diagnostics and educational notes. |
| 288 | +- [HowSwiftImportsCAPIs.md](/docs/HowSwiftImportsCAPIs.md): |
| 289 | + Contains a thorough description of the mapping between C/ObjC entities and |
| 290 | + Swift entities. |
| 291 | + TODO: Not clear if this is intended to be language documentation |
| 292 | + (for Swift developers), an explanation or a reference guide. |
| 293 | +- [OptimizerCountersAnalysis.md](/docs/OptimizerCountersAnalysis.md): |
| 294 | + TODO: Consider breaking up into a how-to guide |
| 295 | + on dumping and analyzing the counters |
| 296 | + and an explanation for the the counter collection system. |
| 297 | +- [Testing.md](/docs/Testing.md): |
| 298 | + TODO: Consider splitting into a how-to guide on writing a new test case |
| 299 | + and an explanation for how the compiler is tested. |
| 300 | +- [SwiftIndent.md](/docs/SwiftIndent.md): |
| 301 | + TODO: Unclear if this is intended to be an explanation or a reference guide. |
| 302 | +- [Random.md](/docs/Random.md): Stub. |
| 303 | + |
| 304 | +### Archive |
| 305 | + |
| 306 | +- [FailableInitializers.rst](/docs/FailableInitializers.rst): |
| 307 | + Superseded by documentation in [The Swift Programming Language][]. |
| 308 | +- [InitializerProblems.rst](/docs/InitializerProblems.rst): |
| 309 | + Describes some complexities around initialization in Swift. |
| 310 | + TODO: It would be great to have an explanation, say `InitializationModel.md`, |
| 311 | + that covers the initialization model and new attributes like |
| 312 | + `@_hasMissingDesignatedInitializers`. Some of this is covered in |
| 313 | + [TSPL's initialization section][] but that doesn't include newly added |
| 314 | + attributes. |
| 315 | +- [Modules.rst](/docs/Module.rst): for Swift pre-1.0. |
| 316 | +- [Swift3Compatibility.md](/docs/Swift3Compatibility.md): |
| 317 | + Discusses the Swift 3 -> Swift 4 migration. |
| 318 | +- [StoredAndComputedVariables.rst](): for Swift pre-1.0. |
| 319 | + |
| 320 | +[TSPL's initialization section]: https://docs.swift.org/swift-book/LanguageGuide/Initialization.html |
0 commit comments