reference lvalues/rvalues; fix a typo
authorRalf Jung <post@ralfj.de>
Thu, 15 Aug 2024 09:33:47 +0000 (11:33 +0200)
committerRalf Jung <post@ralfj.de>
Thu, 15 Aug 2024 09:33:47 +0000 (11:33 +0200)
personal/_posts/2024-08-14-places.md

index 107a169e6d6b8fc8c98a728cf9a6ccba4a5950fd..912f7d52d221130f7b78c41661a0e47ed97c2f5d 100644 (file)
@@ -35,6 +35,9 @@ That is the topic of this post.
 
 <!-- MORE -->
 
 
 <!-- MORE -->
 
+(You might have already encountered the distinction of place expressions and value expressions in C and C++, where they are called lvalue expressions and rvalue expressions, respectively.
+While the basic syntactic concept is the same as in Rust, the exact cases that are UB are different, so we will focus entirely on Rust here.)
+
 ### Making the implicit explicit
 
 The main reason why this dichotomy of place expressions and value expressions is so elusive is that it is entirely implicit.
 ### Making the implicit explicit
 
 The main reason why this dichotomy of place expressions and value expressions is so elusive is that it is entirely implicit.
@@ -68,7 +71,7 @@ However, the expression `my_var` (referencing a local variable), according to th
 This is because `my_var` actually denotes a place in memory, and there's multiple things one can do with a place:
 one can load the contents of the place from memory (which produces a value), one can create a pointer to the place (which also produces a value, but does not access memory at all),
 or one can store a value into this place (which in Rust produces the `()` value, but the side-effect of changing the contents of memory is more relevant).
 This is because `my_var` actually denotes a place in memory, and there's multiple things one can do with a place:
 one can load the contents of the place from memory (which produces a value), one can create a pointer to the place (which also produces a value, but does not access memory at all),
 or one can store a value into this place (which in Rust produces the `()` value, but the side-effect of changing the contents of memory is more relevant).
-Besides local variable, the other main example of a place expression is the result of the `*` operator, which takes a *value* (of pointer type) and turns it into a place.
+Besides local variables, the other main example of a place expression is the result of the `*` operator, which takes a *value* (of pointer type) and turns it into a place.
 Furthermore, given a place of struct type, we can use a field projection to obtain a place just for that field.
 
 This may sound odd, because it means that `let new_var = my_var;` is not actually a valid statement in our grammar!
 Furthermore, given a place of struct type, we can use a field projection to obtain a place just for that field.
 
 This may sound odd, because it means that `let new_var = my_var;` is not actually a valid statement in our grammar!