I think V4 is a good step forward and I certainly welcome it.&nbsp; I&#39;m not that worried about converting my code over to it.&nbsp; What I am worried about is that there doesn&#39;t seem to be a practical way, that I&#39;ve seen, to maintain a single PLaneT package that is compliant with both V4 and V3.&nbsp; I certainly don&#39;t see how I can make use many of the new V4 features in a PLaneT package and retain that compatibility.<br>
<br>Doug<br><br><div class="gmail_quote">On Fri, Feb 1, 2008 at 3:53 AM, Dave Gurnell &lt;<a href="mailto:d.j.gurnell@gmail.com">d.j.gurnell@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div class="Ih2E3d">&gt; What other constructs might bite us?<br>
<br>
</div>Hi Doug,<br>
<br>
There are a lot of great improvements in PLT4, and on the whole the<br>
transition process is not too bad. However, there are a couple of<br>
areas in which I&#39;ve had problems:<br>
<br>
I&#39;ve been having lots of problems with keyword arguments. There is a<br>
fundamental difference in the way they work in the mzscheme and scheme/<br>
base languages, and there are issues that still need ironing out:<br>
<br>
 &nbsp; - the semantics of keyword arguments have changed: you can no<br>
longer pass arbitrary keywords to a procedure and ignore those you are<br>
not expecting (on the other hand, unrecognised keywords are found at<br>
compile time);<br>
<br>
 &nbsp; - AFAIK, modules in the mzscheme language cannot call keyword<br>
procedures in modules written in scheme/base;<br>
<br>
 &nbsp; - also AFAIK, modules in scheme/base cannot call keyword procedures<br>
in mzscheme modules;<br>
<br>
 &nbsp; - the new style contracts from scheme/contract work fine with old<br>
style lambdas and opt-lambdas, but they do not work with lambda/kws;<br>
<br>
 &nbsp; - class.ss currently does not work correctly with either keyword<br>
system (I&#39;ve filed a bug report about this one too).<br>
<br>
There are also some differences between the structure subforms in<br>
provide and provide/contract. If you provide a structure using provide/<br>
contract, you cannot re-provide it using provide and struct-out. For<br>
example:<br>
<br>
 &nbsp; (module a scheme/base<br>
 &nbsp; &nbsp; (require scheme/contract)<br>
 &nbsp; &nbsp; (define-struct person (name) #:transparent)<br>
 &nbsp; &nbsp; (provide/contract (struct person ([name string?]))))<br>
<br>
 &nbsp; (module b scheme/base<br>
 &nbsp; &nbsp; (require (file &quot;a.ss&quot;))<br>
 &nbsp; &nbsp; (provide (struct-out person)))<br>
<br>
That&#39;s all I can think of for now.<br>
<br>
Cheers,<br>
<br>
-- Dave<br>
<br>
_________________________________________________<br>
 &nbsp;For list-related administrative tasks:<br>
 &nbsp;<a href="http://list.cs.brown.edu/mailman/listinfo/plt-scheme" target="_blank">http://list.cs.brown.edu/mailman/listinfo/plt-scheme</a><br>
</blockquote></div><br>