Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

compiler: remove anonymous struct types, unify all tuples #21817

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Commits on Oct 26, 2024

  1. compiler: remove anonymous struct types, unify all tuples

    This commit reworks how anonymous struct literals and tuples work.
    
    Previously, an untyped anonymous struct literal
    (e.g. `const x = .{ .a = 123 }`) was given an "anonymous struct type",
    which is a special kind of struct which coerces using structural
    equivalence. This mechanism was a holdover from before we used
    RLS / result types as the primary mechanism of type inference. This
    commit changes the language so that the type assigned here is a "normal"
    struct type. It uses a form of equivalence based on the AST node and the
    type's structure, much like a reified (`@Type`) type.
    
    Additionally, tuples have been simplified. The distinction between
    "simple" and "complex" tuple types is eliminated. All tuples, even those
    explicitly declared using `struct { ... }` syntax, use structural
    equivalence, and do not undergo staged type resolution. Tuples are very
    restricted: they cannot have non-`auto` layouts, cannot have aligned
    fields, and cannot have default values with the exception of `comptime`
    fields. Tuples currently do not have optimized layout, but this can be
    changed in the future.
    
    This change simplifies the language, and fixes some problematic
    coercions through pointers which led to unintuitive behavior.
    
    Resolves: ziglang#16865
    mlugg committed Oct 26, 2024
    Configuration menu
    Copy the full SHA
    6c45989 View commit details
    Browse the repository at this point in the history