[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Features you would like to see
- From: Mark Hamburg <mhamburg@...>
- Date: Mon, 20 Aug 2007 12:50:57 -0700
on 8/19/07 8:39 PM, Anders Bergh at anders1@gmail.com wrote:
> 2. shorter syntax for anonymous functions. I saw a patch somewhere
> that allowed "do ... end" syntax for these... really nice looking in
> my opinion.
I used to really want this and even made proposals in this regard. I've gone
back and studied the subtleties of Smalltalk blocks and realized that the
problem is a lot deeper than one would expect.
Assume we somehow recognized do as shorthand for creating a function:
myMutex:withLock( do
-- do stuff while holding the mutex
end )
Or better yet, apply the same sort of rules to "do functions" as get applied
to strings and tables as parameters:
myMutex:withLock do
-- do stuff while holding the mutex
end
But now for the problem case:
myMutex:withLock do
return 42
end
Does the return exit the function and hence behave differently from a return
in:
while foo() do
return 42
end
Or do we now have a non-local exit mechanism a la Smalltalk in which the
return will exit the function containing the do-block-pseudo-function?
If we go the non-local exit route -- which seems ideal as we start
constructing things that look like control constructs -- what do we do when
we want a return from just the local function. More syntax needed...
Stickier still, can you do a non-local-exit across a pcall?
I think there's potential fruitful opportunities here for Lua, but I think
they will require a fair amount of thought and may introduce enough
semantics shifts to force things to Lua 6 (or at least 5.5).
Mark