GitHub user FlorianHockmann opened a pull request:

    https://github.com/apache/tinkerpop/pull/600

    TINKERPOP-1552 Add Gremlin-CSharp and Gremlin-DotNet

    https://issues.apache.org/jira/browse/TINKERPOP-1552
    
    Organization of the C# project:
    - `Gremlin.CSharp` is the C# GLV, it is nearly completely auto generated 
(except for the `Graph` class)
    - `Gremlin.Net`: Contains the driver that is basically an extension of the 
[existing Gremlin.Net driver](https://github.com/FlorianHockmann/Gremlin.Net) 
and the structure API, including GraphSON writers and readers.
    - `Gremlin.Net.Process`: Driver independent implementation + interfaces of 
common functionality for .NET GLVs. Allows Gremlin-CSharp to be used together 
with another driver.
    
    So this organization makes it possible to use Gremlin-CSharp together with 
another driver and it also allows to reuse a big part of the functionality for 
another .NET GLV.
    
    One design decision I took: The method names comply with .NET conventions 
and therefore use pascal case, so `g.V().has('name','marko').next()` becomes 
`g.V().Has('name','marko').Next()`. This should make it feel very natural for 
any C# programmer to work with Gremlin-CSharp. An added benefit is that it 
avoids reversed keywords in C# like `in` or `as` that would require a special 
treatment otherwise.
    
    In general, Gremlin-CSharp is very close to Gremlin-Python. This also means 
that it is not type-safe, all steps simply expect a `params object[]`. It was 
very easy to generate Gremlin-CSharp this way but this should be improved in 
the future.
    
    In order to support building everything from Maven, I decided to use a 
Maven plugin that allows building of .NET Core projects: 
https://github.com/kaspersorensen/dotnet-maven-plugin
    This made it relatively simple to integrate the .NET projects into the 
regular build process.
    
    The documentation is hugely borrowed from that of Gremlin-Python. However, 
I couldn't really test the generation of the documentation as I already got 
errors with an unmodified version using the docker image. So it would be nice 
if someone could check whether the documentation is generated correctly with my 
changes.
    
    When you want to try out Gremlin-CSharp: You can build it on most modern 
operating systems, you only need a recent version of the [.NET Core 
SDK](https://www.microsoft.com/net/core). Alternatively, you can also use 
docker. I added the necessary steps to install .NET Core to the `Dockerfile`.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/FlorianHockmann/tinkerpop TINKERPOP-1552

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/tinkerpop/pull/600.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #600
    
----
commit 63410fed9ce642542bc4e0c10966989bacac2a30
Author: Florian Hockmann <[email protected]>
Date:   2017-04-06T17:02:23Z

    Add Gremlin-CSharp and Gremlin-DotNet
    
    This adds Gremlin-CSharp (a C# GLV), together with a .NET driver. The
    driver is based on Gremlin.Net
    (https://github.com/FlorianHockmann/Gremlin.Net) with added support for
    GLVs and Gremlin-CSharp is auto generated, very similar to
    Gremlin-Python.
    This should fix TINKERPOP-1552.

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to