4 ms·
An enum, short for enumeration, shouldn't hold data, else don't call it an enum. It's no longer an enumeration, it's a data structure.
by halayli 11y ago
An enum, short for enumeration, shouldn't hold data, else don't call it an enum. It's no longer an enumeration, it's a data structure.
- vbezhenar 11y agoSwift uses the same terminology. Probably meaning of enum will include ADT.
- kinghajj 11y agoRust's enum is a natural extension to the common notion of enumerated types to ADTs: http://en.wikipedia.org/wiki/Enumerated_type#Algebraic_data_type_in_functional_programming http://en.wikipedia.org/wiki/Enumerated_type#Algebraic_data_....
- halayli 11y agoIf Rust wants to win C/C++ developers, it shouldn't surprise them a lot.
- kinghajj 11y agoWell it shouldn't be surprising, as Rust's enum behaves pretty much like a C/C++ one if all cases are nullary. The only changes are syntactical ("EnumType::Variant" instead of just "Variant", unless you "use EnumType::*"). In fact, it's exactly because they didn't want to be surprising that they used "enum" instead of something else, like "data" in Haskell.
- barosl 11y agoI would say that the reason it is named `enum` is exactly not to surprise them. While learning Haskell, I had used `data` several times, but never grokked its true meaning. The naming of `enum` in Rust helped me finally understand what ADTs are, and thus also made me truly understand what Haskell's `data` is. I really appreciate Rust for trying to introduce a certain concept with the existing names.
- Dewie3 11y agoThey already chose to try to appeal to those developers by calling it "enum". And that doesn't sound like a good motivation to me: how hard is it to learn something like algebraic data types, compared to learning about lifetimes? It's like the choice to use angle brackets for generics - if the intent is to be easy for programmers with a certain background, that only lures them in with a false sense of familiarity. Because something like angle brackets over square brackets is, again, a superficial and easy thing to learn compared to any of the semantic stuff.
- Dewie3 11y agoI agree that the name seems misleadingly specific: it's named after a type of construct which it subsumes. In cases like this I think it is better to call it by a more generic name rather than a specific name which it really subsumes (like Haskell using the `data` keyword for algebraic data type definitions).
- pcwalton 11y ago> An enum, short for enumeration, shouldn't hold data, else don't call it an enum. They can in Java. Java's about as mainstream of a programming language as you can think of.
- taeric 11y agoNot in the same way. In Java, you can have an enum that has some data placed on it, at a per value basis. You can not have an enum where different instances of the same value have different values attached to it. That is, Enum.A will always be Enum.A with the same data on it at all times in Java. This is not the case for ADTs.
- pcwalton 11y agoSure, but having enums with data is not per se out of the ordinary in mainstream languages.