Method and apparatus for resolving data references in generated code
This is a patent that bears the name of James Gosling, the father of Java, so I would rather not criticize it too much - but I have no choice.
This proposes that one of the oldest interpreter optimization techniques known is patentable. The patent is very long, so I could have missed some twist that makes the idea inspired.
Put simply if you have a symbolic reference in code that is to be interpreted then, rather than leaving the symbolic reference in place and dereferencing it each time it is used, simply store the data in the code.
In other words, swap a loose pointer to a value for the value. The patent describes this as a modification to the way the interpreter works. A method is supplied that picks up the symbolic reference, finds the data it references, and places it in the instruction; the interpreter then carries on.
I've left out a lot of the fine detail, but this is a form of Just In Time compilation or another example of code rewriting - not to machine code but to a more efficient intermediate code.
What is novel about this idea?
It can't be the dereferencing of a symbol because that is just fundamental computer science (although I agree this doesn't mean it can't be patented!)
Could it be the time at which the dereferencing occurs i.e. not by the compiler but by the interpreter or VM?
This could be the idea, but code rewriting and JIT optimization would probably be covered by this patent in this case and I'm not sure it claims to be that wide a patent. Also, if it is then I'm sure there are examples of prior art - I can remember a similar technique being used on a Basic interpreter I worked with back in the late 1980s.
Again, I am left with the idea that if this is patentable then just about every thought a programmer has is patentable.
Convoluted and contentless
What surprised me was the difficulty of extracting any useful information from either patent.
Both repeated themselves in ways that made it more difficult follow the argument. They both went in for describing standard computer ideas - compiler, interpreter, byte code - and how these work in detail as if they were part of the patent and in such a way as to obscure what the novel part of the proposal was. Both patents managed to achieve a level of vagueness about what they were actually describing that made it extremely difficult to see what mechanism was actually the subject of the patent or indeed what the mechanism was.
At the end of the day, I have to say that neither idea seems novel and any good programmer considering the problem of improving Java's static array initialization or how to make an interpreted language run faster would propose both methods described - without thinking that the ideas were novel or patentable.
As I said earlier, if this is the standard required to obtain a software patent we should all file at least two or three for every program we write.
Excuse me I've just notice that I exchanged some memory for speed in a program by a trick that probably only nine out of ten programmers would spot immediately so I need to fill in a patent application....