Ted Leung on the air
Ted Leung on the air: Open Source, Java, Python, and ...
Ted Leung on the air: Open Source, Java, Python, and ...
Sat, 13 Mar 2004
The end of the Java ice age?
Glenn writes about the Java interlude in programming language development. As he said, it's nice to discover other people of a similar opinion.
During the time that Java was getting started, I was very interested in Dylan, an OO dynamic language (dialect of Lisp, really) under development at Apple. In fact I almost took a job working at Harlequin, which was doing a Windows port of Dylan, but my interview with Peter Norvig convinced me that Dylan was likely to lose the mindshare battle with Java, so I ended up at Apple working on a port of Java to the Newton OS.
I would love to see the Dylan effort get off the ground again. The Gwydion hackers are keeping it on life support, but it really needs a shot in the arm. A while back Functional Objects (the name for the remnants of the Harlequin team) was talking about open sourcing their Linux port, which would have been excellent. The company's web page has been silent for a while and there haven't been many posts in comp.lang.dylan, either. I guess they'd rather have their technology go silently into the night rather than give it a chance to revive in the open source space.
In the meantime, James has been looking at the Dylan stuff, and the semantics of Groovy are headed for Dylanness, although there's a fair bit left to go, and the voices calling for Java compatibility may prevent it from getting there. There are three talks on improving Python performance at PyCon this year, so perhaps someday python might be in the running for high performance dynamic language. Or maybe there's a dark horse sitting in some arch repository somewhere (I can dream)...
[22:35] |
[computers/programming/java] |
# |
TB |
F |
G |
14 Comments |
Here's the URL for Scala:
[http://scala.epfl.ch/]
Posted by Nils Kassube at Sun Mar 14 06:54:31 2004
[http://scala.epfl.ch/]
Posted by Nils Kassube at Sun Mar 14 06:54:31 2004
Nice is also related to Dylan, since it is based on multi-methods (generic functions), so if you are missing that aspect you should definitely give it a try. Nice has stronger emphasis on static type-checking than Dylan or Groovy. Still, Nice is, like those languages, much more expressive than Java thanks to its powerful type system and other features like anonymous functions, optional arguments, tuples, ...
Posted by Daniel Bonniot at Sun Mar 14 17:40:39 2004
Posted by Daniel Bonniot at Sun Mar 14 17:40:39 2004
One point I forgot mentioning is that you can omit the type of local variables in Nice, which can match the feel of dynamic languages. However the compiler does infer the type for you, so you still get static type-checking.
I'm actually putting a further touch to this, by allowing such implicit typing also when using generic classes. So you could write:
<pre>
var l = new ArrayList();
l.add("...");
int i = l.get(0); // compilation type-error
<pre>
The compiler will automatically discover that l holds a list of Strings (from the call to add) and consequently report an error when assigning the value to an int.
Posted by Daniel Bonniot at Sun Mar 14 17:54:56 2004
I'm actually putting a further touch to this, by allowing such implicit typing also when using generic classes. So you could write:
<pre>
var l = new ArrayList();
l.add("...");
int i = l.get(0); // compilation type-error
<pre>
The compiler will automatically discover that l holds a list of Strings (from the call to add) and consequently report an error when assigning the value to an int.
Posted by Daniel Bonniot at Sun Mar 14 17:54:56 2004
One point I forgot mentioning is that you can omit the type of local variables in Nice, which can match the feel of dynamic languages. However the compiler does infer the type for you, so you still get static type-checking.
I'm actually putting a further touch to this, by allowing such implicit typing also when using generic classes. So you could write:
<pre>
var l = new ArrayList();
l.add("...");
int i = l.get(0); // compilation type-error
<pre>
The compiler will automatically discover that l holds a list of Strings (from the call to add) and consequently report an error when assigning the value to an int.
Posted by Daniel Bonniot at Sun Mar 14 17:58:00 2004
I'm actually putting a further touch to this, by allowing such implicit typing also when using generic classes. So you could write:
<pre>
var l = new ArrayList();
l.add("...");
int i = l.get(0); // compilation type-error
<pre>
The compiler will automatically discover that l holds a list of Strings (from the call to add) and consequently report an error when assigning the value to an int.
Posted by Daniel Bonniot at Sun Mar 14 17:58:00 2004
I was on the Dylan bandwagon for a while, but I don't think it's going to revive -- after a time I realized that Dylan==Lisp with wordy syntax and infix notation. After writing Python, Dylan code feels like COBOL.
Also, the built-in library support for Dylan is spotty at best -- even the simple task of formatting a float involves seeking out someone else's source code or writing your own. I can't figure out anyone spent time on writing libraries for GUIs and interfacing with COM when they don't have the basics down.
Posted by Brandon Corfman at Wed Mar 17 04:51:07 2004
Also, the built-in library support for Dylan is spotty at best -- even the simple task of formatting a float involves seeking out someone else's source code or writing your own. I can't figure out anyone spent time on writing libraries for GUIs and interfacing with COM when they don't have the basics down.
Posted by Brandon Corfman at Wed Mar 17 04:51:07 2004
python MIGHT be in the running? have you tried psyco, it changed my life!
Posted by jt at Wed Mar 17 09:38:43 2004
Posted by jt at Wed Mar 17 09:38:43 2004
Brandon,
Broken libraries can be fixed. The problem I have with python is that certain aspects of the language semantics are busted, it's not expressional, functions are not first class, there are no continuations (also a strike on Dylan), there are no macros. Also good performance is hard with python.
Posted by Ted Leung at Wed Mar 17 11:09:55 2004
Broken libraries can be fixed. The problem I have with python is that certain aspects of the language semantics are busted, it's not expressional, functions are not first class, there are no continuations (also a strike on Dylan), there are no macros. Also good performance is hard with python.
Posted by Ted Leung at Wed Mar 17 11:09:55 2004
jt,
psyco is nice, but not really supported. I'd love to see some more people get involved with it. I have high hopes for it and Starkiller, though.
Posted by Ted Leung at Wed Mar 17 11:12:55 2004
psyco is nice, but not really supported. I'd love to see some more people get involved with it. I have high hopes for it and Starkiller, though.
Posted by Ted Leung at Wed Mar 17 11:12:55 2004
Python functions (and methods) are indeed first-class inasmuch as it is permssible to pass them around like any other object. Maybe you mean you'd like to be able to do syntactic extension ala Scheme?
Posted by Chris McDonough at Wed Mar 17 19:09:04 2004
Posted by Chris McDonough at Wed Mar 17 19:09:04 2004
Chris,
What I really meant is an easy notation for doing lambdas -- python's lambda's are restricted. I originally wrote about the lambdas. To me a simple notation for anonymous functions is a part of first class functions, but it's a debatable point.
Syntactic extension is also on my list, but is unrelated to the above.
Posted by Ted Leung at Wed Mar 17 22:24:57 2004
What I really meant is an easy notation for doing lambdas -- python's lambda's are restricted. I originally wrote about the lambdas. To me a simple notation for anonymous functions is a part of first class functions, but it's a debatable point.
Syntactic extension is also on my list, but is unrelated to the above.
Posted by Ted Leung at Wed Mar 17 22:24:57 2004
Chris,
What I really meant is an easy notation for doing lambdas -- python's lambda's are restricted. I originally wrote about the lambdas. To me a simple notation for anonymous functions is a part of first class functions, but it's a debatable point.
----
I like the idea of anonymous functions too but i loathe the lambda keyword. Why couldnt they use something like the Maple syntax for anonymous (pure) functions ? (x->x+2) gives a function that adds 2 to its argument. Or why cant we simply write something like def(x):x+2 , which wouldnt be so bad at all and looks very pythonic ? I'm sure that this could be done but the main problem is a certain "culture" in the python world that eschews anything that smacks of functional.
Simply put, GvR and some python luminaries are very much against it.
I simply dont understand how people could not see the usefulness of having easily available anonymous functions when writing scripts or when interacting with the prompt, just for starters .
Posted by ogunsiron at Thu Mar 18 20:02:05 2004
What I really meant is an easy notation for doing lambdas -- python's lambda's are restricted. I originally wrote about the lambdas. To me a simple notation for anonymous functions is a part of first class functions, but it's a debatable point.
----
I like the idea of anonymous functions too but i loathe the lambda keyword. Why couldnt they use something like the Maple syntax for anonymous (pure) functions ? (x->x+2) gives a function that adds 2 to its argument. Or why cant we simply write something like def(x):x+2 , which wouldnt be so bad at all and looks very pythonic ? I'm sure that this could be done but the main problem is a certain "culture" in the python world that eschews anything that smacks of functional.
Simply put, GvR and some python luminaries are very much against it.
I simply dont understand how people could not see the usefulness of having easily available anonymous functions when writing scripts or when interacting with the prompt, just for starters .
Posted by ogunsiron at Thu Mar 18 20:02:05 2004
Carlos, Nils, and Daniel,
Do Scala or Nice have macros?
Posted by Ted Leung at Fri Mar 19 00:32:44 2004
Do Scala or Nice have macros?
Posted by Ted Leung at Fri Mar 19 00:32:44 2004
Ted,
Nice does not have macros at the moment. There is a developer on this question (multi-stage compilation), so it's a prospect for the future.
Note that you can already do quite a lot using closures and the syntax for block arguments. For instance, the C# style using statment:
can be defined in purely user code. That includes the ability to make arbitrary classes implement Disposable (and thus be resources that can be used with the 'using' method), even those that you are not the author of (like java.* classes).
Posted by Daniel Bonniot at Sat Mar 20 07:46:58 2004
Nice does not have macros at the moment. There is a developer on this question (multi-stage compilation), so it's a prospect for the future.
Note that you can already do quite a lot using closures and the syntax for block arguments. For instance, the C# style using statment:
using(InputStream s = ...) {
... // read from s
} // s is closed automatically as in a finally
can be defined in purely user code. That includes the ability to make arbitrary classes implement Disposable (and thus be resources that can be used with the 'using' method), even those that you are not the author of (like java.* classes).
Posted by Daniel Bonniot at Sat Mar 20 07:46:58 2004
You can subscribe to an RSS feed of the comments for this blog:
Add a comment here:
You can use some HTML tags in the comment text:
To insert a URI, just type it -- no need to write an anchor tag.
Allowable html tags are:
You can also use some Wiki style:
URI => [uri title]
<em> => _emphasized text_
<b> => *bold text*
Ordered list => consecutive lines starting spaces and an asterisk
To insert a URI, just type it -- no need to write an anchor tag.
Allowable html tags are:
<a href>
, <em>
, <i>
, <b>
, <blockquote>
, <br/>
, <p>
, <code>
, <pre>
, <cite>
, <sub>
and <sup>
.You can also use some Wiki style:
URI => [uri title]
<em> => _emphasized text_
<b> => *bold text*
Ordered list => consecutive lines starting spaces and an asterisk