From t@r@@@z@kh@rko @end|ng |rom uzh@ch  Mon Mar  8 08:39:47 2021
From: t@r@@@z@kh@rko @end|ng |rom uzh@ch (Taras Zakharko)
Date: Mon, 8 Mar 2021 08:39:47 +0100
Subject: [Rd] An argument promise containing bytecode?
In-Reply-To: <E410AC79-00DF-456B-91F4-9AC0FFB135A6@R-project.org>
References: <7DD4C301-1849-4BAF-9C46-3256F09F79C9@uzh.ch>
 <E410AC79-00DF-456B-91F4-9AC0FFB135A6@R-project.org>
Message-ID: <FEE47ABD-D827-4E98-81E6-1CE762D55318@uzh.ch>

Thank you Simon! Such a trivial explanation? admittedly, I am a bit disappointed, I hoped there was more to the mystery :) 

Best, 

Taras

> On 8 Mar 2021, at 03:51, Simon Urbanek <simon.urbanek at R-project.org> wrote:
> 
> Taras,
> 
> I don't think this has anything to do with promises, rather it is called Just-In-Time (JIT) compilation - see ?enablleJIT in R, it is enabled by default, so the function will be compiled on second use.
> 
> Cheers,
> Simon
> 
> 
> 
>> On Mar 7, 2021, at 11:12 PM, Taras Zakharko <taras.zakharko at uzh.ch> wrote:
>> 
>> Dear all, 
>> 
>> I was playing around with some C code that inspects argument promises and I noticed that forwarded arguments sometimes contain bytecode in the PRCODE component. E.g. if I have a nested call like this:
>> 
>> f <- function(x) x
>> g <- function(x) f(x)
>> 
>> g(1+1)
>> 
>> and inspect the value of ?x? in g?s frame from within f?s frame (basically calling findVar(parent.frame(), x)), I would see a LANGSXP the first time g()  is invoked, but BCODESXP on every subsequent time.  Using PREXPR gets me the original LANGSXP in any case. 
>> 
>> Now, this is curious behavior and I had a quick glance into R source code related to closure evaluation and argument matching, but I could not see anything that would generate bytecode for promises. Could someone with in-depth knowledge of R?s machinery explain what is going on? 
>> 
>> Thanks, 
>> 
>> Taras
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
> 



[Rd] An argument promise containing bytecode?
Taras Zakharko