caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* Code-execution (evaluation) time
@ 2010-10-19 18:39 Oliver Bandel
  2010-10-19 19:52 ` [Caml-list] " David Allsopp
  0 siblings, 1 reply; 4+ messages in thread
From: Oliver Bandel @ 2010-10-19 18:39 UTC (permalink / raw)
  To: caml-list

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).

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.

Is there some documentation on the details of which things
are executed/evaluated at which point of the execution phase
of the program?

I don't want to rely on weak knowledge (because some things I've  
forgotten... jzst have done C, Python and even Assembler (!) during  
the last years...
just some snippets of OCaml in that time.)

Ciao,
    Oliver


P.S.: After coming back to OCaml (what I do mostly in privat projects,
       at work it's very unlikely to have the possibility) I'm again
       even more convinced that it is the best language for most problems. :)
       And it's so much fun using it. :)


^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [Caml-list] Code-execution (evaluation) time
  2010-10-19 18:39 Code-execution (evaluation) time Oliver Bandel
@ 2010-10-19 19:52 ` David Allsopp
  2010-10-21 19:43   ` oliver
  2010-10-21 22:34   ` oliver
  0 siblings, 2 replies; 4+ messages in thread
From: David Allsopp @ 2010-10-19 19:52 UTC (permalink / raw)
  To: 'Oliver Bandel', 'caml-list@yquem.inria.fr'

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] Code-execution (evaluation) time
  2010-10-19 19:52 ` [Caml-list] " David Allsopp
@ 2010-10-21 19:43   ` oliver
  2010-10-21 22:34   ` oliver
  1 sibling, 0 replies; 4+ messages in thread
From: oliver @ 2010-10-21 19:43 UTC (permalink / raw)
  To: caml-list

Hello David, hello Mark,

thanks for your answers.


In detail:
  thanks to Mark for the refresher
and
 thanks to David for the enhancer. :)


Ciao,
   Oliver




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Caml-list] Code-execution (evaluation) time
  2010-10-19 19:52 ` [Caml-list] " David Allsopp
  2010-10-21 19:43   ` oliver
@ 2010-10-21 22:34   ` oliver
  1 sibling, 0 replies; 4+ messages in thread
From: oliver @ 2010-10-21 22:34 UTC (permalink / raw)
  To: 'caml-list@yquem.inria.fr'

Hello David, hello Mark,

thanks for your answers.


In detail:
  thanks to Mark for the refresher
and
 thanks to David for the enhancer. :)


Ciao,
   Oliver


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2010-10-21 22:34 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-19 18:39 Code-execution (evaluation) time Oliver Bandel
2010-10-19 19:52 ` [Caml-list] " David Allsopp
2010-10-21 19:43   ` oliver
2010-10-21 22:34   ` oliver

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).