Skip to content
This repository was archived by the owner on Sep 13, 2022. It is now read-only.

Add planning for .NET Standard vNext#785

Merged
terrajobst merged 1 commit intodotnet:masterfrom
terrajobst:planning-vnext
Jul 24, 2018
Merged

Add planning for .NET Standard vNext#785
terrajobst merged 1 commit intodotnet:masterfrom
terrajobst:planning-vnext

Conversation

@terrajobst
Copy link
Copy Markdown

@terrajobst terrajobst commented Jun 27, 2018

This is the proposal for .NET Standard vNext. This also fixes #303.

@dotnet/nsboard, any thoughts? Let's start by reviewing the overall document and then the list of individual PRs.

@terrajobst terrajobst self-assigned this Jun 28, 2018
@terrajobst terrajobst mentioned this pull request Jul 2, 2018
@terrajobst terrajobst force-pushed the planning-vnext branch 2 times, most recently from 1e28aee to ccc4eb2 Compare July 16, 2018 21:30
@terrajobst terrajobst changed the title WIP: Add planning for .NET Standard vNext Add planning for .NET Standard vNext Jul 16, 2018
@terrajobst terrajobst added this to the .NET Standard vNext milestone Jul 16, 2018
@terrajobst terrajobst requested a review from a team July 16, 2018 21:48
concept and not ready for standardization)
* We should exlude `RegexCompilationInfo` as it throws on .NET Core & Xamarin
and only works on .NET Framework. Since there is no version of .NET Framework
implementing the new version of the standard, so... yeah.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wording suggestion. I get the sentiment, but should probably rephrase for posterity.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed

- .NET Core and .NET Standard aren't the same thing. People will expect that
the next version is `3.0` as that's what we called .NET Core. However, the
API set is closer to `2.1` and argubly makes more sense within the context
of the standard.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would the plans be for incorporating .NET Core 3 API enhancements? Would that be .NET Standard vNext++?

Copy link
Copy Markdown
Author

@terrajobst terrajobst Jul 17, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would the plans be for incorporating .NET Core 3 API enhancements?

We want to avoid defining the standard with APIs that are in-flux as this violates our inclusion principles.

Would that be .NET Standard vNext++?

Correct

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be ill-advised to remove a lot of existing functionality and call it an incremental version? While I'm all for the removal of things like data annotations out of standard, calling it an incremental change while containing application breaking features seems wrong to me

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I see the confusion. I'll update the document.

Exclusion here means "excluded from the set of candidates". These were never part of .NET Standard.


* **Include core-APIs working with spans**. While `Span<T>` is available as a
.NET Standard compatible NuGet package (`System.Memory`) adding this package
cannot provide extend the members of .NET Standard types that deal with spans.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like an extra word here -> "provide extend". Should probably omit "provide".

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch. Fixed!

@terrajobst terrajobst force-pushed the planning-vnext branch 3 times, most recently from da0f15f to 9fc6559 Compare July 18, 2018 01:34
@bheesma
Copy link
Copy Markdown

bheesma commented Jul 18, 2018

It gets very confusing. .NET Core, framework, standard, vnext, vnext++...

Copy link
Copy Markdown

@jskeet jskeet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm assuming that it's worth nit-picking on the grounds that this document is for general consumption, even if relatively few people outside the organization will read it.


* **Include `Span<T>`**. In .NET Core 2.1 we've added `Span<T>` which is an
array like type that allows representing managed and unmanaged memory in a
uniform way and supports cheap slicing. It's at the heart of most performance-
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: move performance- to the next line, as otherwise it displays as "performance- related".

uniform way and supports cheap slicing. It's at the heart of most performance-
related improvements in .NET Core 2.1 and allows managing buffers in a more
efficient way as it helps in reducing allocations and copying. `Span<T>` is
considered a primitive type and requires runtime and compiler support in order
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is Type.IsPrimitive going to return true for Span<T>? If so, this is okay - otherwise I'd choose a different word to avoid confusion.

