[Personal opinion: the extra nil in the (values nil a i) is quite =
unfortunate in the light of interfacing to libraries like Pascal/Ada =
et.al. where most "functions" are procedures that you interface to via =
:out and :in-out parameters, and void return type. cmucl/sbcl's =
documentation and clisp do TRT.]
-----Urspr=FCngliche Nachricht-----
To: 'Raymond Toy'; 'Christophe Rhodes'
Cc: 'haible@...'; 'Peter Van Eynde'
Hi,
Here's a bug I consider very serious, affecting sbcl and cmucl.
a. mismatch between documentation and observable behaviour
b. regression against past behaviour.
The documentation for sbcl and for cmucl says in =A78.7.3
" (def[ine]-alien-routine "cfoo" void
(str c-string)
(a char :in-out)
(i int :out))
The Lisp function cfoo will have two arguments (str and a) and two =
return values (a and i)."
It provides three return values in cmucl-19a-release-2004-07-28-9 and =
sbcl-0.8.17.4-1 (from Ubuntu/Hoary for i386)!
W.r.t point b), I'm not sure, but my memory is that cmucl matched its =
documentation 10 years ago (when we used cmucl-15b upto 17c in our =
project). So I'm not 100% its a regression against cmucl-17c.
Giving the above CLISP syntax, CLISP returns 2 values in this case, as =
cmucl documents. I'm not sure whether clisp was modeled after cmucl =
back in 1995, we'd have to ask Bruno.
I find it very sad that there's now such a dissimilarity between =
cmucl/sbcl and clisp in the area of :out values(even if its only the =
particular case where the function return type is void).
The fact that cmucl returns (values nil a i) was recently brought to my =
attention in clisp-lisp by Bernard Urban, and I thought "I need to =
investigate that".
Regards,
J=F6rg H=F6hle.
|