Andy Tolbert created TINKERPOP-1523:
---------------------------------------

             Summary: A means of clarifying an explicit type in DSL with 
language variants
                 Key: TINKERPOP-1523
                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1523
             Project: TinkerPop
          Issue Type: Wish
          Components: language-variant
            Reporter: Andy Tolbert
            Priority: Minor


Depending on the host programming language, it is not possible/clear when 
implementing a gremlin language variant how a user could communicate a given 
type that is not supported in their language.

For example, in python and javascript, there isn't a way to differentiate 
between a float and a double, yet {{Double}} and {{Float}} are valid types in 
gremlin language variants.

In the case of deserializing, it is pretty clear what needs to be done, the 
code needs to coerce the types into a type that host language can handle, as 
specified in the [GLV 
docs|https://tinkerpop.apache.org/docs/3.2.1-SNAPSHOT/tutorials/gremlin-language-variants/]:

{quote}
Language drivers are responsible for submitting Gremlin traversals to a 
TinkerPop-enabled graph system and returning results to the developer that are 
within the developer’s language’s type system. For instance, resultant doubles 
should be coerced to floats in Python.
{quote}

What isn't clear to me is what to do in the serialization case.  As the type is 
optional, you could simply provide the numerical value and leave it to the 
backend implementation to handle it appropriately, but the type can cause the 
backend to handle things differently.   For example, if the backend generates a 
schema on the fly, it might decide that a value of 2 is an {{Int32}} when maybe 
what the user wanted was a {{Int16}} for example.     You could argue that you 
could predefine the schema to avoid this, but lets ignore that for a moment. 

I think it would be nice is if there was some way in the DSL for the user to 
communicate the underlying type that should be used in the traversal, i.e.:

{code:javascript}
g.E().has("weight", asFloat(0.2))
{code}

{{asFloat}} and other {{asXXX}} methods could be a way for a host environment 
without an adequate type system to communicate the underlying type.  Also, a 
{{as(typename)}} method could be useful for communicating arbitrary types that 
are maybe implementation specific.

Any implementation could provide this functionality themselves, but I'm 
wondering if it would be useful to make this part of the specification of 
things a GLV implementation could provide, that way there is a somewhat 
standard way of communicating types in absence of types in the host language.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to