For example, you'd go directly to Joda-Time or JSR-310. Date and Calendar wouldn't be present at all.
Whether Java should break compatibility to remove all the old cruft I'm not sure. The benefits of the cleaner design might not be worth the costs/inconvenience.
Things which come to mind (comparing roughly 2.8 (released 2010-07) to 2.11 (released 2013-03)):
Classes (just from the top-level scala.* package):
- Application
- Cell
- cloneable
- CountedIterator
- NotDefinedError
- NotNull
- Responder
- serializable
Complete packages: - scala.actors and subpackages
- scala.collection.interfaces
- scala.concurrent (still exists, but its contents have been replaced completely)
- scala.dbc and subpackages
- scala.mobile
- scala.reflect.generic
- scala.swing and subpackages
- scala.testing
- scala.text
- scala.util.automata
- scala.util.continuations
- scala.util.grammar
- scala.util.logging
- scala.util.parsing and subpackages (includes parser combinators and JSON)
- scala.util.regexp
- scala.xml
(This of course doesn't include things which were demoted from scala to other namespaces like scala.util, scala.runtime, scala.annotations ...)The list is certainly incomplete anyway...
It's like Soupstrain said: there are only two kinds of languages: the ones people complain about and the ones nobody uses.
A side effect of success is having a large body of existing code to consider when making changes.
projectlombok.org also makes a lot of the language syntax ugliness quite bearable.
Suppose you have a webpage asking users for their birth date. What data type do you store that value in? Hint: You aren't going to prompt the user for the time zone they were born in.
For many common tasks there are 5 or 6 different standard library calls that seem to do the same thing, but 4 of them are to be avoided at all cost, but there's no depreciation tag and the official javadocs don't contain any pointers to the newer classes.
I know most IDEs just ship with all that stuff included, but I've found it makes packaging up things to give to somebody else a little more complicated than I'd like...which would be resolved in the standard libraries.
Really, NEVER has so much effort been spent for SO LITTLE REWARD.
My production systems don't generally log; they're busy serving (I once worked on a hard real-time embedded air traffic control system where production logging was literally a single bit of information - a logic level that went high when the processor was busy, and low on idle - so we could measure our timing safety margin with an oscilloscope)
Test systems log at debug except for low level packages that insist on ridiculous logging (Hibernate, http client - and both of those have ANOTHER level of hacks to do wire-level logging in addition to the standard stuff).
Logging is just so painful, and not just in Java. Debian switched to rsyslog some time ago and I am still seeing no benefit at all, yet have to learn yet another half-arsed buggy scripting language to achieve simple things like, oh, not having my DHCPD logs showing up in three different files. FFS people.
Very useful to find out what inefficient code people have generated with Hibernate. Occasionally useful to find out what Spring is doing.
Try debugging systems for which you can't access the system directly ... say in a product that you redistribute to customers. You will change your tune rather quickly.
For product development, having a good logging system is critical. And, honestly, other than rolling my own over the years (20+ years experience developing and distributing products), the Java logging systems are pretty decent. It can be a pain to get different logging systems to work together and properly configured, and I do wish it were better, but System.out.println() ain't the answer either. When I spend a little time getting them to work right, they do their job. And that is time well spent in my opinion for redistributed products.
I'm deep in the zone, half way through fixing something and it's not working. I start up my app and realize log4whatever can't find its configuration so it defaults to no logging. Now I need to unpop my mental stack all the way to switch gears so I can fix this logging configuration issue because for all I know the key to my problem is in the log message that log4whatever hides when it's in noop mode. Why not default to as verbose as possible?
From what I can tell, the majority of these crappy Java logging frameworks are made by this one guy who keeps on screwing up. Eventually he abandons ship and starts over again. log4j, logback and slf4j are all by the same guy.
Why are you so bitter ?
I am currently in what you could consider log hell with a product based on OSGi. We have been using ops4j logging which has done a fantastic job of adapting the prevalent logging frameworks (log4j, slf4j, logback, and JUL) into the SLF4J API and we don't even have to think about it anymore.