tjt@kobold.UUCP (T.J.Teixeira) (12/02/83)
I agree that the Lisp programming environment (i.e. support tools) is responsible for making Lisp highly productive, along with being an interpreted language and providing automatic storage management (i.e. garbage collection). At the same time, production Lisp's have avoided being mere toys by providing good compilers so that the interpreter is mainly used as a debugging aid for large programs. I can only think of two features of the language itself that explain why Lisp is the only major language supporting this type of programming environment: 1) Data types are associated with values, not variables, and are determined at run time. Without an interpretive environment, this is a bad idea (consider all the trouble you can get into in typeless languages such as assembly language or BCPL), and it is definitely worth while to include type declarations that can be checked at compile time. Using an interpreter (and incremental compiler) makes it very much cheaper to correct this type of mistake. 2) There is a unique, simple and obvious way of representing programs as data. I don't think the advantage is so much that Lisp is easy to parse (the reason that is usually expounded), but rather that the parse trees are easy to manipulate. For most other languages, if you have n different independently developed compilers, you will have as many different internal representations of parse trees. This makes it extremely difficult to build on previous work. -- Tom Teixeira, Massachusetts Computer Corporation. Westford MA ...!{ihnp4,harpo,decvax,ucbcad,tektronix}!masscomp!tjt (617) 692-6200