source: project/chicken/trunk/manual/Deviations from the standard @ 15896

Last change on this file since 15896 was 15896, checked in by Ivan Raikov, 10 years ago

merged manual from wiki

File size: 3.5 KB
Line 
1[[tags: manual]]
2
3== Confirmed deviations
4
5Identifiers are by default case-sensitive (see
6[[http://galinha.ucpel.tche.br:8080/Using%20the%20compiler#Compiler%20command%20line%20format|Compiler command line format]]).
7
8[4.1.3] The maximal number of arguments that may be passed to a
9compiled procedure or macro is 120. (However, a macro-definition
10that has a single rest-parameter can have any number of arguments.)
11Likewise, [6.4] the maximum number of values that can be passed
12to continuations captured using {{call-with-current-continuation}}
13is 120.  This is an implementation restriction that is unlikely
14to be lifted.
15
16[6.2.5] The {{numerator}} and {{denominator}} procedures cannot be
17applied to inexact numbers, and the procedure {{rationalize}} is not
18implemented at all.  This will be fixed in a later release.
19
20[6.2.4] The runtime system uses the numerical string-conversion
21routines of the underlying C library and so does only understand
22standard (C-library) syntax for floating-point constants.  Consequently,
23the procedures [6.2.6] {{string->number}}, [6.6.2] {{read}},
24[6.6.3] {{write}}, and [6.6.3] {{display}} do not obey
25read/write invariance to inexact numbers.
26
27[6.5] Code evaluated in {{scheme-report-environment}} or
28{{null-environment}} still sees non-standard syntax.
29
30== Unconfirmed deviations
31
32[6.6.2] The procedure {{char-ready?}} always returns {{#t}} for
33terminal ports.
34
35== Doubtful deviations
36
37[4.2.2] {{letrec}} does evaluate the initial values for the bound
38variables sequentially and not in parallel, that is:
39
40  (letrec ((x 1) (y 2)) (cons x y))
41
42is equivalent to
43
44  (let ((x (void)) (y (void)))
45    (set! x 1)
46    (set! y 2)
47    (cons x y) )
48
49where R5RS requires
50
51  (let ((x (void)) (y (void)))
52    (let ((tmp1 1) (tmp2 2))
53      (set! x tmp1)
54      (set! y tmp2)
55      (cons x y) ) )
56
57It is unclear whether R5RS permits this behavior or not; in any case,
58this only affects letrecs where the bound values are not
59lambda-expressions.
60
61== Non-deviations that might surprise you
62
63[6.1] {{equal?}} compares all structured data recursively, while R5RS
64specifies that {{eqv?}} is used for data other than pairs, strings and
65vectors.  However, R5RS does not dictate the treatment of data types
66that are not specified by R5RS.
67
68[6.2.5] There is no built-in support for exact rationals, complex
69numbers or extended-precision integers (bignums). The routines
70{{complex?}}, {{real?}} and {{rational?}} are identical to
71the standard procedure {{number?}}. The procedures {{make-rectangular}}
72and {{make-polar}} are not implemented. Fixnums are limited to
73±2<nowiki><sup>30</sup></nowiki> (or ±2<nowiki><sup>62</sup></nowiki>
74on 64-bit hardware).  Support for the full numeric tower is available
75as a separate package, provided the GNU multiprecision library is installed.
76
77[6.2.6] The procedure {{string->number}} does not obey read/write
78invariance on inexact numbers.
79
80[6.4] The maximum number of values that can be passed to continuations
81captured using {{call-with-current-continuation}} is 120.
82
83[6.5] Code evaluated in {{scheme-report-environment}} or
84{{null-environment}} still sees non-standard syntax.
85
86[6.6.2] The procedure {{char-ready?}} always returns {{#t}} for
87terminal ports.  The procedure {{read}} does not obey read/write
88invariance on inexact numbers.
89
90[6.6.3] The procedures {{write}} and {{display}} do not obey
91read/write invariance to inexact numbers.
92
93[6.6.4] The {{transcript-on}} and {{transcript-off}} procedures are
94not implemented.  R5RS does not require them.
95
96---
97Previous: [[Supported language]]
98
99Next: [[Extensions to the standard]]
Note: See TracBrowser for help on using the repository browser.