[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Xavier Leroy <Xavier.Leroy@i...> |
| Subject: | Re: [Caml-list] Function application implementation |
> It knows the type of the function expression, and that is all
> that is required. Incidentally Ocaml evaluates right to left. So
>
> f x y z
>
> will be roughly:
>
> push (eval z)
> push (eval y)
> push (eval x)
> push (eval f)
> apply
> apply
> apply
>
>
> But that doesn't explain how does each apply know what to do, either to
> build a new closure (in the case above, the first two applies) or to
> actually call the code (the third apply).
The generated abstract machine code is more like:
push (eval z)
push (eval y)
push (eval x)
push (eval f)
apply 3 (* number of arguments provided *)
"apply" doesn't do anything clever, it just enters the code of the
called function f. It's the code of f that determines what to do
with the arguments provided on the stack.
More details can be found in one of my talks:
http://gallium.inria.fr/~xleroy/talks/zam-kazam05.pdf
- Xavier Leroy