[comp.lang.functional] TIM and SECD

taff@ucsc.edu (Tom Affinito) (05/31/91)

Question from a novice:

I'm trying to get an intuition for Fairburn & Wray's TIM machine. I've read  
their '87 paper, and am familar with SECD, SKI reduction, and the G-machine.

What I'm trying to get is some deep feeling on how TIM relates to SECD and SKI  
reduction. It seems to me that TIM is very similar to what compiled code for an  
SECD system would be like....a series of instructions for manipulating the  
stacks, building environments, and storing partial results. Is the difference  
solely in the fact that environments need not be created in TIM because of the  
preliminary lambda-lifting phase? IE, if SECD had had a supercombinator  
preprocessor, might it have looked like TIM?

In what ways do SECD + graph reduction = TIM? In what ways should that = be <>?
(Abstractly of course)

Any flames, impressions, or weird musings are most welcome!!	:)

Tom Affinito
taff@kate.ucsc.edu
-----------------------------------------------
function for an arbitrary permutation of a vector argument in J:
p =. @:~?&!&#
Wow!

torbenm@diku.dk (Torben [gidius Mogensen) (06/04/91)

taff@ucsc.edu (Tom Affinito) writes:

>I'm trying to get an intuition for Fairburn & Wray's TIM machine. I've read  
>their '87 paper, and am familar with SECD, SKI reduction, and the G-machine.

>What I'm trying to get is some deep feeling on how TIM relates to SECD and SKI  
>reduction. It seems to me that TIM is very similar to what compiled code for an  
>SECD system would be like....a series of instructions for manipulating the  
>stacks, building environments, and storing partial results. Is the difference  
>solely in the fact that environments need not be created in TIM because of the  
>preliminary lambda-lifting phase? IE, if SECD had had a supercombinator  
>preprocessor, might it have looked like TIM?

>In what ways do SECD + graph reduction = TIM? In what ways should that = be <>?
>(Abstractly of course)

Indeed, there is a lot of similarity between TIM and SECD, and yes, if
you used a name-free form for lambda expressions (supercombinators or
deBruin notation), SECD is even closer to TIM. The main difference is
that SECD is a call-by-value abstract machine, which can be modified
to call-by-need by the delay/force mechanism, whereas TIM is a
call-by-name abstract machine, which can be modified to call-by-need
by the marker mechanism.

Torben Mogensen (torbenm@diku.dk)