14
If Inheritance is so bad, why does everyone use it?
(buttondown.email)
Hello!
This is the current Lemmy equivalent of https://www.reddit.com/r/ProgrammingLanguages/.
The content and rules are the same here as they are over there. Taken directly from the /r/ProgrammingLanguages overview:
This community is dedicated to the theory, design and implementation of programming languages.
Be nice to each other. Flame wars and rants are not welcomed. Please also put some effort into your post.
This isn't the right place to ask questions such as "What language should I use for X", "what language should I learn", and "what's your favorite language". Such questions should be posted in /c/learn_programming or /c/programming.
This is the right place for posts like the following:
See /r/ProgrammingLanguages for specific examples
@onlinepersona
An enum is a sum type because the number of inhabitants of the enum is the sum of the inhabitants of its parts.
A product type's number of inhabitants is the product of its parts' inhabitants. So a struct would fit that definition, or a pair, or a tuple.
Looking at the pic on your Cartesian product link:
if A is an enum {x,y,z} and B is an enum {1,2,3}, then a struct AxB has 9 possible inhabitants.
OK, I think I'm getting it.
A product is a set that this is the result of an ordered cartesian products.
Car = String X String x u8.An enum is a series of "or"s.
can also be thought of as
Animal = Dog | Cat | Giraffe | Chimpanzee. WhereDogis a type that only has single value in its set akaAnimal = {1} | {2} | {3} | {4}, but it could also be strings, or other objects. Rust however allows more complex objects:In this case is
Something(u32)the equivalent of any "tagged"u32, meaning in memory it's something like aTag + 32 bitswhereTagis a constant string of bits, maybe itself au32? Wouldn't that make it a product type?But then
LotsOfThingsis itself a product typeLotsOfThings = bool x String.So to put it all together
ComplexEnum = Nothing | TaggedU32 | (bool x String)? Is that correct?Anti Commercial-AI license
Pretty much, yeah. But just be aware the tags are effectively unique constants, so each has only one value. For consistency I would write it as:
ComplexEnum = Nothing | Something(u32) | LotsOfThings(bool x String)In this notation,
Something(u32)could also be written as1 x u32because tags are constants.OK, so finally I get it. It's pity none of the blogs I've read or wikipedia articles in existence spell it out this way. Instead it's a bunch of math mumbo jumbo.
Thanks for helping me reach understanding ๐ And thanks to @Kacarott@feddit.de too.
Anti Commercial-AI license