Lamire (the author of the blog post) is well know as the author of https://github.com/RoaringBitmap/RoaringBitmap which is in widespread use.
I suspect that weirdness has less to do with Lamire, but the weird expectations that it tries to "debunk".
Like no ones out here arguing that Java is some especially safe, super high validation language. Sure it's memory safety was a huge breath of fresh air compared to C/C++, but it's not in the same vein of reputation as an Eiffel or Ada or even Rust.
The moment you allow things that don't work well with the prover, people will use them, and the whole ecosystem becomes unsafe. And by extension, your code becomes unsafe, if the compiler can't reason about what happens when your code calls theirs.
Plus, unless you have just the right linter set up, you can still accidentally mess up and do something unsafe if the compiler lets you.
Java is completely safe by that definition. Now, you can have the seat-belt even tighter than that for various types of <domain> safe, but we are moving the goal-posts of the definition.
Also known as the pits of success.
Optional is convention based and @NonNull just throws the runtime exception at a better location, so in my experience neither come remotely close to providing null safety.
This is the exact same thing that languages with null-safety have “in-built”. Sure, language support is nice, but it is here and is working
> It does not, ... If you struggle with data races in Java
How can one struggle with data races if it does not allow it.
I've seen what GP was referring to in practice.
Why is this on the front page?
> Java does not trap overflows
Fair enough but only relevant for specific problems/domains. Never encountered this in 10 years.
> Java allows data races
It does not, if you use its dead simple std lib concurrency collections. Also it brings all the concurrency primitives you'd ever ask for (mutex, semaphore, synchronized and god knows what) and guaranteed latest-read "volatile" keyword if you really want to go there. Which you shouldn't. Use AtomicReference, AtomicInteger, ConcurrentHashmap, etc. If you struggle with data races in Java, you are at best a Java junior programmer and should study it instead of writing FUD.
> Java lacks null safety
I like null. Matter of personal opinion. If you are an anti null fetishist, go with Optional. If you want to go even further, use validated @NonNull annotations.
> Java lacks named arguments
Personal opinion. Syntactic sugar I never missed. IntelliJ and VS Code offer inlay hints to overcame this if it really helps. May I also offer you some rainbow colored braces for dessert?