[
https://issues.apache.org/jira/browse/THRIFT-4535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16420621#comment-16420621
]
Christian Weiss commented on THRIFT-4535:
-----------------------------------------
Thanks again for the quick response!
I've had a closer look at the code in the meantime and I identified the
following main differences. I've not been comparing method implementations
though, so I don't know if "netcore" e.g. fixes some implementation details.
* "netcore" reorganizes files and namespaces - e.g.
** Thrift.Protocol -> Thrift.Protocols; a new Thrift.Protocols.Entities
** Thrift.Transport is split into Client & Server
** *Proposed solution:*
*** DO keep the old structure and namespaces. While the "new" structure might
be nice, there's no real benefit and it breaks everyone.
* "netcore" uses different code styling - e.g.
** Some methods have been renamed from camelCase to PascalCase
** Some interfaces have an "I" prefix.
** Parameters, variables have been renamed (to not contain abbreviations)
** *Proposed solution:*
*** DO rename methods from camelCase to PascalCase. This is a breaking change,
but having camelCase for methods is completely untypical for C#.
*** DO NOT append "I" prefix to interfaces. This would break too much (e.g.
TBase, ...)
*** DO rename variables and parameter names to not contain abbreviations. This
does not break anything and helps for readability.
* "netcore" has dropped a few transports and added others - e.g.
** Transports that depend on "System.Web" (as that's not available in .NET
Core) and the Silverlight transport
** New transport that depends on "Microsoft.AspNetCore"
** *Proposed solution:*
*** DO keep the old transports but only make them available on supported
platforms (via #if cases).
*** DO drop the Silverlight transport. Silverlight is dead. If someone really
complains about this, we can try to add it again.
*** DO NOT add the new ASP.NET Core based server to the main assembly. The
main Thrift library should not depend on a specific web framework. Instead, the
server should be delivered as a separate package - e.g.
Thrift.Server.AspNetCore.
* "netcore" makes heavy usage of async/await.
** While this makes sense in some places, I was surprised to see async/await
being used that much in "Protocol". As each "await" generates an internal state
machine, I would think that doing this for pretty much every character must be
much slower than the current code in "csharp". Am I wrong here and has this
been proven faster?
** *Proposed solution:*
*** DO carefully migrate async/await by doing some benchmarks and only apply
it where it is useful.
* "netcore" targets .NET Standard 2.0
** This does is too new and doesn't support older but popular versions of some
platforms.
** *Proposed solution:*
*** Convert "csharp" to new project format and target at least
"net45;netstandard1.6;netstandard2.0". This gives us platform support for .NET
4.5+, .NET Core 1.0+, Mono 4.6+, Xamarin and UWP.
Given that I now know more about the code base, let me address your comments.
{quote}In fact, that's a nobrainer decision. The csharp part was there long
before netcore (and it was the origin of it), so netcore should be the victim
and be merged over to csharp.
{quote}
I agree. There's no need for unnecessary breaking changes (e.g. namespace
changes etc).
{quote}And please, try to not scare people with whatever "modernize" means
exactly, and have an eye on compatibility. Nobody wants to rewrite the whole
application just because of an RPC library update.
{quote}
I thought that "netcore" would have more feature differences but as it does
not, the main challenge is the usage of async/await. We should discuss any
changes here as this definitely has an impact on users. However, we can also
keep the synchronous versions at some places to let the user choose which one
he wants to use.
{quote}There is no "predecessor" or "successor", they are both equally valid
and alive.
{quote}
Even after having looked at the code, I do not really understand that if you've
never intended to deprecate one. The two code bases are so similar that
maintaining two versions seems very painful/unnecessary. And given that there
is no release of "netcore" (at least I haven't seen one) I'd say it's not
really "alive" yet. :)
Anyway, What do you think about my proposed solutions?
> Current state and future of .NET libraries ("csharp" and "netcore")?
> --------------------------------------------------------------------
>
> Key: THRIFT-4535
> URL: https://issues.apache.org/jira/browse/THRIFT-4535
> Project: Thrift
> Issue Type: Question
> Components: C# - Library, netcore - Library
> Reporter: Christian Weiss
> Priority: Major
>
> Hi,
> We are trying to use Thrift in one of our projects but we ran into some very
> fundamental issues:
> * The "csharp" project does not target ".NET Standard" and there's only a
> very old release on nuget.org ( if [https://www.nuget.org/packages/Thrift/]
> is the official one).
> * The "netcore" project does target ".NET Standard" but there's no release
> yet ( https://issues.apache.org/jira/browse/THRIFT-4512 ) and it also has a
> dependency on ASP.NET Core (
> https://issues.apache.org/jira/browse/THRIFT-4534 ) which makes it unusable
> in non-web projects.
> I'm wondering why there even are 2 separate projects for .NET? It's important
> to understand that ".NET Core" is not a new programming API - It's just a new
> platform - very similar to Silverlight, Mono, Windows Phone. This means that
> it would also be possible to support .NET Core and the new ".NET Standard"
> (which represents a common set of APIs for all platforms) with the existing
> "csharp" project.
> Was this a deliberate decision - e.g. to make the "netcore" code the official
> successor of the "csharp" code?
> Would you be interested in merging the code back into one library? I'd be
> willing to help if you want!
> It would be great to get one proper, up to date and official .NET library
> soon as there's already quite a lot of weird forks on NuGet.org:
> https://www.nuget.org/packages?q=Thrift
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)