Articles

A Story of Cast Expressions

Issue #427 “Bug with Dereferencing Array Types” seemed like just another bug.  Submitted by a user last week (@Matt–), I didn’t think too much of it.  But, as sometimes happens, appearances can be deceiving.  In this case, the bug identified a flaw in the syntax of Whiley with respect to the treatment of cast . . . → Read More: A Story of Cast Expressions

Input / Output and the Object-Oriented Paradigm

Today, more then ever before, I/O dominates what software is about.  Of course, it’s always been important but, with increasing bandwidths, I/O seems to be what most programs now spend most of their time doing.  This leads to interesting questions about how, for example, to handle millions and millions of concurrent connections and we . . . → Read More: Input / Output and the Object-Oriented Paradigm

Comparing I/O in C with Java

Recently, I was having a somewhat heated discussion with a friend about the Java I/O library (specificially java.io.*).  His position was that the library is unnecessarily cluttered and verbose, and that  I/O in C is much simpler and more productive.  Whilst I agreed with some of that, I also argued that the Java I/O . . . → Read More: Comparing I/O in C with Java

Profiling Field Initialisation in Java

Recently, I attended the annual Conference on Runtime Verification (RV2012) and gave a talk entitled “Profiling Field Initialisation in Java” (slides for the talk are here, and the paper itself is here). This is the work of my PhD student, Stephen Nelson, and he should take all the credit for the gory details. However, . . . → Read More: Profiling Field Initialisation in Java

Java versus C++ Performance

Recently, I came across an interesting discussion of C++ versus Java performance over on Stack Exchange. There was also some good discussion of the article on Reddit which included a link to an interesting article from Google.

Understanding these languages from a performance perspective is important to me, as it impacts the design of . . . → Read More: Java versus C++ Performance

Reflecting on the JVM Class File Format

The latest release of Whiley (v0.3.16) includes (finally) a binary file format for the Whiley Intermediate Language (WYIL).  You can think WYIL files are to Whiley, as class files are to Java, or CIL files are to C#.  Furthermore, the existence of WYIL files implies there is a corresponding (albeit currently hypothetical) Whiley Virtual . . . → Read More: Reflecting on the JVM Class File Format

Are Checked Exceptions Always Caused by I/O?

Recently, I’ve had the pleasure of working with Eclipse and trying to build a plugin.  On the whole, I have to confess, I find that Eclipse is an extremely well-designed and considered piece of software.  The biggest problem, I suppose, is that it is designed for a wide variety of tasks and this means . . . → Read More: Are Checked Exceptions Always Caused by I/O?

Type Aliasing in Java?

A problem I often encounter in Java is that I want to say “these two things are the same”, but Java won’t let me. Suppose I want to maintain an int[] array which is always sorted in my program. So, whenever I get one of these things, I can rely on it being sorted. Here’s . . . → Read More: Type Aliasing in Java?

Final should be Default for Classes in Java

We were having an interesting discussion the other day, and the issue of final classes came up.  For some reason, it suddenly occurred to me that all classes should be final by default. That is, classes should be implicitly final, rather than requiring an explicit declaration.  For example, the following should be considered invalid . . . → Read More: Final should be Default for Classes in Java

Design by Contract is Most Requested Feature?

Thanks to Alex Potanin for pointing this out to me … it seems that [[Design by Contract]] is the most requested enhancement to the Java language.  You can find the list of the top 25 RFEs here.  A nice quote from the feature description:

I find it a shame that all the requests for . . . → Read More: Design by Contract is Most Requested Feature?