[plt-scheme] If With No Else and Other Changes

From: Dave Gurnell (d.j.gurnell at gmail.com)
Date: Fri Feb 1 05:53:46 EST 2008

> 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



Posted on the users mailing list.