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