# dotnet/csharplang

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/dotnet-csharplang).**

12,636 stars · 1,069 forks · C#

## Links

- GitHub: https://github.com/dotnet/csharplang
- awesome-repositories: https://awesome-repositories.com/repository/dotnet-csharplang.md

## Topics

`csharp` `language-design`

## Description

This repository serves as the programming language design repository for C#, containing the official language specification and the technical standards governing its grammar, type safety, and memory management. It functions as a collaborative space for the formal design and evolution of the language.

The project manages a community-driven evolution process, utilizing a public proposal backlog to debate and adopt new features. This involves formal syntax prototyping and the engineering of the type system to refine the language's behavior and implementation.

The scope of the specification covers a wide range of language capabilities, including asynchronous programming workflows, declarative data processing through integrated queries, and memory safety via nullable reference types. It also defines the rules for value-based record types, generic type parameterization, and deterministic resource disposal.

## Tags

### Programming Languages & Runtimes

- [Language Design Processes](https://awesome-repositories.com/f/programming-languages-runtimes/language-design-processes.md) — Provides the formal process and framework for proposing and refining the C# language specification.
- [Async-Await Flow Control](https://awesome-repositories.com/f/programming-languages-runtimes/async-await-flow-control.md) — Transforms asynchronous methods into state machines to pause and resume execution without blocking threads.
- [Asynchronous Programming Patterns](https://awesome-repositories.com/f/programming-languages-runtimes/asynchronous-programming-patterns.md) — Defines language-level patterns and keywords for managing non-blocking execution flows.
- [Generic Types](https://awesome-repositories.com/f/programming-languages-runtimes/generic-types.md) — Creates type-safe structures that operate on multiple types through parameterization and compile-time resolution.
- [Language Integrated Query (LINQ)](https://awesome-repositories.com/f/programming-languages-runtimes/language-integrated-query-linq.md) — Integrates a query-based syntax directly into the language to abstract data retrieval and transformation.
- [Language Specifications and Standards](https://awesome-repositories.com/f/programming-languages-runtimes/language-specifications-standards.md) — Establishes the formal rules governing syntax, type safety, and memory management.
- [Community-Driven Specifications](https://awesome-repositories.com/f/programming-languages-runtimes/language-specifications-standards/community-driven-specifications.md) — Manages the community-driven process for debating and adopting new language features.
- [Language Specifications](https://awesome-repositories.com/f/programming-languages-runtimes/language-specifications-standards/language-specifications.md) — Provides the formal documentation and standards defining the syntax and behavior of the language.
- [C API Specifications](https://awesome-repositories.com/f/programming-languages-runtimes/language-specifications-standards/language-specifications/c-api-specifications.md) — Serves as the official technical design and grammar definition for the language.
- [Nullable](https://awesome-repositories.com/f/programming-languages-runtimes/programming-language-varieties/programming-languages/type-systems/memory-safety-and-value-semantics/reference-types/nullable.md) — Implements static analysis tracking for nullable reference types to prevent dereference errors. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Asynchronous Streams](https://awesome-repositories.com/f/programming-languages-runtimes/asynchronous-streams.md) — Processes collections of data using specialized loops and disposal patterns to avoid blocking the execution thread. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Collection Expressions](https://awesome-repositories.com/f/programming-languages-runtimes/collection-expressions.md) — Initializes various collection-like types efficiently using a uniform and concise syntax. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Delegates](https://awesome-repositories.com/f/programming-languages-runtimes/delegates.md) — Defines the behavior and specification of type-safe delegates for function management. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Extension Methods](https://awesome-repositories.com/f/programming-languages-runtimes/extension-methods.md) — Defines the mechanism for adding new methods to existing types without modifying their source code. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [First-Class Functions](https://awesome-repositories.com/f/programming-languages-runtimes/first-class-functions.md) — Provides type-safe objects to store and pass method references as first-class citizens.
- [Syntax Prototyping](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/javascript-language-features/modern-syntax/syntax-prototyping.md) — Implements prototyping for modern patterns like string interpolation and collection expressions.
- [Pattern Matching](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/language-features/control-flow/pattern-matching.md) — Evaluates values against relational or logical patterns to execute logic based on the object's shape. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Auto-Implemented Properties](https://awesome-repositories.com/f/programming-languages-runtimes/language-features-paradigms/language-features/object-property-descriptors/property-shorthands/auto-implemented-properties.md) — Reads and writes to underlying storage of a property without manually declaring a separate private field. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Memory Spans](https://awesome-repositories.com/f/programming-languages-runtimes/memory-spans.md) — Implements type-safe views into arbitrary memory regions to reduce allocations and improve data access speed.
- [Primary Constructors](https://awesome-repositories.com/f/programming-languages-runtimes/primary-constructors.md) — Declares constructor parameters directly on the class definition to minimize redundant field declarations. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Record Types](https://awesome-repositories.com/f/programming-languages-runtimes/record-types.md) — Implements equality and mutation for types based on their stored data rather than their memory address.
- [Dynamic Type Dispatching Systems](https://awesome-repositories.com/f/programming-languages-runtimes/runtime-execution-environments/runtime-environments/runtime-internals-foundations/runtime-architecture/dynamic-type-dispatching-systems.md) — Defines how members are resolved at runtime by bypassing static type checking. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Template Interpolation](https://awesome-repositories.com/f/programming-languages-runtimes/template-interpolation.md) — Creates strings by embedding expressions directly into a template to improve readability and maintainability. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))

### Software Engineering & Architecture

- [Asynchronous Execution](https://awesome-repositories.com/f/software-engineering-architecture/architectural-design-patterns/asynchronous-execution.md) — Runs methods without blocking the calling thread by using specialized keywords to wait for completion. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Generic Type Definitions](https://awesome-repositories.com/f/software-engineering-architecture/generic-type-definitions.md) — Defines classes and methods that operate on multiple types while maintaining static type safety. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Nullability Tracking](https://awesome-repositories.com/f/software-engineering-architecture/static-analysis/nullability-tracking.md) — Tracks the null state of reference types during compilation to warn about potential dereference errors.
- [Type System Engineering](https://awesome-repositories.com/f/software-engineering-architecture/type-systems/type-system-engineering.md) — Defines the engineering rules for the C# type system, including generics and memory safety.
- [Memory Spans](https://awesome-repositories.com/f/software-engineering-architecture/block-based-data-models/data-block-memory-management/contiguous-memory-buffers/memory-spans.md) — Defines type-safe memory spans to optimize performance and reduce allocations. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
- [Generic Pattern Matching](https://awesome-repositories.com/f/software-engineering-architecture/generic-type-definitions/generic-pattern-matching.md) — Specifies the syntax for type-checking generic objects and binding them to typed variables. ([source](https://github.com/dotnet/csharplang/blob/main/proposals/csharp-7.1))

### Part of an Awesome List

- [Pattern Matching](https://awesome-repositories.com/f/awesome-lists/devtools/pattern-matching.md) — Evaluates object shapes and types through a recursive decision tree to execute logic based on value patterns.
- [Core Frameworks](https://awesome-repositories.com/f/awesome-lists/devtools/core-frameworks.md) — The official repository for the evolution of the language.

### Data & Databases

- [Deterministic Resource Disposal](https://awesome-repositories.com/f/data-databases/resource-management/resource-lifecycle-managers/deterministic-resource-disposal.md) — Specifies rules for deterministic disposal of unmanaged resources to prevent memory leaks. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))

### Development Tools & Productivity

- [Raw String Literals](https://awesome-repositories.com/f/development-tools-productivity/string-literal-handling/raw-string-literals.md) — Defines strings that preserve whitespace and ignore escape characters to simplify embedding structured data. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))

### Security & Cryptography

- [Encapsulation Modifiers](https://awesome-repositories.com/f/security-cryptography/identity-access-management/access-control/encapsulation-modifiers.md) — Defines the keywords and mechanisms used to control the visibility and access scope of members. ([source](https://github.com/dotnet/csharplang/blob/main/Language-Version-History.md))
