Joe Marshall wrote: {...} > The issue of `static vs. dynamic types' comes up about twice a year in > comp.lang.lisp It generally gets pretty heated, but eventually people > come to understand what the other person is saying (or they get bored > and drop out of the conversation - I'm not sure which). {...}
I think that the thing about "Language Expressiveness" is just so elusive, as it is based on each programmers way of thinking about things, and also the general types of problems that that programmer is dealing with on a daily basis. There are folks out there like the Paul Grahams of the world, that do wonderfully complex things in Lisp, eschew totally the facilities of the CLOS, the lisp object system, and get the job done ... just because they can hack and have a mind picture of what all the type matches are "in there head". I used to use forth, where everything goes on a stack, and it is up to the programmer to remember what the heck the type of a thing was that was stored there... maybe an address of a string, another word {read function}, or an integer... NO TYPING AT ALL, but can you be expressive in forth... You can if you are a good forth programmer... NOW that being said, I think that the reason I like Haskell, a very strongly typed language, is that because of it's type system, the language is able to do things like lazy evaluation, and then though it is strongly typed, and has wonderful things like type classes, a person can write wildly expressive code, and NEVER write a thing like: fromtoby :: forall b a. (Num a, Enum a) => a -> a -> a -> (a -> b) -> [b] The above was generated by the Haskell Compiler for me... and it does that all the time, without any fuss. I just wrote the function and it did the rest for me... By the way the function was a replacement for the { for / to / by } construct of like a C language and it was done in one line... THAT TO ME IS EXPRESSIVE, when I can build whole new features into my language in just a few lines... usually only one line.. I think that is why guys who are good to great in dynamic or if it floats your boat, type free languages like Lisp and Scheme find their languages so expressive, because they have found the macro's or whatever else facility to give them the power... to extend their language to meet a problem, or fit maybe closer to an entire class of problems.. giving them the tool box.. Haskeller', folks using Ruby, Python, ML, Ocaml, Unicon.... even C or whatever... By building either modules, or libraries... and understand that whole attitude of tool building.. can be equally as expressive "for their own way of doing things". Heck, I don't use one size of hammer out in my workshop, and I sure as hell don't on my box... I find myself picking up Icon and it's derivative Unicon to do a lot of data washing chores.. as it allows functions as first class objects... any type can be stored in a list... tables... like a hash ... with any type as the data and the key... you can do things like i := 0 every write(i+:=1 || read()) which will append a sequence of line numbers to the lines read in from stdin.. pretty damn concise and expressive in my book... Now for other problems .. Haskell with it's single type lists... which of course can have tuples, which themselves have tuples in them with a list as one element of that tuple... etc.. and you can build accessors for all of that for function application brought to bear on one element of one tuple allowing mappings of that function to all of that particular element of ... well you get the idea.. It is all about how you see things and how your particular mindset is... I would agree with someone that early on in the discussion said the thing about "type's warping your mind" and depending on the individual, it is either a good warp or a bad warp, but that is why there is Ruby and Python, and Haskell and even forth... for a given problem, and a given programmer, any one of those or even Cobol or Fortran might be the ideal tool... if nothing else based on that persons familiarity or existing tool and code base. enough out of me... -- gene -- http://mail.python.org/mailman/listinfo/python-list