From: Matthew Flatt <mflatt@cs.utah.edu> To: plt-scheme@list.cs.brown.edu Subject: [plt-scheme] 301.11 Date: Mon, 20 Mar 2006 13:39:50 -0700 MzScheme and MrEd are now version 301.11 in the SVN repository trunk. (Version 301.10 never made it out of my development branch.) IMPORTANT: since the new `compiler-enforce-module-constants’ parameter defaults to #t, module re-definition is effectively prohibited by default. Also, in a namespace produced by `module->namespace’, a variable can’t be redefined or `set!’ed unless the original module `set!’ed the variable (or the variable wasn’t defined at all). If you use `module->namespace’ and/or module re-definition for debugging, then set `compiler-enforce-module-constants’ to #f. Changes: * The bytecode compiler now inlines some functions bound by `let’, `letrec’, or a module-level `define’. The conditions for inlining are typical (e.g., the function has to be "small"). Currently, module-level definitions are inlined only within the same module. * By default, a variable defined in a module top-level is immutable, unless the module (in expanded form) contains a `set!’ on the variable. The only way to `set!’ such variables before was to use `module->namespace’, or to redefine the module. Now, those don’t work either, unless the `compiler-enforce-module-constants’ parameter is set to #f before compiling the module. If `compiler-enforce-module-constants’ is set to #f, then module bindings are not inlined, and the JIT must generate certain run-time checks that are otherwise unnecessary. * Changed `file-position’ so that eof as a second argument moves to the end of a file/string port. * Added `procedure-closure-contents-eq?’, which is useful for certain caching operations (e.g., in the implementation of lazy contracts). Matthew