A bit of musing on which of these features I agree/disagree with and
what's in Mirah or planned for Mirah...

On Wed, Jul 14, 2010 at 4:52 AM, Shantanu Kumar
<[email protected]> wrote:
> 1. Data should be immutable by default. I like Clojure's
> implementation of immutability and atom/ref (STM). Clojure's transient
> are useful too.

I like language-level immutability. I do not like forced "everything
is immutable", and current VMs/GCs don't appear to either. I think
there's a happy medium between the two that no current language has
really found. I've been considering ways to do it in Mirah, and in
JRuby you can actually extend Clojure::Object instead of regular
Object and get an immutable instance-variable set.

> 2. Implementation inheritance should be disabled. No abstract classes
> either. :)
> 3. Inter-operable and binary compatible with Java. Should be able to
> call Java code. There should be a mechanism to call from Java.
> 4. Syntactic sugar for defining and implementing Thin-interfaces
> (interface with just one method signature) - then it looks like a
> closure.

Mirah does this now:

Thread.new { ... this becomes a Runnable ... }
Arrays.sort(someArray) {|a,b| ...this becomes a Comparator... }

> 5. Checked exceptions should be regarded like unchecked ones.

A trivial feature to add, but it makes interop trickier (if you don't
declare throws, Java *can't* catch).

> 6. No "static" blocks of code.

In Mirah these look like class-level methods, but follow the same
lifecycle as static methods. Is there really a right way to do this?
Even Scala's "objects" are just static singletons.

> 7. No "synchronized" keyword. Language should have better concurrency
> primitives. Queues / message passing (actor/agent model?) may be
> favored.

Hard to do without introducing a library, perhaps? The biggest problem
I've seen with languages that incorporate actors out of the box is
that they get it wrong...repeatedly...and developers are basically
left to implement actors themselves anyway. The more libraries your
language depends on, the more chances you have to pick the wrong
libraries.

> 8. Should not introduce monkey-patching. But anything like Lisp macros
> would be great.

Mirah has compiler macros; we're trying to expand the possibilities of
the language that way, rather than by adding standard libraries.

> 9. [Optional feature] Regular expressions at a language level.

Mirah's parser is based on Ruby, where regexp are a syntactic feature.
Currently it just does a Pattern.compile every time that syntax is
encountered, though.

> 10. [Optional feature] Conditions and restarts as in Common Lisp:
> http://www.gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html

Probably need continuations for this. Maybe could simulate it with coroutines.

- Charlie

-- 
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en.

Reply via email to