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.
---