@@ -13,7+13,7 @@ Expect something like a structured brain dump, so there are some unanswered ques
## Some Background
## Some Background
-CTFE is the mechanism used by the compiler, primarily, to evaluate items like `const x: T = ...;`.
+CTFE is the mechanism used by the compiler, primarily, to evaluate items like `const x: T = ...;`.
The `...` here is going to be Rust code that must be "run" at compile-time, because it can be used as a constant in the code -- for example, it can be used for array lengths.
Notice that CTFE is *not* the same as constant propagation: Constant propagation is an optimization pass done by LLVM that will opportunistically change code like `3 + 4` into `7` to avoid run-time work.
The `...` here is going to be Rust code that must be "run" at compile-time, because it can be used as a constant in the code -- for example, it can be used for array lengths.
Notice that CTFE is *not* the same as constant propagation: Constant propagation is an optimization pass done by LLVM that will opportunistically change code like `3 + 4` into `7` to avoid run-time work.
@@ -23,8+23,8 @@ You can statically see, just from the syntax of the code, whether CTFE applies t
CTFE is only used in places like the value of a `const` or the length of an array.
{% highlight rust %}
fn demo() {
CTFE is only used in places like the value of a `const` or the length of an array.
{% highlight rust %}
fn demo() {
- const X: u32 = 3 + 4; // CTFE
- let x: u32 = 4 + 3; // no CTFE (but maybe constant propagation)
+ const X: u32 = 3 + 4; // CTFE
+ let x: u32 = 4 + 3; // no CTFE (but maybe constant propagation)
}
{% endhighlight %}
We say that the `3 + 4` above is in *const context* and hence subject to CTFE, but the `4 + 3` is not.
}
{% endhighlight %}
We say that the `3 + 4` above is in *const context* and hence subject to CTFE, but the `4 + 3` is not.