this post was submitted on 16 Sep 2023
47 points (83.1% liked)

Programming

17669 readers
166 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 2 years ago
MODERATORS
all 10 comments
sorted by: hot top controversial new old
[–] [email protected] 28 points 1 year ago
[–] [email protected] 10 points 1 year ago (1 children)

I'm not sure I agree that Void is a bottom type. If so, void-functions would never be able to return/terminate. Java's void is probably more of a unit type.

[–] BatmanAoD 4 points 1 year ago (1 children)

They allude to this later, acknowledging that it's sort of a cross between unit and bottom.

[–] aloso 4 points 1 year ago (1 children)

No it's not, it is 100% a unit type (except it's not really a type, since you can only use it as return type and nowhere else)

[–] BatmanAoD 5 points 1 year ago (1 children)

It's not possible to instantiate or assign, which is more like a never type than a unit; and it is not possible to define new types with the same properties, which is also more like bottom than unit. But you're right that it's not actually a true never type since it can't represent function divergence.

I think the truth is just that Java's type system isn't very mathematically disciplined.

[–] aloso 1 points 1 year ago* (last edited 1 year ago) (1 children)

It's not possible to instantiate or assign, which is more like a never type than a unit

Actually, this is because void is not a type, it is just a keyword, a placeholder used instead of the return type when a function doesn't return anything.

If it were a bottom type, that would mean that a method returning void must diverge, which is simply not true.

Also, if it were a bottom type, it would be possible to write an "unreachable" method

void unreachable(void bottom) {
    return bottom;
}

Even though it couldn't be called, it should be possible to define it, if void was a bottom type. But it is not, because void isn't a bottom type, it's no type at all.

[–] BatmanAoD 1 points 1 year ago

The post has been edited; it looks like someone on reddit made essentially the same point. You're right of course that void isn't a true type in Java, but the post now also discusses Void, which I suppose just shows how void infects the type system despite not being a type.

[–] [email protected] 7 points 1 year ago

It's nice that Java has gotten those features but the article is pretty confused about type theory.

[–] [email protected] 2 points 1 year ago

When did you start liking it?