July 6, 2010

Languages to describe Languages

We're in a beautiful, exciting, and unsustainable time in programming languages. For any combination of features you could want, someone's made or making an interpreter/VM for you. Want dynamic message passing and objects (but Objective-C doesn't give you enough functional features)? Try Newspeak. Want Ruby syntaxed immutable objects with Erlang's concurrency model? Try Reia. Hell, did you Perl programmers feel left out of the JVM after the success of Jython and JRuby? Someone made a JVM-styled Perl called Sleep.

I remember wondering what my contribution could be and thinking I love Ruby programming, with true object-orientation, but miss ML/Haskell type systems and inference. What if I could make a concise, type-inferred Object-Oriented language? Then I found Scala had already been made.

Reading so many new language pages, I notice that lots of older languages getting referenced to describe the current one. Carlos Fuentes pointed out that Guatemala used to be called "The Paris of the Americas" (he also pointed out that France did not return the favor and call Paris "The Guatemala of Europe"), and there are a few specific languages that get to be Paris most often.

The ones I see most are...

  • Smalltalk. When you see this it normally means the referencing language has dynamic message passing, or actual object-oriented programming where everything is an object (Recall C++/Java/Objective-C have primitives).

    What they don't mean, which is a major part of Smalltalk culture, is programming in 'an image.' Newspeak, mentioned above, runs on Squeak, the open-source image-based Smalltalk development environment. I've never developed in an image so I can't really speak for it, but for those more comfortable with files, there's GNU Smalltalk, which I finally got running.

  • Self. It's kind of funny seeing this get so much love, after Javascript got so much hate. But apparently prototypical objects are all the rage, with projects like Io, Neko, and Slate. This usually means supporting Prototype-based objects.

  • Lua. This seems to mean "will be well-executed, lightweight, and hopes to get used in industry!" Feels like name-dropping when I see it.

  • Lisp. I think this just means "feels flexible," since the defining feature of the myriad of Lisp languages is homoiconic syntax, allowing for rich macro programming. Using "Lisp" as a signpost is a little lame since, if you had it homoiconic syntax, it would make your language a Lisp. Using "Lisp" in place of better terms reminds me of terms like "strong typing." Murrrrrr...

    To go with the flexible vibe, they probably also mean dynamic types + garbage collection, which Lisps did pioneer way back when. But those features are everywhere now.

What languages do you never see anymore? Prolog, Forth (except the very nice-looking Factor), or Eiffel. That's too bad, these had some fun ideas.

What language feature/system do I feel needs to make a resurgence? Proper module systems, like SML. I find most module systems a royal pain, and SML is no exception. But once you figure it out, you really can (provably!) 'program in the large.'

Finally, what hope is there for us polyglots to do development in these languages? Aside from LLVM, maybe there's a good graduate research project-in-waiting trying to bridge the gap between these guys.

That's enough bloviation for now. Now let's write some code.

No comments:

Post a Comment