[plt-scheme] If With No Else and Other Changes
> What other constructs might bite us?
Hi Doug,
There are a lot of great improvements in PLT4, and on the whole the
transition process is not too bad. However, there are a couple of
areas in which I've had problems:
I've been having lots of problems with keyword arguments. There is a
fundamental difference in the way they work in the mzscheme and scheme/
base languages, and there are issues that still need ironing out:
- the semantics of keyword arguments have changed: you can no
longer pass arbitrary keywords to a procedure and ignore those you are
not expecting (on the other hand, unrecognised keywords are found at
compile time);
- AFAIK, modules in the mzscheme language cannot call keyword
procedures in modules written in scheme/base;
- also AFAIK, modules in scheme/base cannot call keyword procedures
in mzscheme modules;
- the new style contracts from scheme/contract work fine with old
style lambdas and opt-lambdas, but they do not work with lambda/kws;
- class.ss currently does not work correctly with either keyword
system (I've filed a bug report about this one too).
There are also some differences between the structure subforms in
provide and provide/contract. If you provide a structure using provide/
contract, you cannot re-provide it using provide and struct-out. For
example:
(module a scheme/base
(require scheme/contract)
(define-struct person (name) #:transparent)
(provide/contract (struct person ([name string?]))))
(module b scheme/base
(require (file "a.ss"))
(provide (struct-out person)))
That's all I can think of for now.
Cheers,
-- Dave