MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

Compile

  • To: mathgroup at smc.vnet.net
  • Subject: [mg44950] Compile
  • From: Maxim <dontsendhere@.>
  • Date: Wed, 10 Dec 2003 04:02:01 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Consider

In[1]:=
Compile[{},
  Module[{x=0},
    While[
      x++;
      EvenQ[x]
    ];
    x
  ]
][]

Out[1]=
3

incorrect. The more I think about this wonderful sentence from Compile
reference -- "The number of times and the order in which objects are
evaluated by Compile may be different from ordinary Mathematica code" --
the less I understand it. It can mean that if compiled evaluation fails
at some point, Mathematica stops and starts over with the ordinary code.
But equally well it can be interpreted to mean that Compile may ignore
all the rules of the standard evaluator, including operators precedence
order.

Of course, in a sense Compile is still in the development stage; for
instance, I don't like the fact that Do[0,{i,1},{j,i,1}] cannot be
compiled because of i in the second iterator, but in this case
Mathematica just gives a message, reverts to uncompiled evaluation and I
can see what is going on, while if an expression is compiled and
evaluated differently from uncompiled version, I'm at a loss what went
wrong.

Actually restarting the evaluation can be quite confusing too, since you
can't tell at which point Mathematica begins the re-evaluation using
uncompiled code, so if the code has side effects then the result is
unpredictable, as in the example below:

In[1]:=
Module[{L={}},
  Compile[{},
    AppendTo[L,{1}];
    AppendTo[L,{2}];
    Append[L,{3}];
    AppendTo[L,{3}];
    L
  ][]
]

Compile::cpts: The result after evaluating Insert[L$11, {3}, -1]
     should be a tensor. Non-tensor lists are not supported at present;
evaluation will
     proceed with the uncompiled function.

CompiledFunction::cfse: Compiled expression {{1}, {2}} should be a
machine-size real number.

CompiledFunction::cfex:
   External evaluation error at instruction 4; proceeding with
uncompiled evaluation.

Out[1]= {{1}, {2}, {1}, {2}, {3}}

Maxim Rytin
m.r at prontomail.com



  • Prev by Date: Evaluation of AiryAi on the complex plane
  • Next by Date: Re: How to stop a kerne calculationl without stopping the frontend
  • Previous by thread: RE: Re: Evaluation of AiryAi on the complex plane
  • Next by thread: RE: Compile