Swing is the GUI standard for Java. Clojure is the awesomeness standard for Java.
Manu put out a challenge to it here.
Here is a video of Philip Wadler talking about his (and others) history with logic and programming languages.
jTracert will allow you to generate sequence diagrams directly from your application runtime!
* This gives you a lot of advantages:
* Understand the code created by your colleagues/partners in a short time
* Rapidly generate documentation for your partners or users.
* Easily investigate what’s happening in large Java applications
* Excellent companion for a common debugger
Here is a good post about language design philosophy and implementation details of inner classes in Java. The focus is more on the latter; and the article is still interesting.
Functional Java is an open source library that aims to prepare the Java programming language for the inclusion of closures. It also serves as a platform for learning functional programming concepts by introducing these concepts using a familiar language. The library is intended for use in production applications and is thoroughly tested using the technique of automated specification-based testing with ScalaCheck.
Richard Cobbe’s thesis looks interesting:
Mainstream object-oriented languages include a null value that inhabits every object type and that pervades programs. It exists both because the language semantics requires it in certain places and because it is the most convenient representation for common patterns, such as for sentinel values indicating failure. Safety requires implementations of these languages to insert run-time checks throughout programs to determine whether object references are null at each field lookup and method call.
The ubiquity of null in object-oriented programs leads to severe engineering problems for programmers. First, the error messages issued by the run-time checks are typically not sufficiently informative to help the programmer find the source of the error. Second, the type systems in OO languages generally do not distinguish null from other values of (object) type, preventing the programmer from stating important invariants about the flow of null in the type system. Third, programmers’ standard use of null as a sentinel does not unambiguously represent failures. To resolve or avoid these ambiguities, component authors must incorporate additional complexity into their interfaces, and this complexity can lead to subtle bugs.
In this dissertation, we propose two changes to Java that allow us to completely remove the null value. Doing so addresses the problems above and provides significant engineering benefits to the programmer. Further, we demonstrate the practical feasibility of our proposal with a migration path that allows programmers to shift large codebases from Java to our new language, one class at a time.