[graalvm-users] Integration Ruby x R

Rodrigo Botafogo rodrigo.a.botafogo at gmail.com
Fri May 11 13:26:41 PDT 2018


Hi Chris,

Thanks:

1) You're right
2) Works perfectly
3) Will check with the FastR team



On Fri, May 11, 2018 at 5:17 PM, Chris Seaton <chris.seaton at oracle.com>
wrote:

> I guess your R.eval definition looks something like this?
>
>   module R
>     def self.eval(string)
>       Polyglot.eval("R", string)
>     end
>   end
>
> 1) I don’t know anything about R personally, but running the standard
> version of R and experimenting, it looks like it does return the value.
>
>   > x = print(4)
>   [1] 4
>   > x
>   [1] 4
>
> 2) Does R have a way to ask values what type they are? If so you can call
> that from interop.
>
>   module
>     def self.typeof(object)
>       eval("typeof").call(object)
>     end
>   end
>
>   ...
>
>   p R.typeof(val)
>
> 3) That’s something you could debate, but it looks like this is a specific
> design decision on the part of FastR, so it isn’t a mistake but you could
> open an issue with them if you think it’s wrong.
>
> https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_oracle_fastr_blob_acc680f0d1168aa42d19174130f67c&d=DwIFaQ&c=RoP1YumCXCgaWHvlZYR8PZh8Bv7qIrMUB65eapI_JnE&r=CUkXBxBNT_D5N6HMJ5T9Z6rmvNKYsqupcbk72K0lcoQ&m=snO7qWUwit0R73_5da034y4fMewRaZ3rQfRHIunK-eQ&s=XFkiuVUX6pWxImLV-CATOaK8NPSG2jQzMYsZp5d7tek&e=
> 40ccc811b6/com.oracle.truffle.r.runtime/src/com/oracle/
> truffle/r/runtime/interop/R2Foreign.java#L70-L73
>
> On 11 May 2018, at 21:05, Oleg Šelajev <oleg.selajev at oracle.com> wrote:
>
> ---------- Forwarded message ----------
> From: Rodrigo Botafogo <rodrigo.a.botafogo at gmail.com>
> Date: 11 May 2018 22:11
> Subject: [graalvm-users] Integration Ruby x R
> To: graalvm-users at oss.oracle.com
> Cc:
>
> Hello Graalers...
>
> I'm trying to test and implement an integration between Ruby and R.  For
> that I have implemented this simple code where R.eval is a call to the R
> eval function.
>
>     p R.eval("var = 4")
>     p R.eval("print(var)")
>     val = R.eval("var = 4")
>     p val
>     val = R.eval("var = c(1, 2, 3, 4)")
>     p val
>     p val[1]
>     val = R.eval("list(1, 2, c('a', 'b', 'c'))")
>     p val
>     p val[2][1]
>
> I get the following results for this code:
>
> 4.0           # result of R.eval("var = 4")
> [1] 4         # the print(var) in R
> 4.0           # result of R.eval("print(var)")
> 4.0           # p val
> #<Truffle::Interop::Foreign at 46994f26>  # pointer to the c(1, 2, 3, 4) op
> 2.0           # p val[1]
> #<Truffle::Interop::Foreign at 2b8cf049>  # pointer to the list
> "b"           # p val[2][1]
>
> My questions:
>
> 1) In R, if I'm not mistaken print(var) has no return value.  Should we
> get 4.0 as return in this case?
> 2) The first pointer a foreign object points to a vector while the second
> pointer points to a list.  In this simple case, we know beforehand the type
> of the object, but in general this might not be true.  Is there any way to
> know the type of the object and to what messages it responds?  This seems
> critical to me to be able to really integrate both languages;
> 3) The result of R.eval("var = 4") in R is a vector, but we get back a
> float in Ruby.  For consistency, shouldn't this be a Ruby vector with 1
> element?
>
> Thanks
>
>
>
> --
> Rodrigo Botafogo
>
>
>
>


-- 
Rodrigo Botafogo
Integrando TI ao seu negócio
21-3010-4802/11-3010-1802
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://oss.oracle.com/pipermail/graalvm-users/attachments/20180511/d9e6ce50/attachment-0001.html 


More information about the GraalVM-Users mailing list