7 ms·
I think part of what makes programming languages hard to learn is that two authors rarely can agree on the same terminology. Reading a mixture of sources can le
by ynik 4y ago
I think part of what makes programming languages hard to learn is that two authors rarely can agree on the same terminology. Reading a mixture of sources can lead to confusion about what's going on.
This article explains the uniqueness/mutability relation well, but it uses the terms "variable" and "value" with different meanings than most programmers would use. What the article calls "value" I would call "memory location" (maybe one could even call it "variable"); and what it calls "variable" isn't 100% accurate but I guess it works to keep the explanation simple.
- the_gipsy 4y agoI have recently seen "exclusive" for &mut, instead of "unique" here. The "value" and "variable" naming is unambiguous though. "Variable" might be problematic for someone that conflates the concepts of reference and value - but that's an issue that should be solved far earlier than ownership.
- hgomersall 4y agoExclusive is an interesting description in this context because it describes the semantics of the mut as regards the borrow checker. "mut" in Rust means much more than just "mutable".
- kzrdude 4y agomemory location is maybe not a great replacement for value in this article. values are preserved when moving them, but the memory location changes. The location doesn't matter for the purpose discussed in the blog post. Models where the value `1` in `let x = 1` gets a memory location - they unnecessarily mix in details about where the value is stored. In most cases, the value is not stored anywhere, neither stack nor heap etc, that is just a value and the compiler and compiler settings determine what happens next. A common case is that it's constant folded into some operation, so the `1` then doesn't have any relationship to memory at all. I think the terms used are typical for Rust. Doesn't each language have its own terms? The C standard's object is not the same as Python's object and so on.
- dureuill 4y ago"variable" seems untypical for rust. We have "bindings", which are not 100% the same as "variables" (hence maybe GP's feeling of something odd). Value is OK.
- kzrdude 4y agoDo you have a quick example for a situation where binding is better than variable in Rust?
- alpaca128 4y agoThe usage of the `@` operator is usually called a binding: match value { n @ 0..8 => println!("{n}"), _ => {}, } It lets you bind and use the specific value within a matched range. I don't think I ever used it though, I tend to write something like `n if n<8 => {...}` instead
- kzrdude 4y agoI'm sure you have used it in things like `if let Some(x) = foo` where x is the binding, then. I recognize the name binding being used there all the time, but maybe variable would work well in this particular context too?
- cormacrelf 4y agoThe reason people say binding is because the words “immutable variable” are an oxymoron. It never makes sense to use variable for immutable bindings; they are not able to be varied. Binding is just the meaning of the word “variable” but without the implied mutability. This aligns with the fact that the mutability is (syntactically and conceptually) a property attached to the binding, and hence there is a need to talk about bindings generally without implying anything about the mutability. Lots of languages don’t have immutable bindings, all bindings are mutable, so you may as well call them variables in C, Go, etc.
- kjaa 4y agoI agree! "Resource" instead of "value" and "reference" instead of "variable" would bring this in line with the program logic community, from which many of these ideas spring or draw inspiration from.
- kzrdude 4y agoReference can't be used for this article since it has a specific meaning in Rust, i.e the most basic safe pointers, those with the & syntax, are references.
- DougBTX 4y ago> it uses the terms "variable" and "value" with different meanings than most programmers would use Have to disagree on this, these are very common words with normal meanings, from the Assignment page on Wikipedia: > Assignments typically allow a *variable* to hold different *values* at different times during its life-span and scope https://en.wikipedia.org/wiki/Assignment_(computer_science) https://en.wikipedia.org/wiki/Assignment_(computer_science) Unless there's something I'm missing, this is exactly how Matt is using those words.