[racket] R5.3 and #lang web-server compilation
The free variables of an expression e are those that occur in e
but have no binding in e. In a language such as Racket, a binding
is established via define and lambda [*]. So in
(lambda (x)
(define y 2)
(+ x y z))
you have one free variable: z. In
(lambda (x)
((lambda (x) (+ x 1))
(* x 10)))
you have x both as a free and a bound variable. The occurrence in
line 3 is free and the ones in line 2 are binding and bound.
A compiler must know the free variables of an expression because
without the value of a free variable it cannot create code that
determines the value of an expression. As you determine the free
variables in a compiler, you also compute a piece of code that
knows how to retrieve a value.
-- Matthias
On Aug 20, 2012, at 12:40 PM, Hendrik Boom wrote:
> On Sun, Aug 19, 2012 at 08:14:06AM -0600, Matthew Flatt wrote:
>> At Sat, 18 Aug 2012 17:29:05 -0400 (EDT), Galler wrote:
>>> Under 5.3, there's been a near order-of-magnitude improvement in
>>> compilation time for the web-server language.
>>> [...]
>>> Could I ask what has changed?
>>
>> I'm not certain, but it might have been the change in free-variable
>> calculation from a quadratic-time algorithm to a linear-time one (which
>> is commit 6fded4bac1 along with ee93e35260 in the git repo).
>
> I know what free variable are. I don't know the specifics of what 'free
> variable calculation' is. Testing whether a partiular variable is free?
> Determining the set of free variables?
>
> And what, roughly speaking are these linear and quadratic-time
> algorithms?
>
> -- hendrik
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4373 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20120820/ed06782e/attachment.p7s>