Hi,

So, TINKERPOP-1278, GraphTraversal references a Translator which can translate 
Gremlin-Java into any language you want.

        
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java#L123
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java#L123>
                
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/Symbols.java>

Now you might ask, "what translators exist?"

        Gremlin-Java -> Java:
                 
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/StepTranslator.java>
        Gremlin-Java -> Gremlin-Groovy:
                 
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/java/translator/GroovyTranslator.java>
        Gremlin-Java -> CPython:
                 
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/java/translator/PythonTranslator.java>
        CPython -> Gremlin-Jython:
                
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/jython/gremlin_python/jython_translator.py
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/jython/gremlin_python/jython_translator.py>
        CPython -> Gremlin-Groovy:
                
https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/jython/gremlin_python/groovy_translator.py
 
<https://github.com/apache/tinkerpop/blob/cc7ce890011df35f042942d119f1094ec99daa2e/gremlin-python/src/main/jython/gremlin_python/groovy_translator.py>

Anywho — what was scaring me was how fast it would be for Gremlin-Java -> Java 
compilation now that we use this Translator concept as a “method interceptor” 
and we have this massive switch-statement to process the call. Gremlin-Java -> 
Java is the final translation in any translation chain that will ultimately 
reach the JVM through TinkerPop. Fortunately, the indirection in Translator 
isn’t expensive. Here is the cost for compilation of a relatively complex 
traversal:

master
gremlin> 
clock(100){g.V().repeat(out()).times(2).as("a").union(both(),out()).dedup().as("b").select("a","b").identity()
 }
==>0.007815569999999999

TINKERPOP-1278
gremlin> 
clock(100){g.V().repeat(out()).times(2).as("a").union(both(),out()).dedup().as("b").select("a","b").identity()
 }
==>0.00932568

Phew… There is still a lot of work to do in this branch, but things are 
truckin’ along…

Take care,
Marko.

http://markorodriguez.com



Reply via email to