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
OK, that explains
bool | byte
, but how is an enum a sum type? And what's a product type? A product of sets is a cartesian product. How does that work with types?Anti Commercial-AI license
@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
. WhereDog
is 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 bits
whereTag
is a constant string of bits, maybe itself au32
? Wouldn't that make it a product type?But then
LotsOfThings
is 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 u32
because 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