Multi-language support, interop, and philosophy

I had a comment on the J# serialization post that I took as , "J# is insufficient to entice J2xE developers." 

J# isn't really about enticing developers "away from" a different platform. [ by my view, that is a pretty narrow way of looking at the world of developers anyway, as if there was only a binary choice. Who doubts that the universe of choices in development just keeps exploding? We are in the big bang of choices. ]

The way I look at it, J# is just one of a stable of languages supported on .NET. You can use C# or VB, but if you know COBOL, there's a CLR compiler for COBOL. Fortran, Lisp, whatever. Now it is true that Smalltalk.NET is not quite the same as Smalltalk. Most "languages" are really platforms or at least meta-platforms. Look at Java: as a developer who writes code, you think of Java as a language, but it really combines a language syntax with a virtual machine environment (incl a memory model) and a standard class library. C++ works the same way - it is not possible to conceive of C++ without the standard libraries. likewise Vb. So if you graft .NET onto an exiting lang/metaplatform, you inexorably change the nature of the language. It's adulterated. Martha, is that a Good or Bad Thing? Depends on your perspective. If you're a purist, it's a Bad Thing. If you are a pragmatist, maybe it's a Good Thing. Regardless, the point is that it is possible to use languages you already know on a .NET runtime, with the .NET libraries.

But what I really wanted to say this: The multi-lang philosophy is very consistent with, and just another side of, strong interop capabilities. Here's why: both interop and multi-language enable people to get more done with what they already have - whether the thing they have is a programming skill or familiarity with language syntax, or an operational system that is running with known behavior and performance. The .NET approach is to enable maximum use of those things. [Speaking of language syntax, VB still baffles me.] That's the core philosophy behind .NET that drives these features.

Interop isn't an absolute virtue, like dark chocolate or speyside single malt whisky. Interop is good for a practical reason. Multi-lang support on a runtime is good for the same reason: Boring old ROI. You get more stuff done.

What catalyzed this thought was a couple of items I saw this morning on the multi-language support in .NET:

  • a blog entry from David Berlind of ZDNet that (a) says it's nice to be multi-lingual, and (b) reports some Java efforts to do the same thing. For example, Tim Bray at Sun convened a pow-wow to explore the idea.
    https://blogs.zdnet.com/BTL/index.php?p=842
  • an article in the January 2005 DDJ discussing a port of Jacl to .NET. For those who haven't updated their Acronym encyclopedias, Jacl is a TCL interpreter written in Java. TCL is a This looks really useful for adding scripting capabilities to .NET apps. If you've every been captivated by TCL, you now can TCL on .NET. You cannot get the insightful article online, gotta buy the issue of DDJ for that. But you can get the code for Jacl.NET.