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

Jerven Tjalling Bolleman jerven.bolleman at sib.swiss
Wed Aug 9 13:47:17 UTC 2017


Hi Andreas,

Thanks for considering and I think you are right about Java objects 
should act like Java objects. I will depend a lot on the Java objects 
not being falsy in tests and that non defined methods give a type error.

A build in Java.from would be fine as well. In the end its not a lot
of code to translate a java collection to an JS Array so that one can 
use the JS map.

Regards,
Jerven

On 08/09/2017 03:15 PM, Andreas Woess wrote:
> 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= 
>>>>>>>> -------------------------------------------------------------------
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
> 

-- 
-------------------------------------------------------------------
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://twitter.com/#!/uniprot
-------------------------------------------------------------------


More information about the graal-dev mailing list