Subject: Re: Static/Strong/Implicit Typing From: Erik Naggum <erik@naggum.no> Date: 26 Jan 2004 08:11:48 +0000 Newsgroups: comp.lang.lisp Message-ID: <3284093508521329KL2065E@naggum.no> * sajiimori | If I were still running a Unix, I'd check out CMUCL -- as it is, I've | only seen CLISP and Corman, neither of which catch type errors at | compile time. :( Would CMUCL warn about this during compile-time? If | not, do you think it should? | | (defun x-plus-y (x y) | (+ x y)) | | (defun test () | (x-plus-y 5 "asdf")) I keep wondering why the static type crowd always make up this kind of examples. In the Common Lisp world, you are supposed to be conscious when you write your code, and the above fragment suggests that you are not, but want the compiler to wake you up from your code-writing coma. One reason to cater to the comatose programmers is that static typing with a wide variety of types adds a lot more things to think about. The other solution to this problem is dynamic typing. If you want to understand what is going on here, you have to begin by realizing that both static and dynamic typing are answers to another, logically preceding question. The static type crowd solved a problem when people passed around machine words with different meanings. «I know», said that static type genius, «I'll let the compiler keep track of all the types and refuse to run the program with values of random types confusing the machine!». In another office, far away, sat the dynamic typing genius and thought «I know, I'll make all values self- determine their types!». The latter genius laid the foundation for the reinvention of object-orientation with run-time type information, which needed to be added to the static type genius's world view at at heavy cost. If you write the above code in Common Lisp, the purpose of running it will be to investigate the response to type errors. You will observe that you invoke the debugger. One of the things you could do then is to realize that the function that was called should be a generic function, and you can back out of the call, redefine the function x-plus-y, and resume execution by retrying the call. Another thing you could do is to realize that you had made a mistake in the caller. In this case, you would back out of the call to test, instead, and redefine that function and resume execution by calling the new test function. Please think about how this is different from the static typing systems you appear to know better than Common Lisp. | So, as a variant of my original question: In a statically, implicitly | typed Lisp, do you think the features would still complement each | other well? As long as you do not understand what you already have, there is no point in answering your question about what would be. And /calm down/, please. Say to yourself that you are not «touchy», and that you have to /think/ when you feel uncomfortable, not lash out at whoever you think makes you feel uncomfortable. Can you do this? -- Erik Naggum | Oslo, Norway 2004-026 Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.