👋🏽 Welcome
📜 Charter
🔮 The vision
🤔 Why compile time evaluation
🙋♀️ Cast of characters
🔀 Skill Tree
😱 Status quo
Array defaults
Array split first method
nalgebra
✨ Shiny future
Array defaults
Array split first method
Image type in rust-gpu
📅 Roadmap for 2021
❓How to vision doc
🔍 Meetings
✏️ Draft RFCs
Light (default)
Rust
Coal
Navy
Ayu
Const Generics Project Group
Skill tree for const generics features
Hold the alt/option key to zoom the skill tree; click and move to pan.
Reset Pan/Zoom
g
min_cg
MIN CONST GENERICS
Minimum subset of const generics only allowing `const N: {integer} | bool | char` and fully concrete constants
valtree
VALTREES
Use valtrees in all type level constants
Design of structural equality is worked out
Valtrees are implemented
min_defaults
CONCRETE CONST DEFAULTS
Permit concrete defaults on traits/adts
min_defaults->min_cg
generic_defaults
GENERIC CONST DEFAULTS
Permit generic defaults on traits/adts
Disallow usage of forward declared params via param env
Decide when a generic default is considered well formed
generic_defaults->min_defaults
param_tys
MORE CONST PARAM TYPES
Permit more types to be as the type of a const generic
A `Constable` that that signifies a type is valid to use as a const param type
Generic const param types i.e. `T: Constable, const N: T`
Consider `impl<const N: usize> Trait<{ Some(N) }> for ()` to constrain `N`
param_tys->min_cg
param_tys->valtree
exhaustiveness
IMPL EXHAUSTIVENESS
Allow separate impls to be used to fulfill `for<const N: usize> (): Trait<N>`
exhaustiveness->param_tys
min_generic_consts
MIN GENERIC CONSTANTS
Allow type level constants to be generic i.e. `N + 1`
Add a where clause that requires a given expression to be evaluatable e.g. `where evaluatable { N - 1 }`
Unused substs make it hard to tell if a const is concrete or generic and breaks unsize coercion in some cases
Don't eagerly error when evaluating constants during selection
min_generic_consts->min_cg
generic_consts
GENERIC CONSTANTS
Allow type level constants but better ✨
Allow writing a where clause that requires a condition to hold e.g. `where { N > 2 }`
Some things can always evaluate and should not need a where clause e.g. `{ N == M }` `{ N / 1 }`
If possible `where { N > 0 }` should imply `N - 1` is evaluatable
generic_consts->min_generic_consts
assoc_const_bounds
ASSOCIATED CONST BOUNDS
Permit where `where T: Trait<ASSOC = 10>`
assoc_const_bounds->min_generic_consts
arg_infer
GENERIC ARG CONST INFER
Permit using `_` for generic args
arg_infer->min_cg