[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Scheme-reports] [r6rs-discuss] Updated list of latest Scheme releases
On 12/11/2012 06:40 AM, John Cowan wrote:
> I'd be particularly interested in knowing what features, if any, you
> don't intend to support.
Here is a preliminary list. There may be other parts of R7RS that
may cause difficulties when I try to implement them, or read them
carefully enough to incorporate into the manual. (My goal is for
the Kawa manual to be self-contained, at least to the extent of
not having to read R7RS side-by-side.)
* Generally when R7RS says an expression returns an unspecified
value Kawa will return #!void, which is equivalent to zero values.
* Full continuations are unlikely to be implemented soon.
They could be implemented by re-writing, but that would
be slow, and thus only supported when explicitly requested.
"Asynchronous Programming" (as in C# 4.5) adds some
motivation for the needed re-writing, though if cheap
co-routines get added to the JVM that may be enough.
Continuation-based webservers also provide some motivation.
* Lack of continuations simplifies/limits dynamic-wind.
* Full tail-call-elimination is only supported when explicitly
requested. This may change if the JVM gets native support.
Kawa does a good job of statically resolving tail-calls in
some situations, including "state-machine" situations.
* Exception handling may be difficult to implement
correctly. Especially since we want some sane
interoperability with Java exceptions: One would like
guard's handler to be called if a JVM exception is thrown.
It would be preferable for native exception handlers to
be able to handle raise - though not raise-continuable.
We want native finalizers to executed when a raise happens,
but not when a raise-continuable returns to the caller.
* Currently dividing an exact integer by exact zero returns
an exact infinity. This may or may not be a good idea - if
so it almost certainly needs some tweaking.
* Display of an infinite list does not terminate. This is
similar to how display in Kawa does auto-forcing, while
write doesn't. I may change this, but it depends on UI
experimentation that won't happen soon. (One idea is
if the output fill more than a screenful, you'll be given
something like a "more" button to request further output
or terminate the computation.)
* equal? of cyclic lists does not terminate. I will
probably fix this before declaring R7RS support.
* There are likely to be differences in handling of
top-level variables, REPLs, and libraries, but I
haven't dug deeply into this area yet. Likewise
the environments passed to eval may not be quite
as specified, at least not in the short term.
Scheme-reports mailing list