Skip to content

Commit

Permalink
Merge pull request #2 from lcnr/const-evaluatable-checked
Browse files Browse the repository at this point in the history
requirements for `const-eval`
  • Loading branch information
lcnr authored Jan 6, 2022
2 parents 9a3c210 + a7e5aa4 commit 28b2c9a
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions design-docs/const-eval-requirements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Const eval requirements

For this to work, const operations have to be deterministic and
must not depend on any external state,
at least when they are used in the type system.

Using floats during CTFE is fully determinstic. So using
them inside of the type system is fine. CTFE can however
produce different results than what would happen on real hardware,
but this is not a concern for const generics.

Other sources of non-determinism are allocations. This non-determinism
must however not be observed during const-evaluation (TODO: link to const-eval).
Any references used in a constant are considered equal if their targets are equal, which is also determistic. (ref [val-trees](https://github.com/rust-lang/rust/issues/72396))

0 comments on commit 28b2c9a

Please sign in to comment.