[ 
https://issues.apache.org/jira/browse/SOLR-14579?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17189086#comment-17189086
 ] 

Uwe Schindler edited comment on SOLR-14579 at 9/2/20, 8:52 AM:
---------------------------------------------------------------

If you are interested, here is the implementation of a Bootstrap for lambdas in 
Elasticsearch's Painless (written by me), especially see the comment: 
[LambdaBootstrap lines 
126-133|https://github.com/elastic/elasticsearch/blob/0a135a358e4736ee54d76bad0932cab1b5cc1a74/modules/lang-painless/src/main/java/org/elasticsearch/painless/LambdaBootstrap.java#L126-L133]

If no captures are there: it's a singleton and the bootstrap code returns a 
call site just returning the singleton: [LambdaBootstrap lines 
481-491|https://github.com/elastic/elasticsearch/blob/0a135a358e4736ee54d76bad0932cab1b5cc1a74/modules/lang-painless/src/main/java/org/elasticsearch/painless/LambdaBootstrap.java#L481-L491];
 you see it returns a {{ConstantCallSite}} always returning the same singleton 
using {{MethodHandles.constant()}} created there with {{newInstance}}. At a 
later stage, hotspot can even inline this, so code is fast as if the lambda 
won't exist at all!

You can check similar code in LambdaBootstraps code in the JDK, but those are 
doing a bit more magic, as Java is type-safe, while Elasticsearch Painless has 
more freedom of types (e.g. def type), so this is easier to read.


was (Author: thetaphi):
If you are interested, here is the implementation of a Bootstrap for lambdas in 
Elasticsearch's Painless (written by me), especially see the comment: 
[LambdaBootstrap lines 
126-133|https://github.com/elastic/elasticsearch/blob/0a135a358e4736ee54d76bad0932cab1b5cc1a74/modules/lang-painless/src/main/java/org/elasticsearch/painless/LambdaBootstrap.java#L126-L133]

If no captures are there: it's a singleton and the bootstrap code returns a 
method handle that: [LambdaBootstrap lines 
481-491|https://github.com/elastic/elasticsearch/blob/0a135a358e4736ee54d76bad0932cab1b5cc1a74/modules/lang-painless/src/main/java/org/elasticsearch/painless/LambdaBootstrap.java#L481-L491];
 you see it returns a {{ConstantCallSite}} always returning the same singleton 
created there with {{newInstance}}.

You can check similar code in LambdaBootstraps code in the JDK, but those are 
doing a bit more magic, as Java is type-safe, while Elasticsearch Painless has 
more freedom of types (e.g. def type), so this is easier to read.

> Comment SolrJ 'Utils' generic map functions
> -------------------------------------------
>
>                 Key: SOLR-14579
>                 URL: https://issues.apache.org/jira/browse/SOLR-14579
>             Project: Solr
>          Issue Type: Improvement
>    Affects Versions: master (9.0)
>            Reporter: Megan Carey
>            Assignee: Erick Erickson
>            Priority: Minor
>             Fix For: 8.7
>
>         Attachments: SOLR-14579.patch
>
>          Time Spent: 2h 50m
>  Remaining Estimate: 0h
>
> Remove the map functions like `NEW_HASHMAP_FUN` from the Utils class in solrj 
> module to reduce warnings and improve code quality.
> [https://github.com/apache/lucene-solr/blob/master/solr/solrj/src/java/org/apache/solr/common/util/Utils.java#L92]



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org
For additional commands, e-mail: issues-h...@lucene.apache.org

Reply via email to