I’ve been watching this with some interest after RacketCon… There’s a lot that can be said about it, but the one thing that keeps coming up for me is that this is a prime example of the collision of Academic/Researcher and Industry/Practitioner. It’ll be interesting to see what they come up with.
The Racket folks have thus far proven themselves to be capable stewards of a pretty amazing ecosystem.
[Edit: I made the mistake of posting before reading the link. I think there’s some answers to my questions in the article.]
What do you mean by “better use?” Racket has native support for lists, vectors, hash tables, and boxes. There are generic routines for treatment as sequences or dictionaries. Are there other types of data structures you would use, or is it something else I don’t understand?
Racket has good support for generics, but the “default” functions are list-specific. For instance, to get the length of a vector, you must use sequence-length or vector-length rather than length.
Does anyone know why that seems to be common with lisps? (Or am I wrong?) It seems like there aren’t really lisps that do duck/structural typing or function overloading. Is it just that languages that do that use dynamic dispatch on objects for function overloading?
I expect it’s just the influence of Scheme and Common Lisp overpowering everything else. It’s hard to generalize about lisps without taking their influence into account.
Racket is actually above average in that it provides the functionality you want; it’s just that it was added later, and they didn’t feel comfortable adding the performance overhead of dispatch for a function everyone assumed to be about lists. For a long time lispers felt that lists should be treated as the only data structure that matters, and that swapping out vectors and hash tables should only be done in cases needing extreme performance.
I guess If performance is the concern, you can still keep the type specific versions, just not be the idiomatic default. Clojure really does make working with sets and maps so much nicer (in my limited experience).
I’ve been watching this with some interest after RacketCon… There’s a lot that can be said about it, but the one thing that keeps coming up for me is that this is a prime example of the collision of Academic/Researcher and Industry/Practitioner. It’ll be interesting to see what they come up with.
The Racket folks have thus far proven themselves to be capable stewards of a pretty amazing ecosystem.
Biggest one to me would be better use of generic data types. That always seemed strange to me coming from python or clojure.
[Edit: I made the mistake of posting before reading the link. I think there’s some answers to my questions in the article.]
What do you mean by “better use?” Racket has native support for lists, vectors, hash tables, and boxes. There are generic routines for treatment as sequences or dictionaries. Are there other types of data structures you would use, or is it something else I don’t understand?
Racket has good support for generics, but the “default” functions are list-specific. For instance, to get the length of a vector, you must use
sequence-length
orvector-length
rather thanlength
.Does anyone know why that seems to be common with lisps? (Or am I wrong?) It seems like there aren’t really lisps that do duck/structural typing or function overloading. Is it just that languages that do that use dynamic dispatch on objects for function overloading?
I expect it’s just the influence of Scheme and Common Lisp overpowering everything else. It’s hard to generalize about lisps without taking their influence into account.
Racket is actually above average in that it provides the functionality you want; it’s just that it was added later, and they didn’t feel comfortable adding the performance overhead of dispatch for a function everyone assumed to be about lists. For a long time lispers felt that lists should be treated as the only data structure that matters, and that swapping out vectors and hash tables should only be done in cases needing extreme performance.
I guess If performance is the concern, you can still keep the type specific versions, just not be the idiomatic default. Clojure really does make working with sets and maps so much nicer (in my limited experience).
The part about a new syntax that allows infix operators while keeping Scheme-like macro power refers to Honu:
(citeseer links because cs.utah.edu seems to be down here)
Gambit has SIX (Scheme Infix eXtension): http://www.iro.umontreal.ca/~gambit/doc/gambit.html#Scheme-infix-syntax-extension