Hello,
I created gremlin-python/ package and killed gremlin-variant/ package. Thus,
the links I provided in the email earlier this morning are busted. You can move
around from here to re-find the references.
https://github.com/apache/tinkerpop/tree/TINKERPOP-1278/gremlin-python/src/main
<https://github.com/apache/tinkerpop/tree/TINKERPOP-1278/gremlin-python/src/main>
Thanks,
Marko.
http://markorodriguez.com
> On Jun 22, 2016, at 7:36 AM, Marko Rodriguez <[email protected]> wrote:
>
> Hello,
>
> I have been working on TINKERPOP-1278 for a couple of weeks now and here is
> where my thoughts are going.
>
> First, a review of the concepts.
>
> 1. Apache TinkerPop is a JVM-based graph computing framework.
> 2. Gremlin can be embedded/represented in any programming language that
> supports function composition and function nesting.
> - Every programming language supports these two constructs.
> 3. There are two ways in which XXX language can work with Apache
> TinkerPop.
> a.) XXXScriptEngine can directly use TinkerPop classes.
> b.) XXX “mocks” of TinkerPop’s Traversal and RemoteConnection
> in the respective language.
> 4. The language that is representing/hosting Gremlin is called the
> “source language.”
> 5. The language that the Gremlin traversal will ultimately be executed
> on in the JVM is called the “target language.”
> 6. It is the responsibility of a Translator to translate the source
> language into the target language.
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java>
>
> - getAlias() is function naming.
> - addStep(), addSpawnStep(), addSource() is function
> composition.
> - getAnonymousTraversalTranslator() is function nesting.
> - getSourceLanguage() and getTargetLanguage() is
> translator metadata.
> 7. It is possible/reasonable for both source and target languages to be
> on the JVM.
> - For example, Gremlin-Java translating to Gremlin-Groovy so it
> can avoid the complications of serialization and support remote lambda
> execution.
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java#L58-L66
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java#L58-L66>
>
> From this foundation, we should work towards the following:
>
> 1. bin/gremlin.sh —language gremlin-python
> - this will load up a GremlinConsole where a
> GremlinJythonScriptEngine is used to read and return results.
> - same gremlin> and ==> look-and-feel, but now its Python, not
> Groovy that is the scripting language.
> - In this way, Python people can work with TinkerPop and NEVER
> leave Python.
> 2. Moving forward, we then have gremlin-jruby and respective
> GremlinJRubyScriptEngine.
> - In this way, Ruby people can work with TinkerPop and NEVER
> leave Ruby.
> 3. Unlike Groovy, Python and Ruby have representations outside of the
> JVM and thus, need VM agnostic code (i.e. they can’t just “new
> GraphTraversal”).
> - PythonGraphTraversal (which is NOT just GraphTraversal used
> by Gremlin-Jython on the JVM).
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py>
> - It is simple to auto generate XXX language
> “mocks” using reflection.
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy>
> - Translators allow for the translation of XXX language
> traversals to YYY language traversals on the JVM for execution by TinkerPop.
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py>
> When GremlinJythonScriptEngine exists, we should have a
> JythonTranslator as it will natively support lambdas.
> - gremlin_driver, gremlin_rest_driver, etc. which are the
> Python specific replications of the same classes used in JVM TinkerPop.
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py>
>
> https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py
>
> <https://github.com/apache/tinkerpop/blob/TINKERPOP-1278/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py>
> 4. All Gremlin language variants distributed by Apache TinkerPop should
> have their own package.
> - gremlin-groovy
> - gremlin-jython (with gremlin-python representation in it)
> - gremlin-jruby (with gremlin-ruby representation in it)
> - gremlin-rhino (with gremlin-js representation in it)
> - gremlin-renjin (with gremlin-r representation in it)
> [http://www.renjin.org/ <http://www.renjin.org/> cool!]
> - etc.
>
> Thoughts?,
> Marko.
>
> http://markorodriguez.com <http://markorodriguez.com/>
>
>
>
>> On Jun 16, 2016, at 10:37 AM, Marko Rodriguez <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> Yea — submodules is a good idea.
>>
>> Also, I think we should create gremlin-jython, gremlin-ruby, etc.
>> ScriptEngines that have all the imports loaded and ready to go much like we
>> have with gremlin-groovy.
>>
>> Marko.
>>
>> http://markorodriguez.com <http://markorodriguez.com/>
>>
>>
>>
>>> On Jun 16, 2016, at 10:19 AM, Stephen Mallette <[email protected]> wrote:
>>>
>>> I would think that we want individual plugins for each variant.
>>>
>>> This does lead me back to an earlier discussion about gremlin-variant
>>> packaging. We didn't want to do
>>>
>>> gremlin-variant
>>> +-- gremlin-variant-python
>>> +-- gremlin-variant-js,
>>> +-- ....
>>> +-- gremlin-variant-XXXXX
>>>
>>> so with gremlin-variant users are going to just get everything when they
>>> depend on it. To my knowledge, we are only kinda viewing this from a python
>>> perspective atm and haven't really researched all the languages we support,
>>> but I sense that ultimately as we add more GLVs we're going to end up with
>>> a really messy pom.xml for gremlin-variant with the potential for conflict
>>> as we try to make maven deal with packaging issues for all those disparate
>>> languages. Again, hard to say how much trouble this will eventually be, but
>>> might be worth noodling on again in case anyone has any new thoughts on the
>>> matter.
>>>
>>>
>>>
>>> On Thu, Jun 16, 2016 at 12:10 PM, Daniel Kuppitz <[email protected]> wrote:
>>>
>>>> The last few days I've been working on a Gremlin Python code executor for
>>>> the TinkerPop docs. What I noticed was that we can't simply execute Gremlin
>>>> Python code in our Gremlin Groovy console, simply because the console has
>>>> no dependency to the gremlin-variants projects.
>>>>
>>>> That was unfortunate for the docs pre-processor, but what about the normal
>>>> user? Do we need to have those language variants always available or would
>>>> it be sufficient to have a Gremlin-Xyz plugin (where Xyz could be Python,
>>>> Ruby, etc.)?
>>>>
>>>> I've added the "missing" dependency for now to get the docs pre-processor
>>>> extension done, but I think we should remove that dependency again and
>>>> create a plugin instead, before the branch gets merged into master.
>>>>
>>>> Cheers,
>>>> Daniel
>>>>
>>
>