From: Bruno H. <ha...@il...> - 2000-01-14 23:55:25
|
Since the CVS notification does not work yet, I'm mailing this. I removed a wrong declaration from the regexp module. Remember that type declarations mean that you as a programmer can prove that the assertion will hold. You cannot declare the type of an argument of a documented function, because the user can pass anything he wants. Bruno |
From: Sam S. <sd...@gn...> - 2000-01-15 16:48:59
|
Bruno Haible wrote: > > Since the CVS notification does not work yet, I'm mailing this. but it does! > I removed a wrong declaration from the regexp module. Remember that > type declarations mean that you as a programmer can prove that the > assertion will hold. You cannot declare the type of an argument of > a documented function, because the user can pass anything he wants. I might be wrong, but my understanding was different. I can declare the type of arguments to make the compiled code more efficient, regardless on what I can prove. When the code is compiled with (safety 0) and the user passes a wrong type argument, he gets a segfault, with higher values of safety he gets a type error. IMO, this is a good subject for c.l.l. sds |
From: Bruno H. <ha...@il...> - 2000-01-17 13:30:32
|
Sam writes: > > Since the CVS notification does not work yet, I'm mailing this. > > but it does! Yes, now it does! > > I removed a wrong declaration from the regexp module. Remember that > > type declarations mean that you as a programmer can prove that the > > assertion will hold. You cannot declare the type of an argument of > > a documented function, because the user can pass anything he wants. > > I might be wrong, but my understanding was different. > > I can declare the type of arguments to make the compiled code > more efficient, regardless on what I can prove. > When the code is compiled with (safety 0) and the user passes > a wrong type argument, he gets a segfault, with higher values > of safety he gets a type error. Three partys are involved: - the user, who calls function in the regexp module, - the programmer, who programmed the regexp module, - the compiler, who compiles the regexp module. CLHS provides the contract between the programmer and the compiler, and I agree with your understanding of it: if safety=0 and an object is not of the declared type, a crash is possible. The contract between the user and the programmer, at least for CLISP, is that CLISP shouldn't crash. Neither should any of its modules. A crash is a bug. As a user, when I don't have the doc handy, I often call a function with various arguments, in order to see the error message. CLISP shouldn't crash there. For now CLISP ignores type declarations - whether in DECLARE or THE - but if CLISP one day compiles to C and pays attention to type declarations, the issue would become relevant. Bruno |