Feature request: Javacript Arrays.from() should accept Java Iterable or JS map on java collections should map to Iterable.stream().map()

Andreas Woess andreas.woess at oracle.com
Wed Aug 9 13:15:18 UTC 2017


Hi Jerven,

I'm not very fond of decorating Java objects with JS methods (#2), 
mostly for 2 reasons:
(a) It'd be no longer obvious if you're calling a Java method or a JS 
method, and there's the (small) possibility that your code will break in 
the future if someone adds a Java method with the same name.
(b) In a polyglot environment, you probably don't want your Java objects 
to have different methods depending on the language they're used in.

Array.from(javaList) (#3) looks reasonable to me, and I think we can add 
support for that. I can't promise anything just yet; we'll have to 
discuss this in the team, and see if we can implement this in a 
consistent fashion so that e.g. you can use Java Lists in other places 
where a JS Iterable is expected, too. Alternatively, we can provide a 
Java.from built-in that does the conversion.

Regards,
Andreas

On 08/08/2017 16:35, Jerven Tjalling Bolleman wrote:
> Hi All,
>
> This is the biggest annoyance up to now. Given a java collection 
> object one can't use JS map methods without doing some work around. 
> For now I have an utility method but I think ergonomically it would be 
> nice to be able to do this without further work for the users of 
> graal.js.
>
> Examples of what I would like -> given that "list" is a 
> java.util.List, "joining" is bound to the Function 
> Collectors.joining() and we are in Javascript using template literals.
>
> The following works already.
>
> `<ul>
>     ${list.stream().map(item => `${item.toString()}.collect(joining)
> </ul>`
>
> But it would be really nice if we could have the following "just" work.
>
> `<ul>
>     ${list.map(item => `${item.toString()}.join('')
> </ul>`
>
> i.e. the java collection interface is decorated with a JS map method.
> if that won't be possible then matching the JS @@iterable protocol to 
> the Java iterable interface would be nice because then we could at 
> least do.
>
>
> `<ul>
>     ${Array.from(list).map(item => `${item.toString()}.join('')
> </ul>`
>
> Regards,
> Jerven
>
>
> On 08/08/2017 04:28 PM, Daniele Bonetta wrote:
>> Hi Jerven,
>>
>> there is no Graal.js-only list at the moment, so feel free to report 
>> any issue on this list :)
>>
>> Regards,
>>
>> Daniele
>>
>>
>>
>> On 08.08.2017 15:21, Jerven Tjalling Bolleman wrote:
>>> Hi Daniele, All,
>>>
>>> Thanks, for the fast reply. Does anyone mind if I keep sending 
>>> e-mails in this form to the graal-dev list or would you prefer I 
>>> send these Graal.js java interop ones too a different list?
>>>
>>> I already have a few more ;)
>>>
>>> Regards,
>>> Jerven
>>>
>>> On 08/08/2017 02:53 PM, Daniele Bonetta wrote:
>>>> Hi Jerven,
>>>>
>>>> your code is correct, but does not work due to a bug in the 
>>>> Graal.js interop support.
>>>>
>>>> We already have a fix for that bug, and the fix will be part of the 
>>>> next monthly Graal VM release (v0.27).
>>>>
>>>>
>>>> Thanks for your bug report!
>>>>
>>>> Regards,
>>>>
>>>> Daniele
>>>>
>>>>
>>>>
>>>> On 08.08.2017 11:54, Jerven Tjalling Bolleman wrote:
>>>>> Hi All,
>>>>>
>>>>> Next question, How can I import a java.lang.Long into the js space 
>>>>> inside the context. I am now working around it by passing it in as 
>>>>> a parameter e.g.
>>>>>
>>>>> Value function = context.eval("js", "function(x,out){out.print(x)}");
>>>>> function.execute(out, 1000_000_000_000L);
>>>>>
>>>>> Works
>>>>>
>>>>> However,
>>>>>
>>>>> context.exportSymbol("x",1000_000_000_000L);
>>>>> context.exportSymbol("out", response.getOutoutStream());
>>>>> Value function = context.eval("js", 
>>>>> "x=Interop.import('x');out=Interop.import('out);out.print(x)");
>>>>>
>>>>> Does not with the following exception.
>>>>>
>>>>> java.lang.Long cannot be cast to 
>>>>> com.oracle.truffle.api.interop.TruffleObject
>>>>>
>>>>> Regards,
>>>>> Jerven
>>>>>
>>>>>
>>>>>
>>>>> On 08/07/2017 02:39 PM, Doug Simon wrote:
>>>>>> We are currently working on extensive documentation for GraalVM 
>>>>>> but it's not yet ready for release.
>>>>>>
>>>>>> You can find a draft of the embedding page at 
>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__www.dropbox.com_s_ia4yoe2jh6viyzq_Embed-2520Languages-2520with-2520the-2520Graal-2520Polyglot-2520SDK.pdf-3Fdl-3D0&d=DwICaQ&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=W5Zo00VHyUAb3eyeSOfpd8vQ04i6XWgfLSLJcJECgxE&m=6PDu846uJ078h-SZRYjYKPBaGR1da2ltWJgHrzftIso&s=Cv0eEOI0tBRk2cYh61HPe4A00Xn4uUVm32MQgXGQSro&e= 
>>>>>>
>>>>>>
>>>>>> Keep in mind that it's only a draft and may contain errors.
>>>>>>
>>>>>> -Doug
>>>>>>
>>>>>>> On 7 Aug 2017, at 12:49, Jerven Tjalling Bolleman 
>>>>>>> <jerven.bolleman at sib.swiss> wrote:
>>>>>>>
>>>>>>> Dear Graal devs,
>>>>>>>
>>>>>>> Really love the work you are doing. I am just looking for some 
>>>>>>> documentation.
>>>>>>>
>>>>>>> In the Graal OTN 0.26 release graalvm-0.26/examples/embed/README.md
>>>>>>> file a location is mentioned where one should find graal 
>>>>>>> embedding documentation.
>>>>>>>
>>>>>>> https://urldefense.proofpoint.com/v2/url?u=http-3A__www.graalvm.org_docs_embed_&d=DwICaQ&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=W5Zo00VHyUAb3eyeSOfpd8vQ04i6XWgfLSLJcJECgxE&m=6PDu846uJ078h-SZRYjYKPBaGR1da2ltWJgHrzftIso&s=X_S7O7VP-odaX11BVYCcKzjL8pLneZMoXl98Xzp-VmQ&e= 
>>>>>>>
>>>>>>> However, this does not resolve at this time.
>>>>>>>
>>>>>>> Otherwise, the example in that directory was exactly what I was 
>>>>>>> looking for!
>>>>>>>
>>>>>>> I did want to know if it is already possible to run graal.js on 
>>>>>>> a JDK9-EA? Without graal if need be? for example by copying the 
>>>>>>> trufflejs.jar and truffle.jar to a JDK9 classpath?
>>>>>>>
>>>>>>> Regards,
>>>>>>> Jerven
>>>>>>> -- 
>>>>>>> -------------------------------------------------------------------
>>>>>>> Jerven Bolleman Jerven.Bolleman at sib.swiss
>>>>>>> SIB Swiss Institute of Bioinformatics  Tel: +41 (0)22 379 58 85
>>>>>>> CMU, rue Michel Servet 1               Fax: +41 (0)22 379 58 58
>>>>>>> 1211 Geneve 4,
>>>>>>> Switzerland     www.sib.swiss - www.uniprot.org
>>>>>>> Follow us at 
>>>>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__twitter.com_-23-21_uniprot&d=DwICaQ&c=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10&r=W5Zo00VHyUAb3eyeSOfpd8vQ04i6XWgfLSLJcJECgxE&m=6PDu846uJ078h-SZRYjYKPBaGR1da2ltWJgHrzftIso&s=0kjMaBI9UJj3x8hoD0ePJJLhOMChklmfrE9b9kH0AKk&e= 
>>>>>>> -------------------------------------------------------------------
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the graal-dev mailing list