Changed the module warning: Recommend the use of scheme-with-scsh.
This commit is contained in:
parent
e47611a0ae
commit
2540846e92
|
@ -146,40 +146,35 @@ all, we recommend taking the time to learn and use it.
|
|||
The effort will pay off in the construction of modular, factorable programs.
|
||||
|
||||
\subsubsection{Module warning}
|
||||
Programmers who open both the \ex{scheme} and \ex{scsh} structures in their
|
||||
own packages should make sure to always put the \ex{scsh} reference first.
|
||||
\begin{center}
|
||||
\begin{tabular}{l@{\qquad}l}
|
||||
Do this: & Not this: \strut \\
|
||||
\quad{\begin{codebox}[b]
|
||||
(define-structure web-server
|
||||
(open scsh
|
||||
scheme
|
||||
net-hax
|
||||
\vdots)
|
||||
(file web))\end{codebox}}
|
||||
&
|
||||
\quad{\begin{codebox}[b]
|
||||
(define-structure web-server
|
||||
(open scheme
|
||||
scsh
|
||||
net-hax
|
||||
\vdots)
|
||||
(file web))\end{codebox}}\\
|
||||
%
|
||||
Open \ex{scsh} before \ex{scheme}. &
|
||||
Not \ex{scsh} after \ex{scheme}.
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
Ordering the two packages like this is necessary because scsh overrides
|
||||
some of the standard R4RS Scheme definitions exported by the \ex{scheme}
|
||||
package with its own definitions.
|
||||
For example, scsh's versions of the R4RS I/O functions such as \ex{display}
|
||||
and \ex{write} take integer file descriptors as arguments, as well as Scheme
|
||||
ports.
|
||||
If you open the \ex{scheme} structure before the \ex{scsh} structure,
|
||||
you'll get the standard {\scm} definitions, which is not what you want.
|
||||
Most scsh programs will need to import from the \ex{scheme} structure
|
||||
as well as from the \ex{scsh} structure. However, putting both of
|
||||
these structures in the same \texttt{open} clause is a bad idea
|
||||
because the structures \ex{scheme} and \ex{scsh} export some names of
|
||||
I/O functions in common but with different definitions. The current
|
||||
implementation of the module system does not recognize this as an
|
||||
error but silently overwrites the exports of one structure with the
|
||||
exports of the other. If the \ex{scheme} structure overwrites the
|
||||
exports of the \ex{scsh} structures the program will access the
|
||||
R$^5$RS definitions of the I/O functions which is not what you want.
|
||||
|
||||
Previous versions of this manual suggested to list \ex{scheme} and
|
||||
\ex{scsh} in a specific order in the \texttt{open} clause of a
|
||||
structure to ensure that the definitions from \ex{scsh} overwrite the
|
||||
ones from \ex{scheme}. This approach is error-prone and fragile: A
|
||||
simple change in the implementation of the module system will render
|
||||
thousands of programs useless. Starting with release 0.6.3 scsh
|
||||
provides a better means to deal with this problem: the structure
|
||||
\ex{scheme-with-scsh} provides all the exports of the modules
|
||||
\ex{scheme} and \ex{scsh} but exports the right denotations for the
|
||||
I/O functions in question. To make a long story short:
|
||||
\begin{center}
|
||||
Scsh programs should open the structure \ex{scheme-with-scsh} if
|
||||
they need access to the exports of \ex{scheme} and \ex{scsh}.
|
||||
\end{center}
|
||||
|
||||
For programs which should run in versions of scsh prior to release
|
||||
0.6.3, programmers should make sure to always put the \ex{scsh}
|
||||
reference first.
|
||||
|
||||
\subsection{Switches}
|
||||
\label{sec:scsh-switches}
|
||||
|
|
Loading…
Reference in New Issue