|
You're welcome. And to take this further, the recent explosion of new and successful languages shows something right is going on. Around of the turn of the century I was about to give up on this one field in pure CS I like, we seemed to be in a Dark Age where almost everything I could use in practice was of 1960's origin (maybe repackaged and improved a bit ... and, well, it helped (hurt) that I don't like Perl, despite learning it on my own for my own DP, and never took a liking to tcl). Since then Python really broke out, need I mention Ruby, Clojure has given Lisp a new hope, Haskell is simply fascinating, the ML world is moving out of academia (e.g. F#), and those are just some of the big names (I don't know much about Scala, especially its trajectory). In terms of getting new stuff into people's hands, this is probably the best period since the '70s for language geeks (I'm not counting C++ and Java, which are firmly based in the '60s/very early '70s). I also "blame" the dot.com bust, which has required people work smarter (e.g. use Ruby on Rails), not harder (e.g. J2EE). |
This is off topic, I'd suggest playing with Scala. In addition to ML family influences (immutability, pattern matching, tail recursion, static typing with type inference, optional lazy evaluation, etc...) it's also very true to the Smalltalk/Ruby vision: everything is an object, there are Mixins (one can mixin multiple traits, which can contain implementation code unlike Java's interfaces), it's really easy to write your own control structures (despite the lack of macros).
Afaik, one of the implementers Clojure's collections was also Odersky's student at EPFL. So there's talk now if seeing them back in Scala (it can also be done directly e.g., http://github.com/codahale/yoink)
OCaml had shown to me that statically typed languages can still be very expressive and succinct. Scala shows that OO + static typing combination has been unfairly tainted by C++ and Java.
The only "issue" with Scala is that it does aim to be entirely backwards and forwards compatible with Java. There are countless obvious benefits (e.g., being able to use tools such as Jetty's websocket support, freely mixing actors together with j.u.concurrent, using mixins to enrich/"de-boilerplate" existing libraries/APIs), but it does mean that some features aren't as robust as they are elsewhere in ML family (pattern matching is better in OCaml).
It's interesting if F# had to do the same "Faustian Bargain" (perhaps the CLR allows for more flexibility?), I'll have to play with it under Mono.
That being said, there is one 70s/80s concept that I'd like to see more widely used: dynamic typing, with optional static type hints -- to allow for judicious optimization. Common Lisp does this beautifully (at least with SBCL and CMUCL you can actually examine assembly code and see it match what you'd write by hand). Some Smalltalk VMs had been able to do this as well.
Clojure does do type hints, at least for Java interop. Interestingly, HotSpot VM is based on Strongtalk (one such Smalltalk VM). With Clojure re-awakening Strongtalk's ideas while running on what was once its VM, we may be coming full circle :-)