# Documentation Index This page contains a curated index of the documentation found in the Swift compiler repository. Sometimes documentation is not enough. Especially if you are a new contributor, you might run into roadblocks which are not addressed by the existing documentation. If you are stuck, please use the [development category][] on the Swift forums to ask for help! [development category]: https://forums.swift.org/c/development ## Building the Toolchain - [GettingStarted.md](/docs/HowToGuides/GettingStarted.md): Describes how to set up a working Swift development environment for Linux and macOS, and get an edit-build-test-debug loop going. - Building for Android: - [Android.md](/docs/Android.md): How to run some simple programs and the Swift test suite on an Android device. - [AndroidBuild.md](/docs/AndroidBuild.md): How to build the Swift SDK for Android on Windows. - Building for Windows: - [WindowsBuild.md](/docs/WindowsBuild.md): How to build Swift on Windows using Visual Studio. - Building for OpenBSD: - [OpenBSD.md](/docs/OpenBSD.md): Overview of specific steps for building on OpenBSD. ## Contributing - [FirstPullRequest.md](/docs/HowToGuides/FirstPullRequest.md): Describes how to submit your first pull request. This is the place to start if you're new to the project! - [Branches.md](/docs/Branches.md): Describes how different branches are setup and what the automerger does. - [ContinuousIntegration.md](/docs/ContinuousIntegration.md): Describes the continuous integration setup, including the `@swift_ci` bot. - [DebuggingTheCompiler.md](/docs/DebuggingTheCompiler.md): Describes a variety of techniques for debugging. - [FAQ.md](/docs/HowToGuides/FAQ.md): Answers "How do I do X?" for a variety of common tasks. - [Lexicon.md](/docs/Lexicon.md): Canonical reference for terminology used throughout the project. - [Testing.md](/docs/Testing.md): Information about running and developing tests in the compiler's test suite. ## Reference Guides - [Backtracing.rst](/docs/Backtracing.rst): Describes Swift's backtracing and crash reporting support. - [CompilerPerformance.md](/docs/CompilerPerformance.md): Thoroughly discusses different ways of measuring compiler performance and common pitfalls. - [EmbeddedSwift/](/docs/EmbeddedSwift/): A guide to all things Embedded Swift. - [Generics/](/docs/Generics/): "Compiling Swift Generics", a book about the implementation of parameteric polymorphism in the Swift compiler. Also covers the compilation pipeline, request evaluator, and type system in general. - [LibraryEvolution.rst](/docs/LibraryEvolution.rst): Specifies what changes can be made without breaking binary compatibility. - [RequestEvaluator.md](/docs/RequestEvaluator.md): Describes the request evaluator architecture, which is used for lazy type-checking and efficient caching. - [SIL/](/docs/SIL/): Documentation about SIL, the Swift intermediate language. - [TypeChecker.md](/docs/TypeChecker.md): Provides an overview of the expression type checker. - [UnderscoredAttributes.md](/docs/ReferenceGuides/UnderscoredAttributes.md): Documents semantics for underscored (unstable) attributes in the language. ## The Swift ABI - [CallingConventionSummary.rst](/docs/ABI/CallingConventionSummary.rst): A concise summary of the calling conventions used for C/C++, Objective-C and Swift on Apple platforms. Contains references to source documents, where further detail is required. - [CallingConvention.rst](/docs/ABI/CallingConvention.rst): This whitepaper discusses the Swift calling convention (high-level semantics; ownership transfer; physical representation; function signature lowering). - [KeyPaths.md](/docs/ABI/KeyPaths.md): Describes the layout of key path objects (instantiated by the runtime, and therefore not strictly ABI). \ **TODO:** The layout of key path patterns (emitted by the compiler, to represent key path literals) isn't documented yet. - [Mangling.rst](/docs/ABI/Mangling.rst): Describes the stable mangling scheme, which produces unique symbols for ABI-public declarations. - [TypeLayout.rst](/docs/ABI/TypeLayout.rst): Describes the algorithms/strategies for fragile struct and tuple layout; class layout; fragile enum layout; and existential container layout. - [TypeMetadata.rst](/docs/ABI/TypeMetadata.rst): Describes the fields, values, and layout of metadata records, which can be used (by reflection and debugger tools) to discover information about types. ## SIL Optimizer - [OptimizerDesign.md](/docs/OptimizerDesign.md): Describes the design of the optimizer pipeline. - [HighLevelSILOptimizations.rst](/docs/HighLevelSILOptimizations.rst): Describes how the optimizer understands the semantics of high-level operations on [currency](/docs/Lexicon.md#currency-type) data types and optimizes accordingly. Includes a thorough discussion of the `@_semantics` attribute. - [HowToUpdateDebugInfo.md](/docs/HowToUpdateDebugInfo.md): A guide for SIL optimization pass authors for how to properly update debug info in SIL program transformations. - [OptimizerCountersAnalysis.md](/docs/OptimizerCountersAnalysis.md): TODO: Consider breaking up into a how-to guide on dumping and analyzing the counters and an explanation for the counter collection system. - [TransparentAttr.md](/docs/TransparentAttr.md): Documents the semantics of the `@_transparent` attribute. ## Swift Driver - [Driver.md](/docs/Driver.md): Provides an overview of the driver, compilation model, and the compiler's command-line options. Useful for integration into build systems other than SwiftPM or Xcode. - [DriverInternals.md](/docs/DriverInternals.md): Provides a bird's eye view of the driver's implementation. - [DriverParseableOutput.md](/docs/DriverParseableOutput.md): Describes the output format of the driver's `-parseable-output` flag, which is suitable for consumption by editors and IDEs. - [DependencyAnalysis.md](/docs/DependencyAnalysis.md): Describes different kinds of dependencies across files in the same module, important for understanding incremental builds. ## Objective-C Interop - [ObjCInterop.md](/docs/ObjCInterop.md) Documents how Swift interoperates with ObjC code and the ObjC runtime. - [CToSwiftNameTranslation.md](/docs/CToSwiftNameTranslation.md): Describes how C and ObjC entities are imported into Swift by the Clang Importer. - [CToSwiftNameTranslation-OmitNeedlessWords.md](/docs/CToSwiftNameTranslation-OmitNeedlessWords.md): Describes how the "Omit Needless Words" algorithm works, making imported names more idiomatic. - [HowSwiftImportsCAPIs.md](/docs/HowSwiftImportsCAPIs.md): Contains a thorough description of the mapping between C/ObjC entities and Swift entities. ## Rationales and Manifestos - [ABIStabilityManifesto.md](/docs/ABIStabilityManifesto.md): Describes the goals and design for ABI stability. - [LibraryEvolutionManifesto.md](/docs/LibraryEvolutionManifesto.md): Describes the goals and design for Library Evolution. - [BuildManifesto.md](/docs/BuildManifesto.md): Provides an outline for modularizing the build system for the Swift toolchain. - [CppInteroperabilityManifesto.md](/docs/CppInteroperability/CppInteroperabilityManifesto.md): Describes the motivation and design for first-class Swift-C++ interoperability. - [DifferentiableProgramming.md](/docs/DifferentiableProgramming.md): Outlines a vision and design for first-class differentiable programming in Swift. - [ErrorHandlingRationale.md](/docs/ErrorHandlingRationale.md): Surveys error-handling in a variety of languages, and describes the rationale behind the design of error handling in Swift. - [OwnershipManifesto.md](/docs/OwnershipManifesto.md): Provides a framework for understanding ownership in Swift, and highlights potential future directions for the language. - [SequencesAndCollections.rst](/docs/SequencesAndCollections.rst): Provides background on the design of different collection-related protocols. - [StdlibRationales.rst](/docs/StdlibRationales.rst): Provides rationale for common questions/complaints regarding design decisions in the Swift stdlib. - [StringManifesto.md](/docs/StringManifesto.md): Provides a long-term vision for the `String` type. - [WeakReferences.md](/docs/WeakReferences.md): Discusses weak references, including the designs in different languages, and proposes changes to Swift (pre-1.0). ## Uncategorized - [Diagnostics.md](/docs/Diagnostics.md): Describes how to write diagnostic messages and associated documentation. - [DifferentiableProgrammingImplementation.md](/docs/DifferentiableProgrammingImplementation.md): Describes how automatic differentiation is implemented in the Swift compiler. - [DocumentationComments.md](/docs/DocumentationComments.md): Describes the format of Swift's documentation markup, including specially-recognized sections. - [ExternalResources.md](/docs/ExternalResources.md): Contains links to various materials found outside of the Swift repository. - [Literals.md](/docs/Literals.md): Describes type-checking and inference specifically for literals. - [Serialization.md](/docs/Serialization.md): Gives an overview of the LLVM bitcode format used for swiftmodules. - [StableBitcode.md](/docs/StableBitcode.md): Describes how to maintain compatibility when changing the serialization format. - [SwiftLocalRefactoring.md](/docs/refactoring/SwiftLocalRefactoring.md): Describes how refactorings work and how they can be tested. - [RunningIncludeWhatYouUse.md](/docs/HowToGuides/RunningIncludeWhatYouUse.md): Describes how to run [include-what-you-use](https://include-what-you-use.org) on the Swift project. - [libFuzzerIntegration.md](/docs/libFuzzerIntegration.md): Using `libFuzzer` to fuzz Swift code. - [DynamicCasting.md](/docs/DynamicCasting.md): Behavior of the dynamic casting operators `is`, `as?`, and `as!`. - [WebAssembly.md](/docs/WebAssembly.md): Explains some decisions that were made while implementing the WebAssembly target.