|
|
Sunday, December 01, 2002 |
Sunday Beer.Off to the bar; everybody needs their Sunday night beer. So do you. Get busy. Too much football and not enough work today...worked out only a few minor issues. Ten days and counting. |
Language Plugins.Separation of language and runtime is a good thing, without a doubt. .NET gets this right -- compile with whatever language you want, run on the same platform. So far, so good. But we're coders. And what's more, we're coders who have gotten used to some pretty cool toys. I don't know about you, but I like having syntax highlighting, refactoring, and so forth available to me. It saves me a lot of time. I'd like to see the Java platform (and .NET for that matter) support multiple languages more effectively. To do this and fully participate in a modern coder's style, a language plugin needs to do a lot more than just supply compilation from source text to some runtime format. It seems to me that if a platform can support multiple languages it should fully define various levels of support from a language runtime. Categories of support include compilation, inclusion of debugging information, evaluation of expressions at runtime given a context, and universal data structures that correspond to syntactic elements, refactoring support, and intelligent code completion. Your FORTRAN language pack for the Java VM should be able to indicate to the runtime (and any IDE) which of the general extension categories it supports. Most of the IDE vendors out there have created something like this for Java (and some, like TogetherSoft, have done it for other languages too). Many language people have done something similar for .NET, but the support doesn't seem to extend past compilation. I think the spec should be built into the platform. Languages will then be able to exhibit very advanced capabilities into a multitude of IDEs, and we'll all be better off. I'll be able to do my functional programming under some neutral VM, and I won't lose my super-cool code completion and other features like it. |
Functional Java.I think we're really getting at a similar thing : blocks and function pointers (and inner classes to a certain arguable extent) are closureish.Joe knocked one line out of my example that I think is somewhat important...you need to be able to declare higher-order functional types. That's just a function that takes a function that takes a function etc...these are pretty handy for solving certain types of problems. The point is, a function is defined in terms of its inputs and its output. Compatibility is pretty important -- the compiler can verify that two functional types are compatible quite easily. |