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;