[
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: | David Allsopp <dra-news@m...> |
| Subject: | RE: [Caml-list] Code-execution (evaluation) time |
Oliver Bandel wrote:
> Hello,
>
> I want to refresh my OCaml knowledge after I (again) paused for a while.
>
> I want to know, when certain parts of the code are executed,
> for example if I have more than one let _ = ...
> statement in my code (for example in different comp0ilaion units each one
> of them).
Expressions (as in, things listed in http://caml.inria.fr/pub/docs/manual-ocaml/expr.html) are evaluated in the order in which they appear in a source file. If you have two files A.ml and B.ml which contain top-level statements, the order in which they execute will depend on the order in which you link the resulting .cmo or .cmx files (which should be left-to-right as passed to ocamlc/ocamlopt - don't know where that's specified).
As far as I can see, in pretty much all contexts within an expression where order of evaluation could matter including, but probably not limited to:
* Record initialisation (e.g. let i = ref 0 in {a = (incr i; !i); b = (incr i; !i)})
* Function application (similarly)
* let foo = _ and bar = _ in _
are intentionally left as unspecified (in practice, application and record initialisation are right-to-left and let x = _ and y = _ is left-to-right but the point is that you are never supposed to rely on that).
> I also found an old code snippet with the following parts:
>
> ==============================
> let fnames = List.tl(Array.to_list Sys.argv)
>
> (* some more code *)
>
> let _ =
> List.iter print_days_old fnames
> ==============================
>
> So, the value fnames contains the args from the command line and can be
> used in the first statement of the code.
[let fnames = ..] is a complete expression so it's evaluated before the [let _] further down.
David