Skip to content

project-const-generics work graph #50

Open

Description

Below is a fancy graph listing work that needs to be done on each feature and whether some of the const generics features are required for other features to work. This doesn't track completion status or who is working on what, mostly just making this so that I am not dying from having too many thoughts in my brain without anything written down

There is also a document about the type field on Const and stuff about how we check that we have provided a const arg of the correct type. Not entirely relevant to this but wasn't sure where else to put it.

flowchart TB
    A[Add Clause::ConstHasType]
    B[Make Const's ty field assertion in relate use semantic equality]
    C[Typecheck anon consts in parent]
    D[Fully implement and rename `AliasTy` as `AliasTerm`]
    E[Support forward declared const param types]
    F[Remove Const's ty field]
    G[Remove WithOptConstParam in favor of query feeding]
    H[Support normalization of const projections]
    I[Add ability to evaluate `ConstKind::Expr`]
    J[Before evaluating consts check the `ParamEnv` holds]
    K[Support ADT construction in gce/mgce as if it was injective]
    L[Do not relate non-injective substs of Consts]
    N[Add a ConstParamType trait that is explicitly implemented for const param types]
    O[Require const params to be Sized or make it possible to have !Sized arguments]
    P[Figure out what to do about evaluatable bounds]
    Q[Higher ranked equality should agree with TypeId]
    R[Allow const arguments to omit braces if they are paths]
    S[Ensure `ConstKind::Expr` arguments are `ConstParamTy`]
    T[Introduce Opaque constants similar to Opaque types]
    U["Print out ConstKind::Expr better than just [const expr]"]
    V[Implement ConstEquate and ConstEvaluatable in new solver]
    W["Don't call expand_abstract_consts in super_relate_consts"]
    X[Document in dev guide how const arguments types are checked]
    Y[Document in dev guide how we typecheck anon consts]
    Z[Split up `type_of` query into different queries for each purpose it serves]
    
    subgraph min_generic_const_exprs
    H
    J
    K
    L
    P
    Q
    R
    T
    V
    W
    end

    subgraph generic_const_exprs
    I
    S
    U
    end
    
    subgraph adt_const_params
        direction LR
        N
        O
    end

    subgraph misc_cleanup
    direction LR
    G --> X
    A --> X
    A --> F
    Z
    D
    end    

    subgraph generic_const_param_types
    direction TB
    B --> E
    E --> C
    C --> Y
    end

    misc_cleanup --> min_generic_const_exprs
    misc_cleanup --> generic_const_param_types
    adt_const_params-->generic_const_param_types
    generic_const_param_types-->generic_const_exprs
    min_generic_const_exprs-->generic_const_exprs
Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions