[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: T -> Scheme



    From: Lewis Johnson <johnson%YALE-MBUILD@YALE>
    Date: 21 Aug 84 19:10:20 EDT (Tue)

    You claim that it is easy to eliminate T expressions which define
    symbols inside of LAMBDAs.  I see how that works for certain cases,
    but how would you rewrite this [in MIT Scheme]?

	    (let ((x ...))
		 (define y ...)
		 (define z ...))

Good question.  This needs some serious thought.  The obvious solution
is

	(define m
	  (locale m
	    (define x ...)
	    (define y ...)
	    (define z ...)
	    m))

	(import m y z)

which I believe is sort of like the way one does modules in MIT Scheme
[modulo syntax - its syntax is something more like this:

	(define m
	  (make-environment
	    (define x ...)
	    (define y ...)
	    (define z ...)))

	(define y (access m y))
	(define z (access m z))  ].

However, this has protection and compilation problems; protection in
the sense that anyone who has access to the environment containing m
has access to m and therefore can access the value of x, which you'd
rather he couldn't see, and compilation problems for a similar reason,
that any analysis you do either to m or to the outer environment may be
invalidated by virtue of escaping values, shadowing, etc.

John Lamping is working on a module system which may be able to address
these problems, and allow one to express "small modules" concisely.