And just to be clear, I'm not necessarily disagreeing. But I think
it's important to understand where and why it's necessary.

For example, if I'm writing a gremlin script (string), I don't type my
input numbers.  It's rightly converted by the underlying architecture.
(I'm guessing groovy which has enhanced number support).  Also, if a
GLV is submitting typed numbers, how would that work? For example, in
Javascript?

On Wed, Jul 13, 2016 at 9:16 AM, Robert Dale <robd...@gmail.com> wrote:
> Hi, Stephen.  I think that's a bad example. You may recall I brought
> up that issue in the forum.  However, it's actually attributed to the
> default ID manager of ANY (for historical) which I think is a really
> bad default (and reason) because it only leads to confusion.  Java is
> one of the few, if not only, brain-damaged languages where 5 != 5 !=
> 5.  In Java, number objects must be coerced into like form for
> comparison. The other ID managers do this coercion.  Saner languages
> do this under the covers.
>
> On Wed, Jul 13, 2016 at 8:56 AM, Stephen Mallette <spmalle...@gmail.com> 
> wrote:
>> Robert, thanks for joining this discussion.
>>
>>> I wonder if it even makes sense to type numbers according to their
>> memory model. As objects, Byte, Short, and Integer occupy the same
>> space. Long isn't much more.  So in Java we're not saving much space.
>> Jackson will attempt to parse in order: int, long, BigInt, BigDecimal.
>> The JSON JSR uses only BigDecimal. Some non-jvm languages don't even
>> have this concept.  Does anything in gremlin actually require this?
>>
>> If the intended numeric type isn't preserved, weird things can happen with
>> graphs that have a schema (like Titan/DSE). Even TinkerGraph using the
>> default ID manager will not be happy if you try to do a lookup of Long
>> identifiers with an Integer:
>>
>> gremlin> graph = TinkerFactory.createModern()
>> ==>tinkergraph[vertices:6 edges:6]
>> gremlin> graph.vertices(1)
>> ==>v[1]
>> gremlin> graph.vertices(1L)
>> gremlin>
>>
>>
>>
>>
>> On Wed, Jul 13, 2016 at 8:17 AM, Robert Dale <robd...@gmail.com> wrote:
>>
>>> Marko, I agree that empty object properties should not be represented.
>>> I think if you saw that in an example then it was probably for
>>> demonstration purposes.
>>>
>>> Kevin, can you expand on this comment:
>>>
>>> > the format you suggest would lead to the same inconsistencies as in
>>> GraphSON 1.0.
>>> > Since the type is at the same level than the data itself, whether the
>>> container is an Array or an Object
>>> > https://github.com/apache/tinkerpop/pull/351#issuecomment-231351653
>>>
>>> What exactly are the inconsistencies?  What is the problem in
>>> determining an array or object?
>>> This is a natural JSON array (or list): []
>>> This is a natural JSON object: {}
>>>
>>> Type at the object level is a common pattern and supported feature of
>>> Jackson.  Also, GeoJSON would be a natural fit as it also stores
>>> 'type' at the object level. Titan supports GeoJSON currently.  I
>>> wonder if it would make sense to promote geometry to gremlin.
>>>
>>> We should probably start documenting a table of supported types. (If
>>> there is one, please provide link)
>>>
>>> I wonder if it even makes sense to type numbers according to their
>>> memory model. As objects, Byte, Short, and Integer occupy the same
>>> space. Long isn't much more.  So in Java we're not saving much space.
>>> Jackson will attempt to parse in order: int, long, BigInt, BigDecimal.
>>> The JSON JSR uses only BigDecimal. Some non-jvm languages don't even
>>> have this concept.  Does anything in gremlin actually require this?
>>> I'm thinking that this is only going to be relevant at the domain
>>> model level. This way json native numbers can be used and not need
>>> typing.
>>>
>>> Additionally, I think that all things that will be typed should always
>>> be typed. For the use cases of injesting a saved graph from a file, it
>>> can probably be assumed that the top-level objects are vertices since
>>> the graph is vertex-centric and everything else follows naturally.
>>> I'm not entirely sure what is required for submitting traversals to
>>> gremlin server from GLV.  However, if this is used for the results
>>> from gremlin server then the results could start with any one of path,
>>> vertex, edge, property, vertex property, etc. So you'll need that type
>>> data there.
>>>
>>> --
>>> Robert Dale
>>>
>>> On Tue, Jul 12, 2016 at 8:35 AM, Marko Rodriguez <okramma...@gmail.com>
>>> wrote:
>>> > Hi,
>>> >
>>> > I’m not following this PR too closely so what I might be saying is a
>>> already known/argued against/etc.
>>> >
>>> >         1. I think we should go with Robert Dale’s proposal of int32,
>>> int64, Vertex, uuid, etc. instead of Java class names.
>>> >         2. In Java we then have a Map<String,Class> for typecasting
>>> accordingly.
>>> >         3. This would make GraphSON 2.0 perfect for Bytecode
>>> serialization in TINKERPOP-1278.
>>> >         4. I think that if a Vertex, Edge, etc. doesn’t have properties,
>>> outV, etc. then don’t even have those fields in the representation.
>>> >         5. Most of the serialization back and forth will be ReferenceXXX
>>> elements and thus, don’t create more Maps/lists for no reason. — less chars.
>>> >
>>> > For me, my interests with this work is all about a language agnostic way
>>> of sending Gremlin traversal bytecode between different languages. This
>>> work is exactly what I am looking for.
>>> >
>>> > Thanks,
>>> > Marko.
>>> >
>>> > http://markorodriguez.com
>>> >
>>> >
>>> >
>>> >> On Jul 9, 2016, at 9:48 AM, Stephen Mallette <spmalle...@gmail.com>
>>> wrote:
>>> >>
>>> >> With all the work on GLVs and the recent work on GraphSON 2.0, I think
>>> it's
>>> >> important that we have a solid, efficient, programming language neutral,
>>> >> lossless serialization format. Right now that format is GraphSON and it
>>> >> works for that purpose (ever more  so with 2.0). Given some discussion
>>> on
>>> >> the GraphSON 2.0 PR driven a bit by Robert Dale:
>>> >>
>>> >> https://github.com/apache/tinkerpop/pull/351#issuecomment-231157389
>>> >>
>>> >> I wonder if we shouldn't consider another IO format that has Gremlin
>>> >> Server/GLVs in mind. At this point I'm not suggesting anything specific
>>> -
>>> >> I'm just hanging the idea out for further discussion and brain storming.
>>> >> Thoughts?
>>> >
>>>
>>>
>>>
>>> --
>>> Robert Dale
>>>
>
>
>
> --
> Robert Dale



-- 
Robert Dale

Reply via email to