Standard is to add the companion APIs as those cannot be added using a NuGet
package.

* **General Goodness**. Since .NET Core was open sourced, the community and us
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about just "we have added" rather than "the community and us added"? If there's a need to distinguish between the community and some other party, let's be clear about who that other party is :)


## Decisions

* We should **include** Brotli as HttpClient depends on it
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HttpClient => HttpClient?

## Decisions

* We should **include** Brotli as HttpClient depends on it
* We should **exclude** `DataAnnotations` (OOB today)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may be having a temporary memory failure, but I can't remember what "OOB" means here - which suggests others won't either. (Out-of-band?)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it means "Out of the Box".

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It certainly is in some cases, but I don't understand what that would mean in this context.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Out of band?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarified


### Major features

* [Add reflection emit](https://github.com/dotnet/standard/pull/829)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have concerns about this from the Unity side, as mentioned in my comment on the specific PR.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's discuss the details in the actual PR. I'll clarify how I envision we review this.

@terrajobst terrajobst requested a review from a team July 19, 2018 00:57
## Decisions

* We should **include** Brotli as `HttpClient` depends on it
* We should **exclude** `DataAnnotations` (out-of-band today)
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Definitely better than OOB, but just to make sure I understand this: these are packages already provided on top of .NET Standard, and are serviced via independent releases, and we want to keep them that way, at least for now? That makes sense to me.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's correct.

@terrajobst terrajobst force-pushed the planning-vnext branch 2 times, most recently from 3833e77 to 363c043 Compare July 19, 2018 18:43
* **Include** Brotli as `HttpClient` depends on it
* **Not include** `DataAnnotations` (out-of-band today)
* **Not include** `DiagnosticSource` (out-of-band today)
* **Not include** `System.Reflection.Metadata` (out-of-band today)
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd expect to see System.Collections.Immutable in this list as well.

Copy link
Copy Markdown
Author

@terrajobst terrajobst Jul 19, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, good point. I should add Microsoft.CSharp and Microsoft.VisualBasic then as well.

@terrajobst terrajobst force-pushed the planning-vnext branch 2 times, most recently from 051284c to 727c548 Compare July 24, 2018 00:38
@terrajobst
Copy link
Copy Markdown
Author

terrajobst commented Jul 24, 2018

As discussed in today's @dotnet/nsboard meeting, we all agreed with this being plan, modulo the version number and the actual APIs, which are separate PRs, so I'm going to merge this.

@terrajobst terrajobst merged commit 1874541 into dotnet:master Jul 24, 2018
@terrajobst terrajobst deleted the planning-vnext branch July 24, 2018 20:16
@qbit86
Copy link
Copy Markdown

qbit86 commented Aug 22, 2018

Please add missing members for ArraySegment<T>. Now it lacks indexer and enumerator in .NET Standard 2.0 (they are hidden behind explicit interface implementation), while they are available in .NET Core 2.1:

var segment = new ArraySegment<double>(new[] { 1.618 });
double item = segment[0];
ArraySegment<double>.Enumerator enumerator = segment.GetEnumerator();

Cannot apply indexing with [] to an expression of type 'ArraySegment<double>'
The type name 'Enumerator' does not exist in the type 'ArraySegment<double>'

@svick
Copy link
Copy Markdown
Member

svick commented Aug 22, 2018

@qbit86 That's already proposed in #823.

* **Not include** `System.Threading.Tasks.Dataflow` (out-of-band today)
* **Not include** `IApplicationResourceStreamResolver` (was plumbing for
Silverlight convergence. It's obsoleted.)
* **Not include** `System.Xml.Serialization.SchemaImporter` (doesn't seem
Copy link
Copy Markdown

@zvrba zvrba Nov 6, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the plan for xsd.exe? I've tried to generate XML schemas from netcore assemblies, and it failed. Same assembly compiled for NET472 -- works.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a roadmap document