Skip to content

cmd/api: api checker should check types for change in comparability #56773

Open
@griesemer

Description

@griesemer

The api checker checks that we don't change our APIs in a backward-incompatible way.

Generics introduced the constraint comparable which denotes the set of all types which are strictly comparable. An API may define an exported type T which may be strictly comparable (see #56548 for terminology) and such a type T may successfully be used as type argument for comparable type parameters elsewhere.

It's possible to change T without visible API change so that it's not strictly comparable anymore. For instance, given

// T is strictly comparable
type T struct {
   /* exported and unexported fields which are all strictly comparable */
}

one can add a new, unexported field that is not strictly comparable

// T is not strictly comparable anymore
type T struct {
   /* exported and unexported fields which are all strictly comparable */
   unexported any // not strictly comparable
}

The visible API has not changed but T is not not strictly comparable anymore. This may prevent it's use elsewhere.

The api checker should treat such changes as API changes.

Marking for 1.20 as it would be a useful check and could be added late in the cycle.

Metadata

Metadata

Assignees

No one assigned

    Labels

    FeatureRequestIssues asking for a new feature that does not need a proposal.NeedsInvestigationSomeone must examine and confirm this is a valid issue and not a duplicate of an existing one.compiler/runtimeIssues related to the Go compiler and/or runtime.

    Type

    No type

    Projects

    Status

    Todo

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions