Formal comment #128 (defect)
Declarations do not belong in the report
Reported by: Abdulaziz Ghuloum
Component: other
Version: 5.91
One sentence summary: Declarations have no reliable semantics and
should be dropped from the report.
Description:
A big problem with declarations is that the way they're specified,
they do not follow any scoping rules. This is especially true in the
presence of macros: when one library with one declaration exports a
macro that is used in another library using a different set of
declarations. There is just no meaningful way in which the programmer
can specify the extent of a declaration or know how a single
declaration in one library is going to affect the rest of the program.
Another problem with declarations is that they are very very
implementation specific. The current set declarations may be useless
for some implementations, while other implementations may need a
different set. There is no one-size-fits-all set.
There is no way in which one can use declarations reliably, safely,
and in a portable way. The original goal of R6RS was portability and
code sharing. Declarations, as they stand in the report, do not help
accomplishing that goal and may indeed hinder it.
Recommendation:
Implementation-specific features (including declarations) should be
implemented as implementation-specific libraries and not be mandated
by the report.
RESPONSE:
Declarations will be dropped from the report.
The second sentence of section 4.4 will be revised to say
something like "Libraries and scripts that import only
from safe libraries are also said to be safe." The last
sentence of section 4.4 will be revised to something like
"Implementations may provide access to unsafe libraries,
and may provide other implementation-specific facilities
that cannot guarantee safety."
Implementation-specific facilities may also be mentioned
in a non-normative appendix.
The report will abandon the second half of the guiding
principle stated in the R6RS Status Report of June 21,
2006, that R6RS Scheme should:
* allow programmers to rely on a level of automatic run-time
type and bounds checking sufficient to ensure type safety
while also providing a standard way to declare whether such
checks are desired;