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

project-const-generics work graph #50

Open
BoxyUwU opened this issue Feb 13, 2023 · 0 comments
Open

project-const-generics work graph #50

BoxyUwU opened this issue Feb 13, 2023 · 0 comments

Comments

@BoxyUwU
Copy link
Member

BoxyUwU commented Feb 13, 2023

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
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant