From: Matthew Flatt <mflatt@cs.utah.edu>
To: plt-scheme@list.cs.brown.edu
Subject: [plt-scheme] 370.3
Date: Fri, 8 Jun 2007 16:06:39 +0800

MzScheme and MrEd are now version 370.3 in the SVN repository trunk.

Changes:

 * Added `hash-table-iterate-{first,next,key,value}’, which makes it
   easier to implement iterators/generators for hash tables.

 * The bytecode optimizer provides better dead-code elimination for
   `letrec’ and for unused chains of procedures (e.g., an unused `f’
   that has the only reference to `g’ that has the only reference to
   `h’).

In particular, the optimizer now handles all of the examples from

  http://www.cs.brown.edu/pipermail/plt-scheme/2007-April/017156.html

The one that remains is

 (comp=? (compile ’(let* ([x 8][f (lambda () (set! x 5))])
                     (display x)))
         (compile ’(display 8)))
 ; => #f
 ;  because the `set!’ prevents constant propagation `x’, even though
 ;  the `set!’ is eventually removed

because mutability is still determined early. But mutability doesn’t
necessarily interfere with dead-code elimination, so `foo’ in the
second original example of the thread is eliminated:

  (letrec ((foo (lambda () ... (set! foo ...) ...)))
    ;; doesn’t use foo:
    body ...)

This optimizer change is unlikely to speed up existing code, but it
gives macro writers their rights.

Matthew