First public release of the Gosu programming language for the JVM
gosu-lang.org
gosu-lang.org
I contacted Guidewire thanks to their blog posts here: http://guidewiredevelopment.wordpress.com/ and AKeefer's posts here at HN.
Unfortunately for them (and me) my higher-ups at the insurance company I work for are clueless and stubborn and decided to go for a reinvent-the-wheel approach at three times the cost (our current insurance solution is based on Sun's Forte4GL http://en.wikipedia.org/wiki/Forte_4GL which, while good at the time, has been abandoned many years ago, and has no support or good IDE) .
Because of #1 and #2, the author wants to align himself with the amateur school of successful language design (the people responsible for most stuff that comes pre-installed in your Redhat box.) and distances himself from egg-heads and language purists, and their potential criticism.
Judging by the number of great languages that are not at all lispy, at least one of these is false.
I specifically said "amateur school of successful language design".
"Great" is subjective, but nearly all ground-breaking languages invented after Lisp are all Lisp-like (don't look at syntax.)
Industrial, imperative languages are nearly always "designed" on a whim. They're all incremental improvements over Algol, and they're probably what you're talking about if you're of the great majority of the programmers. As of late, they're more Lispy than you can imagine.
Except for a specific school of Lex & Yacc languages out of New Jersey, the great majority of professionally designed languages (i.e. by people with an appreciation for formal language design and semantics) have been Lispy and functional; characterized by clean minimal core, well specified semantics, even proven, and self-hosted implementation.
Just to throw the discussion a bone and offer some perspective; I consider ActionScript 3 "Lispy", but not AWK or C++.
"I much preferred implementing and coding in LISP (sic), but once I was dealing with big data sets and then having to do fairly simple calculations, APL just seemed to have the better vocabulary." - Arthur Whitney (http://cacm.acm.org/opinion/interviews/26246-a-conversation-...)
APL, Forth, and Smalltalk might not be proper functional programming languages, but they're of the same "spirit".
Now compare this to something horribly broken, like Basic ..
Joy may be another exception, but it's mainly an experimental / research language.
Some Lisps are more Lisp than others; compare Dylan to Emacs Lisp. Dylan has that refined taste, that well-thought out essence, even if it's an infix, algolish language in apperance. While elisp is an orthodox Lisp, in every sense, and is unpalatable because of its true-to-form "Lispiness".
There are languages that are semantically consistent, and that's probably what I meant by "Lispy". Then there are languages which are nothing but compiler hacks; you can tell whoever dreamed them up "grew" this hairball by tweaking a parser until it did something he wanted.
I particularly loved their hack for sparse matrices; they're implemented as hash-tables where the indices are zero-based integers, so only the indices that are initialized are created. Meaning, you can have an array with a few indices without having to create all the empty cells in between. I benchmarked it and it's far more than adequate. Makes graph algorithms breezy.
Lua is very much an acceptable Scheme.
It also has an interesting hash table optimization (that I don't quite grok). I've been reading through the Lua code bit by bit, but haven't made it there yet. Lots of other interesting stuff, though.
LuaJIT's not too shabby, either!
Lua's my favorite language for quick hacks, period. I wrote a library to add fairly idiomatic pattern matching (http://github.com/silentbicycle/tamale/). Every language needs pattern matching. :) I'm still working on explaining PM to people who aren't already into Erlang or ML, but it's documented now.
Neither are particularly "lispy" (although nearly all languages in existence have been influenced a little bit by Lisp). And yet they are wildly successful and tremendously well-designed.
So either Guido and Dennis Ritchie didn't know lisp and therefore aren't serious language designers (by your second assertion), or they did know lisp and failed to make a lispy language (which would contradict your first assertion).
If Guido and Dennis aren't serious language designers, then I'm not sure who are.
Except for a specific school of Lex & Yacc languages out of New Jersey, the great majority of professionally designed languages (i.e. by people with an appreciation for formal language design and semantics) have been Lispy and functional; characterized by clean minimal core, well specified semantics, even proven, and self-hosted implementation.
I wouldn't read too much into this. There are many more jobs for language designers in academia than there are anywhere else. So it stands to reason that most professionally-designed languages will be of the academic sort (if we can agree that a professional is someone who gets paid for their work). That doesn't imply that those languages are any better than "amateur" languages, only that there's more of them.
Python is a work in progress, though it improves between versions. Last time I used it, back in 1999, it was a bad calculator.
I do find the interface delegation feature interesting. Might be a good way to avoid those Demeter Transmogrifiers.
The null-safe property chains also look nice. Though I wonder if this is always the desired behavior?
Stab Language - http://code.google.com/p/stab-language/ Mirah - http://www.mirah.org/ Groovy++ - http://code.google.com/p/groovypptest/
Not a groovy fan, but groovy++ and compile-time AST transformations sounds like fun.
Speaking of stab, an Eclipse plugin commit just hit svn:
What's the Big Advantage of this language? It looks nice enough, but what will propel it past Scala and company?
The later two are bonafide programming languages, not improvements on Java.
(I believe it was intended for people making little games -- I've used it a few times on my own projects and it's very uncluttered, minimal etc; I used it and Chipmunk to make myself a screensaver of all of my photos falling, bouncing off of each other etc).
Does anyone know how they've gotten around the issue of Type Erasure on the JVM?
"Gosu types preserve generic type information at run time. This Gosu feature is called reified generics. This means that in complex cases you could check the exact type of an object at run time, including any parameterization. In contrast, Java discards this information completely after compilation, so it is unavailable at run time.
"Note: Even in Gosu, parameterization information is unavailable for all native Java types because Java does not preserve this information beyond compile time. For example the run time type of java.util.List<Address> in Gosu returns the unparameterized type java.util.List."
From http://gosu-lang.org/doc/wwhelp/wwhimpl/js/html/wwhelp.htm#h...
"you can add objects to a collection, but not primitives".
Why not?
"The collection and list classes used frequently in Gosu rely on the Java language’s collection classes. However, there are important differences because of built-in enhancements to these classes that use Gosu blocks, anonymous in-line defined functions that are not directly supported in the Java language."
It also has some type-inference that converts:
var str = {"foo", "bar", "baz"}
To ArrayList<String> str = new ArrayList<String>();
str.add("foo").add("bar").add("baz");
Or some such.LtU wont be going wild over this any time soon.
Is this a joke? Citation?
[I don't work for Guidewire - I worked for an insurance company that evaluated several insurance claims packages, including Guidewire's.]
I can grok Gosu easily... Scala gives me a headache...