On Wed, Jul 13, 2011 at 2:41 PM, Phil Hagelberg <p...@hagelb.org> wrote: > Albert Cardona <sapri...@gmail.com> writes: > >> "It seems that relatively few people are taking advantage of some of >> Clojure’s most sophisticated and unique features: metadata; protocols, >> records, and types; and multimethods. These facilities are absolutely >> game-changers, at least IMO. Either most domains have no use for them >> (I can’t believe that), or most people don’t know how to use them >> effectively, thus they are left unused. Those of us that write about >> and teach Clojure, take note." > > Or it could just be that some of the other things on that list were so > compelling that they overshadowed these. > > * The REPL > * Functional Programming > * Ease of development
Good point. Though the items on that question were not mutually exclusive (you could tick more than one), it's likely some people ticked the one they thought most compelling and that others ticked three or four, but only the ones they considered to be "bread and butter" rather than "the icing on the cake". > These are the bread-and-butter of programming, so much that I'd have a > hard time ever working in (or even taking seriously) a language that > didn't support them. What about ones that seem to go out of their way not to? Java comes to mind. VB adds in "from Microsoft" and "no free software implementation" for added fun. :) Languages that do have those three items you considered crucial: Lisps, of course, and I think Python and maybe even Ruby. Smalltalk may be a bit of an oddball case: with its "BlockContext" closures it has roughly half of FP available (there are limits on creating and returning and then reusing them, or using them in multiple threads) and its "Transcript" objects are something of a REPL (it's even possible to create new classes and methods at it by typing the right incantations, something like BaseClass subclass: NewName ...) and interactive development and debugging there can make development somewhat easier than in, say, Java. Particularly, it's rapid prototyping and quickie testing that the REPL helps, and modularization and making small, composable, easily testable bits and clever HOF-based abstractions that FP helps, that contributes to the third item on your list. > I'm a fan of using multimethods to achieve > polymorphism, but polymorphism is only needed in a small subset of the > code I write, while the features above affect *everything*. Hence icing vs. bread-and-butter. Or put another way you may appreciate the socket wrench in the toolbox even if the jobs you do mean you mostly use the hammer, the needle-nose pliers, the screwdrivers, and the rotary tool and reach for the wrench only occasionally. -- Protege: What is this seething mass of parentheses?! Master: Your father's Lisp REPL. This is the language of a true hacker. Not as clumsy or random as C++; a language for a more civilized age. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en