Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I'm not sure Kotlin is a hack, but it's growth is directly related to Java not being able to deliver on simple features that would help the day to day lives of developers. So I also can't blame anyone for moving on from the language. I get frustrated with it all the time, especially when Kotlin shows that some feature could work perfectly fine.

Here are some examples that have hit the graveyard: It's been 2 years since exception handling in switch was proposed [0], 3 years since null-restricted types were proposed [1], 4 years since string templates [2], 8 years since concise method bodies [3], and 11 years for JSON parsing [4].

[0] https://inside.java/2023/12/15/switch-case-effect/

[1] https://openjdk.org/jeps/8303099

[2] https://openjdk.org/jeps/430

[3] https://openjdk.org/jeps/8209434

[4] https://openjdk.org/jeps/198



Sure there are pain points in Java, but I definitely wouldn't want the language to introduce 15 new features each having only a tiny benefit.

Based on your other comment you prefer "fat" languages like kotlin and C# - and that's fair. I find languages with less, but more powerful features far more elegant and while Java has its fair share of historic warts, modern additions are made in a very smart way.

E.g. switch expressions seamlessly support sum and product types, meanwhile kotlin's `when` really is just syntactic sugar.

All in all, with too many features you have to support and understand the complete matrix of their interactions as well, and that gets complicated quickly. And Kotlin is growing towards that.


What can switches finally do that when can't? Other than the terrible fall through behavior?

When used as a different way of writing an if else if can be a code smell. When used with an exhaustive list of an enum or sealed class prevents bugs in production.


Switch expressions don't do fall through. They are proper ML-like pattern matching.


I’m sorry, but null restricted types, string templates, basic json support, and fixing the broken exception system isn’t “fat”. They’re the basics of a functioning language.


Null restricted types are indeed important and while null check plugins exist for Java, this is a big step in the good direction by kotlin.

String templates are valuable syntactic sugar, but that's it.

There are a bazillion JSON libraries with at least 3-4 absolutely stellar ones. I don't really see it that big of a limiter.

And if you mean checked exceptions, that's controversial to claim it's all bad. But some ergonomics improvements would be better.


Handling JSON as a basics for language? Really? null restricted type will come with valhalla, string templates had a try, but people complained and they withdrawn them after 2 preview iterations. Not sure what issue people had with them and what issues maintainers noticed.

What do you mean by broken exception system?

Java is not a small language that you can throw features around, they have to take into consideration final goal of it and decades of development.


> Handling JSON as a basics for language?

Yes, even Mark Reinhold admitted that in the last "Ask the Architects" interview.

>null restricted type will come with valhalla

Will they? It's been 10+ years of Valhalla. Why is a compiler construct even behind project Valhalla? Kotlin has showed you don't need it to do them.

> string templates had a try

Yes they were over engineered and they failed to deliver a basic feature.

> Java is not a small language that you can throw features around, they have to take into consideration final goal of it and decades of development.

Yes I agree, but it shouldn't take YEARS to ship anything. 11 years for a JSON api?! Come on.


> Yes I agree, but it shouldn't take YEARS to ship anything. 11 years for a JSON api?! Come on.

Anything? Or maybe something that you specifically want?

It added records when I wanted them, it added streams and lambdas. I don't care for string templates (I thing those are ugly in any language).

null-restricted types would be nice but you have to understand that designing a language is not throwing every possible feature on top of it (like kotlin and resulting lack of readability it has and hard time updating to newer JDK), you have to design it, think of the possibilities, what users really want etc.

Valhalla type system results in addition of null-restricted types, as a natural evolution of the language.


Why did Kotlin prevent those features?


It didn't. They're examples of features that have driven Kotlin's growth. Thing's Java developers have been begging for. I'm using them as examples of why Java developers are starting to choose Kotlin. I'm a pretty die hard Java fan, I've built my career on it, and know way too much about the ecosystem. But, I've been writing F#, C#, Kotlin, and some other languages in my free time to see where I want to move to. I’m pretty sure C# is what I’ll settle on.


Oh I see, thank you for explaining.

PS: personally I really like Swift, I would suggest giving it a try for fun


Yeah swift is nice! I’ve ranted about how Java should add Swift’s try! and try? for checked exceptions before.

I don’t think it’s for me though. It’s very Apple centric and I’m a Windows gamer and PowerShell user at heart.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: