source: project/wiki/man/5/Deviations from the standard @ 35525

Last change on this file since 35525 was 35525, checked in by felix, 6 months ago

man/5: restructuring, fixed links, added csi module, simplification

File size: 2.6 KB
Line 
1[[tags: manual]]
2
3== Confirmed deviations
4
5Identifiers are by default case-sensitive (see [[Using the compiler]]).
6
7=== Number of arguments to procedures and macros
8
9The maximal number of arguments that may be passed to a
10compiled procedure or macro is limited to around 1000.
11Likewise, the maximum number of values that can be passed
12to continuations captured using {{call-with-current-continuation}}
13is 1000.  This is an implementation restriction that is unlikely
14to be lifted.
15
16
17=== Numeric string-conversion considerations
18
19In some cases the runtime system uses the numerical string-conversion
20routines of the underlying C library.  Consequently, the procedures
21{{string->number}}, {{read}}, {{write}}, and {{display}} do not obey
22read/write invariance for inexact numbers.
23
24
25=== Environments and non-standard syntax
26
27In addition to the standard bindings {{scheme-report-environment}} and
28{{null-environment}} contain additional non-standard bindings for the
29following syntactic forms: {{import}}, {{require-extension}},
30{{require-library}}, {{begin-for-syntax}}, {{export}}, {{module}},
31{{cond-expand}}, {{syntax}}, {{reexport}}, {{import-for-syntax}}.
32
33
34== Unconfirmed deviations
35
36=== {{char-ready?}}
37
38The procedure {{char-ready?}} always returns {{#t}} for
39terminal ports.
40
41
42
43== Doubtful deviations
44
45=== {{letrec}}
46
47{{letrec}} does evaluate the initial values for the bound
48variables sequentially and not in parallel, that is:
49
50<enscript highlight="scheme">
51(letrec ((x 1) (y 2)) (cons x y))
52</enscript>
53
54is equivalent to
55
56<enscript highlight="scheme">
57(let ((x (void)) (y (void)))
58  (set! x 1)
59  (set! y 2)
60  (cons x y) )
61</enscript>
62
63where R5RS requires
64
65<enscript highlight="scheme">
66(let ((x (void)) (y (void)))
67  (let ((tmp1 1) (tmp2 2))
68    (set! x tmp1)
69    (set! y tmp2)
70    (cons x y) ) )
71</enscript>
72
73It is unclear whether R5RS permits this behavior or not; in any case,
74this only affects letrecs where the bound values are not
75lambda-expressions.
76
77
78== Non-deviations that might surprise you
79
80=== {{let-syntax}} and {{letrec-syntax}}
81
82{{let-syntax}} and {{letrec-syntax}} introduce a new scope.
83
84
85=== {{equal?}} compares all structured data recursively
86
87{{equal?}} compares all structured data with the exception of
88procedures recursively, while R5RS specifies that {{eqv?}} is used for
89data other than pairs, strings and vectors.  However, R5RS does not
90dictate the treatment of data types that are not specified by R5RS
91
92
93=== {{transcript-on}} and {{transcript-off}} are not implemented
94
95The {{transcript-on}} and {{transcript-off}} procedures are
96not implemented.  R5RS does not require them.
97
98---
99Previous: [[Using the compiler]]
100
101Next: [[Extensions to the standard]]
Note: See TracBrowser for help on using the repository browser.