├── 2015 ├── 01-07-immutable │ ├── README.md │ ├── immutable-builder.md │ └── immutable-extract.md ├── 01-14-misc │ ├── README.md │ ├── issue-110.md │ └── issue-316.md ├── 04-28-misc │ └── README.md ├── 06-09-os-version │ ├── README.md │ └── issue-1017.md ├── 06-16-web-encoders │ ├── README.md │ ├── issue-2056-samples.md │ └── issue-2056.md ├── 06-30-configuration │ ├── README.md │ ├── issue-2199-samples.md │ └── issue-2199.md ├── 07-08-ildasm-and-drawing │ ├── Drawing.md │ ├── ILDasm.md │ └── README.md ├── 07-14-securestring │ ├── README.md │ └── shirt.jpg ├── 07-28-long-paths │ └── README.md ├── 08-11-process-and-securestring │ ├── README.md │ └── System.Diagnostics.Process_v4.1.0.0.md ├── 08-21-TryGetRawMetadata │ └── README.md ├── 08-26-long-path │ ├── NET API FullPath Proposal.md │ └── README.md ├── 09-08-backlog-review │ └── README.md ├── 09-22-misc │ └── README.md ├── 09-29-serialization │ └── README.md ├── 10-09-portable-pdb │ ├── APIs.md │ └── README.md ├── 10-27-csharp-interactive │ ├── APIs.md │ └── README.md ├── 10-27-quick-reviews │ └── README.md ├── 10-30_misc │ └── README.md ├── 11-20-managed-buffer-pool │ └── README.md ├── 11-24-networking │ ├── All ASPNET5 contracts.md │ ├── Desktop_vs_ASPNET5 contracts.md │ └── README.md └── 12-04-quick-reviews │ └── README.md ├── 2016 ├── 01-08-metadata │ └── README.md ├── 01-12-simd-and-console │ ├── Console.md │ ├── README.md │ └── VectorOfT.md ├── 01-15-shutdown │ └── README.md ├── 01-19-reflection │ └── README.md ├── 01-26-reflection │ ├── NetFx-vs-NetCore.md │ └── README.md ├── 01-29-reflection │ ├── NetFx_NetCore.md │ ├── README.md │ └── System.Reflection.md ├── 02-02-ADO_NET │ └── README.md ├── 02-05-IOperation │ ├── IOperation.md │ └── README.md ├── 02-09-ADO_NET │ └── README.md ├── 03-08-TypeDescriptors │ ├── README.md │ └── System.ComponentModel.TypeConverter.md └── 11-04-SpanOfT │ └── README.md ├── 2017 ├── 06-16-System.Text.Buffers │ ├── README.md │ └── System.Text.Buffers.md ├── 07-11-System.IO.Pipelines │ ├── README.md │ └── System.IO.Pipelines.md ├── 07-17-Span across CoreFx │ └── README.md ├── 08-15-Intel Intrinsics │ └── README.md ├── 08-22-Tensor │ ├── README.md │ └── System.Numerics.Tensors.md ├── 08-29-GitHub Issues.md ├── 08-29-quick-reviews │ └── README.md ├── 09-19-GitHub issues.md ├── 10-03-GitHub issues.md ├── 10-03-System.Binary │ ├── README.md │ └── System.Binary.md ├── 10-03-quick-reviews │ └── README.md ├── 10-10-GitHub issues.md ├── 10-10-quick-reviews │ └── README.md ├── 10-17-GitHub issues.md ├── 10-17-quick-reviews │ └── README.md ├── 10-24-GitHub issues.md ├── 10-24-quick-reviews │ └── README.md ├── 10-31-GitHub issues.md ├── 10-31-quick-reviews │ └── README.md ├── 11-07-GitHub issues.md ├── 11-07-quick-reviews │ └── README.md ├── 11-21-GitHub issues.md ├── 11-21-quick-reviews │ └── README.md ├── 11-28-GitHub issues.md ├── 11-28-quick-reviews │ └── README.md ├── 12-05-GitHub issues.md ├── 12-05-quick-reviews │ └── README.md ├── 12-12-GitHub issues.md ├── 12-19-GitHub issues.md └── 12-19-quick-reviews │ └── README.md ├── 2018 ├── 01-02-GitHub issues.md ├── 01-02-quick-reviews │ └── README.md ├── 01-12-quick-reviews │ └── README.md ├── 01-16-quick-reviews │ └── README.md ├── 01-19-quick-reviews │ └── README.md ├── 01-23-quick-reviews │ └── README.md ├── 02-13-quick-reviews │ └── README.md ├── 02-20-quick-reviews │ └── README.md ├── 02-27-quick-reviews │ └── README.md ├── 03-13-quick-reviews │ └── README.md ├── 03-20-quick-reviews │ └── README.md ├── 03-27-quick-reviews │ └── README.md ├── 04-10-quick-reviews │ └── README.md ├── 04-17-quick-reviews │ └── README.md ├── 04-24-quick-reviews │ └── README.md ├── 05-22-quick-reviews │ └── README.md ├── 05-29-quick-reviews │ └── README.md ├── 06-12-quick-reviews │ └── README.md ├── 06-26-quick-reviews │ └── README.md ├── 07-17-quick-reviews │ └── README.md ├── 07-24-quick-reviews │ └── README.md ├── 08-28-quick-reviews │ └── README.md ├── 09-25-quick-reviews │ └── README.md ├── 12-11-quick-reviews │ └── README.md ├── 12-18-quick-reviews │ └── README.md ├── Hardware-Intrinsics-Intel │ ├── HWIntrinsicAPIReview.pptx │ ├── Round1.md │ └── Round2.md ├── IAsyncEnumerable │ └── README.md ├── Microsoft.ML.Core │ ├── Microsoft.ML.Core.md │ ├── Microsoft.ML_Dependencies.png │ ├── Session1.md │ ├── Session2.md │ ├── Session3.md │ ├── Session4.md │ └── Session5.md ├── NetCore20-vs-NetCore21-Diff │ └── README.md ├── System.Buffers.SequenceReader │ ├── README.md │ └── System.Buffers.SequenceReader.md ├── System.Device.Gpio │ ├── README.md │ ├── System.Device.Gpio.Proposal.md │ └── System.Device.Gpio.md ├── System.Device.Gpio2 │ ├── README.md │ ├── System.Device.Gpio.Proposal2.md │ └── System.Device.Gpio2.md ├── System.Device.Gpio3 │ ├── README.md │ └── System.Device.Gpio3.md ├── System.IO.Enumerations │ ├── README.md │ └── System.IO.FileSystem.md ├── System.IO.Enumerations2 │ ├── README.md │ └── System.IO.Enumeration.md ├── System.IO.Pipelines │ ├── README.md │ ├── System.IO.Pipelines.md │ └── System.IO.Pipelines.pptx ├── System.IO.Pipelines_2 │ ├── README.md │ ├── System.IO.Pipelines2.md │ └── System.IO.Pipelines2.pptx ├── System.Text.Json.JsonDocument │ └── README.md ├── System.Text.Json.Utf8JsonWriter │ └── README.md ├── System.Text.Json │ ├── Additional.Notes.md │ ├── README.md │ └── System.Text.Json.JsonReader.md ├── System.Text.Utf8Char │ └── README.md ├── System.Text.Utf8JsonWriter │ ├── README.md │ └── System.Text.Json.Utf8JsonWriter.md ├── System.Utf8String │ ├── Session1.md │ └── Session2.md └── Xamarin.Essentials │ ├── README.md │ └── Xamarin.Essentials.md ├── 2019 ├── 01-08-quick-reviews │ └── README.md ├── 01-22-quick-reviews │ └── README.md ├── 01-29-quick-reviews │ └── README.md ├── 02-05-quick-reviews │ └── README.md ├── 02-07-quick-reviews │ └── README.md ├── 02-22-quick-reviews │ └── README.md ├── 02-26-quick-reviews │ └── README.md ├── 03-12-quick-reviews │ └── README.md ├── 03-19-quick-reviews │ └── README.md ├── 03-26-quick-reviews │ └── README.md ├── 03-28-quick-reviews │ └── README.md ├── 04-02-quick-reviews │ └── README.md ├── 04-09-quick-reviews │ └── README.md ├── 04-16-quick-reviews │ └── README.md ├── 04-23-quick-reviews │ └── README.md ├── 04-25-quick-reviews │ └── README.md ├── 04-30-quick-reviews │ └── README.md ├── 05-14-quick-reviews │ └── README.md ├── 05-21-quick-reviews │ └── README.md ├── 05-28-quick-reviews │ └── README.md ├── 05-30-quick-reviews │ └── README.md ├── 06-05-quick-reviews │ └── README.md ├── 06-11-quick-reviews │ └── README.md ├── 06-18-quick-reviews │ └── README.md ├── 06-25-quick-reviews │ └── README.md ├── 07-02-quick-reviews │ └── README.md ├── 07-09-quick-reviews │ └── README.md ├── 07-16-quick-reviews │ └── README.md ├── 08-20-quick-reviews │ └── README.md ├── 08-27-quick-reviews │ └── README.md ├── 09-10-quick-reviews │ └── README.md ├── 09-17-quick-reviews │ └── README.md ├── 09-24-quick-reviews │ └── README.md ├── 10-01-quick-reviews │ └── README.md ├── 10-08-dataframe │ ├── Microsoft.Data.DataFrame.md │ └── README.md ├── 10-10-quick-reviews │ └── README.md ├── 10-22-quick-reviews │ └── README.md ├── 10-29-arm │ ├── README.md │ └── System.Runtime.Intrinsics.Arm.md ├── 11-05-dataframe │ ├── Microsoft.Data.DataFrame-Demo.md │ └── README.md ├── 11-12-quick-reviews │ └── README.md ├── 11-26-quick-reviews │ └── README.md ├── 12-03-json-reference-handling │ └── README.md ├── 12-10-quick-reviews │ └── README.md ├── 12-12-memory-of-t-ownership │ └── README.md ├── 12-17-quick-reviews │ └── README.md ├── Serialization-Guard │ └── README.md ├── System.Buffers.IBufferWriter │ └── README.md ├── System.IO.Pipelines │ ├── LowLevelPipelines.md │ └── README.md ├── System.Index │ └── README.md ├── System.Numerics.Tensors │ └── README.md ├── System.Private.CoreLib-Nullable-Custom-Attributes │ ├── README.md │ ├── System.Collections.Concurrent.md │ ├── System.Collections.md │ ├── System.Diagnostics.Contracts.md │ ├── System.Diagnostics.Debug.md │ ├── System.Memory.md │ ├── System.Runtime.Extensions.md │ ├── System.Runtime.InteropServices.WindowsRuntime.md │ ├── System.Runtime.InteropServices.md │ ├── System.Runtime.md │ ├── System.Threading.Thread.md │ └── System.Threading.md ├── System.Private.CoreLib-Nullable │ ├── README.md │ ├── System.Buffers.md │ ├── System.Collections.Concurrent.md │ ├── System.Collections.md │ ├── System.Diagnostics.Contracts.md │ ├── System.Diagnostics.Debug.md │ ├── System.Diagnostics.StackTrace.md │ ├── System.Diagnostics.Tools.md │ ├── System.Diagnostics.Tracing.md │ ├── System.Memory.md │ ├── System.Numerics.Vectors.md │ ├── System.Reflection.Emit.ILGeneration.md │ ├── System.Reflection.Emit.Lightweight.md │ ├── System.Reflection.Emit.md │ ├── System.Reflection.Primitives.md │ ├── System.Resources.ResourceManager.md │ ├── System.Runtime.Extensions.md │ ├── System.Runtime.InteropServices.WindowsRuntime.md │ ├── System.Runtime.InteropServices.md │ ├── System.Runtime.Intrinsics.md │ ├── System.Runtime.Loader.md │ ├── System.Runtime.md │ ├── System.Security.Principal.md │ ├── System.Text.Encoding.Extensions.md │ └── System.Threading.md ├── System.Text.Json-Misc │ └── README.md ├── System.Text.Json-Serialization │ └── README.md ├── System.Text.Utf8 │ └── README.md └── System.Windows.Forms │ ├── README.md │ └── TaskDialog.md ├── 2020 ├── 01-07-quick-reviews │ └── README.md ├── 01-14-quick-reviews │ └── README.md ├── 01-21-command-line │ └── README.md ├── 01-28-quick-reviews │ └── README.md ├── 02-04-quick-reviews │ └── README.md ├── 02-11-quick-reviews │ └── README.md ├── 02-18-arm-intrinsics │ └── README.md ├── 02-20-quick-reviews │ └── README.md ├── 02-25-quick-reviews │ └── README.md ├── 03-03-quick-reviews │ └── README.md ├── 03-05-quick-reviews │ └── README.md ├── 03-10-asnreader-writer │ └── README.md ├── 03-13-json-httpclient │ └── README.md ├── 03-17-quick-reviews │ └── README.md ├── 03-24-quick-reviews │ └── README.md ├── 04-01-quick-reviews │ └── README.md ├── 04-07-quick-reviews │ └── README.md ├── 04-14-system.diagnostics.activity │ ├── APIRef.md │ └── README.md ├── 04-16-quick-reviews │ └── README.md ├── 04-23-quick-reviews │ └── README.md ├── 05-05-quick-reviews │ └── README.md ├── 05-07-quick-reviews │ └── README.md ├── 05-26-quick-reviews │ └── README.md ├── 05-29-quick-reviews │ └── README.md ├── 05-xx-connection-abstractions │ └── README.md ├── 06-02-quick-reviews │ └── README.md ├── 06-04-quick-reviews │ └── README.md ├── 06-12-quick-reviews │ └── README.md ├── 06-18-quick-reviews │ └── README.md ├── 06-25-quick-reviews │ └── README.md ├── 06-26-quick-reviews │ └── README.md ├── 06-30-quick-reviews │ └── README.md ├── 06-cbor │ └── README.md ├── 07-02-quick-reviews │ └── README.md ├── 07-07-quick-reviews │ └── README.md ├── 07-09-quick-reviews │ └── README.md ├── 07-10-quick-reviews │ └── README.md ├── 07-14-quick-reviews │ └── README.md ├── 07-16-quick-reviews │ └── README.md ├── 07-17-quick-reviews │ └── README.md ├── 07-21-quick-reviews │ └── README.md ├── 07-23-quick-reviews │ └── README.md ├── 07-24-quick-reviews │ └── README.md ├── 07-28-quick-reviews │ └── README.md ├── 07-29-quick-reviews │ └── README.md ├── 07-30-quick-reviews │ └── README.md ├── 07-31-quick-reviews │ └── README.md ├── 08-04-quick-reviews │ └── README.md ├── 08-06-quick-reviews │ └── README.md ├── 08-07-quick-reviews │ └── README.md ├── 08-11-quick-reviews │ └── README.md ├── 08-18-quick-reviews │ └── README.md ├── 08-25-quick-reviews │ └── README.md ├── 09-01-quick-reviews │ └── README.md ├── 09-08-quick-reviews │ └── README.md ├── 09-15-quick-reviews │ └── README.md ├── 09-22-quick-reviews │ └── README.md ├── 09-29-quick-reviews │ └── README.md ├── 10-06-quick-reviews │ └── README.md ├── 10-13-quick-reviews │ └── README.md ├── 10-20-quick-reviews │ └── README.md ├── 10-27-quick-reviews │ └── README.md ├── 11-10-quick-reviews │ └── README.md ├── 11-17-quick-reviews │ └── README.md └── 11-24-quick-reviews │ └── README.md ├── 2021 ├── 01-05-quick-reviews │ └── README.md ├── 01-12-quick-reviews │ └── README.md ├── 01-15-quick-reviews │ └── README.md ├── 01-19-quick-reviews │ └── README.md ├── 01-21-quick-reviews │ └── README.md ├── 01-26-quick-reviews │ └── README.md ├── 01-28-quick-reviews │ └── README.md ├── 02-02-quick-reviews │ └── README.md ├── 02-04-quick-reviews │ └── README.md ├── 02-09-quick-reviews │ └── README.md ├── 02-11-quick-reviews │ └── README.md ├── 02-16-quick-reviews │ └── README.md ├── 02-23-quick-reviews │ └── README.md ├── 03-02-quick-reviews │ └── README.md ├── 03-04-quick-reviews │ └── README.md ├── 03-09-quick-reviews │ └── README.md ├── 03-16-quick-reviews │ └── README.md ├── 03-18-quick-reviews │ └── README.md ├── 03-23-quick-reviews │ └── README.md ├── 03-26-quick-reviews │ └── README.md ├── 03-30-quick-reviews │ └── README.md ├── 04-01-quick-reviews │ └── README.md ├── 04-06-quick-reviews │ └── README.md ├── 04-08-quick-reviews │ └── README.md ├── 04-09-quick-reviews │ └── README.md ├── 04-13-quick-reviews │ └── README.md ├── 04-15-quick-reviews │ └── README.md ├── 04-20-quick-reviews │ └── README.md ├── 04-23-quick-reviews │ └── README.md ├── 04-27-quick-reviews │ └── README.md ├── 04-29-quick-reviews │ └── README.md ├── 05-03-quick-reviews │ └── README.md ├── 05-07-quick-reviews │ └── README.md ├── 05-11-quick-reviews │ └── README.md ├── 05-13-quick-reviews │ └── README.md ├── 05-14-quick-reviews │ └── README.md ├── 05-18-quick-reviews │ └── README.md ├── 05-19-quick-reviews │ └── README.md ├── 05-21-quick-reviews │ └── README.md ├── 05-25-quick-reviews │ └── README.md ├── 05-27-quick-reviews │ └── README.md ├── 06-01-quick-reviews │ └── README.md ├── 06-03-quick-reviews │ └── README.md ├── 06-08-aspnet-reviews │ └── README.md ├── 06-08-quick-reviews │ └── README.md ├── 06-08-roslyn-reviews │ └── README.md ├── 06-10-quick-reviews │ └── README.md ├── 06-14-quick-reviews │ └── README.md ├── 06-15-quick-reviews │ └── README.md ├── 06-17-quick-reviews │ └── README.md ├── 06-17-roslyn-reviews │ └── README.md ├── 06-22-quick-reviews │ └── README.md ├── 06-28-aspnet-reviews │ └── README.md ├── 06-29-quick-reviews │ └── README.md ├── 06-30-roslyn-reviews │ └── README.md ├── 07-06-quick-reviews │ └── README.md ├── 07-12-aspnet-reviews │ └── README.md ├── 07-13-quick-reviews │ └── README.md ├── 07-15-quick-reviews │ └── README.md ├── 07-20-quick-reviews │ └── README.md ├── 07-26-aspnet-reviews │ └── README.md ├── 07-27-quick-reviews │ └── README.md ├── 07-29-roslyn-reviews │ └── README.md ├── 08-02-aspnet-reviews │ └── README.md ├── 08-03-quick-reviews │ └── README.md ├── 08-04-aspnet-reviews │ └── README.md ├── 08-09-aspnet-reviews │ └── README.md ├── 08-10-quick-reviews │ └── README.md ├── 08-17-aspnet-reviews │ └── README.md ├── 08-17-quick-reviews │ └── README.md ├── 08-19-roslyn-reviews │ └── README.md ├── 08-23-aspnet-reviews │ └── README.md ├── 08-24-quick-reviews │ └── README.md ├── 08-25-quick-reviews │ └── README.md ├── 08-25-roslyn-reviews │ └── README.md ├── 08-30-aspnet-reviews │ └── README.md ├── 09-07-quick-reviews │ └── README.md ├── 09-09-roslyn-reviews │ └── README.md ├── 09-14-quick-reviews │ └── README.md ├── 09-20-aspnet-reviews │ └── README.md ├── 09-21-quick-reviews │ └── README.md ├── 09-23-roslyn-reviews │ └── README.md ├── 09-28-quick-reviews │ └── README.md ├── 10-05-quick-reviews │ └── README.md ├── 10-07-roslyn-reviews │ └── README.md ├── 10-12-quick-reviews │ └── README.md ├── 10-18-aspnet-reviews │ └── README.md ├── 10-19-quick-reviews │ └── README.md ├── 10-21-roslyn-reviews │ └── README.md ├── 10-25-aspnet-reviews │ └── README.md ├── 10-26-quick-reviews │ └── README.md ├── 10-28-roslyn-reviews │ └── README.md ├── 11-01-aspnet-reviews │ └── README.md ├── 11-02-quick-reviews │ └── README.md ├── 11-04-roslyn-reviews │ └── README.md ├── 11-08-aspnet-reviews │ └── README.md ├── 11-16-quick-reviews │ └── README.md ├── 11-18-roslyn-reviews │ └── README.md ├── 11-22-aspnet-reviews │ └── README.md ├── 11-23-quick-reviews │ └── README.md ├── 11-30-quick-reviews │ └── README.md ├── 12-02-roslyn-reviews │ └── README.md ├── 12-06-roslyn-reviews │ └── README.md └── 12-14-quick-reviews │ └── README.md ├── 2022 ├── 01-03-aspnet-reviews │ └── README.md ├── 01-04-quick-reviews │ └── README.md ├── 01-10-aspnet-reviews │ └── README.md ├── 01-11-quick-reviews │ └── README.md ├── 01-18-quick-reviews │ └── README.md ├── 01-20-roslyn-reviews │ └── README.md ├── 01-24-aspnet-reviews │ └── README.md ├── 01-25-quick-reviews │ └── README.md ├── 01-27-roslyn-reviews │ └── README.md ├── 02-01-quick-reviews │ └── README.md ├── 02-03-roslyn-reviews │ └── README.md ├── 02-07-aspnet-reviews │ └── README.md ├── 02-08-quick-reviews │ └── README.md ├── 02-14-aspnet-reviews │ └── README.md ├── 02-15-quick-reviews │ └── README.md ├── 02-24-roslyn-reviews │ └── README.md ├── 02-28-aspnet-reviews │ └── README.md ├── 03-01-quick-reviews │ └── README.md ├── 03-08-quick-reviews │ └── README.md ├── 03-15-quick-reviews │ └── README.md ├── 03-17-roslyn-reviews │ └── README.md ├── 03-21-aspnet-reviews │ └── README.md ├── 03-22-quick-reviews │ └── README.md ├── 03-29-quick-reviews │ └── README.md ├── 03-31-roslyn-reviews │ └── README.md ├── 04-05-quick-reviews │ └── README.md ├── 04-08-quick-reviews │ └── README.md ├── 04-11-aspnet-reviews │ └── README.md ├── 04-12-quick-reviews │ └── README.md ├── 04-13-aspnet-reviews │ └── README.md ├── 04-14-quick-reviews │ └── README.md ├── 04-14-roslyn-reviews │ └── README.md ├── 04-18-aspnet-reviews │ └── README.md ├── 04-19-quick-reviews │ └── README.md ├── 04-21-quick-reviews │ └── README.md ├── 04-26-quick-reviews │ └── README.md ├── 04-28-quick-reviews │ └── README.md ├── 05-02-aspnet-reviews │ └── README.md ├── 05-03-quick-reviews │ └── README.md ├── 05-05-quick-reviews │ └── README.md ├── 05-09-aspnet-reviews │ └── README.md ├── 05-10-aspnet-reviews │ └── README.md ├── 05-12-quick-reviews │ └── README.md ├── 05-16-aspnet-reviews │ └── README.md ├── 05-17-quick-reviews │ └── README.md ├── 05-19-quick-reviews │ └── README.md ├── 05-23-aspnet-reviews │ └── README.md ├── 05-24-quick-reviews │ └── README.md ├── 05-26-quick-reviews │ └── README.md ├── 05-26-roslyn-reviews │ └── README.md ├── 05-27-aspnet-reviews │ └── README.md ├── 05-31-aspnet-reviews │ └── README.md ├── 05-31-quick-reviews │ └── README.md ├── 06-02-quick-reviews │ └── README.md ├── 06-06-aspnet-reviews │ └── README.md ├── 06-07-aspnet-reviews │ └── README.md ├── 06-07-quick-reviews │ └── README.md ├── 06-09-quick-reviews │ └── README.md ├── 06-13-aspnet-reviews │ └── README.md ├── 06-14-quick-reviews │ └── README.md ├── 06-16-aspnet-reviews │ └── README.md ├── 06-16-roslyn-reviews │ └── README.md ├── 06-17-aspnet-reviews │ └── README.md ├── 06-21-aspnet-reviews │ └── README.md ├── 06-21-quick-reviews │ └── README.md ├── 06-23-aspnet-reviews │ └── README.md ├── 06-23-quick-reviews │ └── README.md ├── 06-23-roslyn-reviews │ └── README.md ├── 06-27-aspnet-reviews │ └── README.md ├── 06-28-quick-reviews │ └── README.md ├── 07-05-quick-reviews │ └── README.md ├── 07-06-aspnet-reviews │ └── README.md ├── 07-07-quick-reviews │ └── README.md ├── 07-07-roslyn-reviews │ └── README.md ├── 07-11-aspnet-reviews │ └── README.md ├── 07-12-aspnet-reviews │ └── README.md ├── 07-12-quick-reviews │ └── README.md ├── 07-14-quick-reviews │ └── README.md ├── 07-14-roslyn-reviews │ └── README.md ├── 07-19-quick-reviews │ └── README.md ├── 07-21-quick-reviews │ └── README.md ├── 07-21-roslyn-reviews │ └── README.md ├── 07-26-quick-reviews │ └── README.md ├── 07-28-quick-reviews │ └── README.md ├── 08-01-aspnet-reviews │ └── README.md ├── 08-02-quick-reviews │ └── README.md ├── 08-03-aspnet-reviews │ └── README.md ├── 08-04-roslyn-reviews │ └── README.md ├── 08-08-aspnet-reviews │ └── README.md ├── 08-09-quick-reviews │ └── README.md ├── 08-16-quick-reviews │ └── README.md ├── 08-18-roslyn-reviews │ └── README.md ├── 08-23-quick-reviews │ └── README.md ├── 08-24-roslyn-reviews │ └── README.md ├── 08-30-quick-reviews │ └── README.md ├── 09-01-roslyn-reviews │ └── README.md ├── 09-06-quick-reviews │ └── README.md ├── 09-06-roslyn-reviews │ └── README.md ├── 09-20-quick-reviews │ └── README.md ├── 09-27-quick-reviews │ └── README.md ├── 09-29-roslyn-reviews │ └── README.md ├── 10-04-quick-reviews │ └── README.md ├── 10-13-roslyn-reviews │ └── README.md ├── 10-18-quick-reviews │ └── README.md ├── 10-25-quick-reviews │ └── README.md ├── 10-27-aspnet-reviews │ └── README.md ├── 10-31-aspnet-reviews │ └── README.md ├── 11-01-quick-reviews │ └── README.md ├── 11-08-quick-reviews │ └── README.md ├── 11-15-quick-reviews │ └── README.md ├── 11-28-aspnet-reviews │ └── README.md ├── 11-29-quick-reviews │ └── README.md └── 12-08-roslyn-reviews │ └── README.md ├── 2023 ├── 01-05-aspnet-reviews │ └── README.md ├── 01-05-roslyn-reviews │ └── README.md ├── 01-09-aspnet-reviews │ └── README.md ├── 01-10-quick-reviews │ └── README.md ├── 01-17-quick-reviews │ └── README.md ├── 01-19-aspnet-reviews │ └── README.md ├── 01-20-aspnet-reviews │ └── README.md ├── 01-24-quick-reviews │ └── README.md ├── 01-30-aspnet-reviews │ └── README.md ├── 01-31-quick-reviews │ └── README.md ├── 02-02-aspnet-reviews │ └── README.md ├── 02-07-quick-reviews │ └── README.md ├── 02-09-quick-reviews │ └── README.md ├── 02-14-quick-reviews │ └── README.md ├── 02-16-quick-reviews │ └── README.md ├── 02-16-roslyn-reviews │ └── README.md ├── 02-21-quick-reviews │ └── README.md ├── 02-22-roslyn-reviews │ └── README.md ├── 02-23-quick-reviews │ └── README.md ├── 02-27-aspnet-reviews │ └── README.md ├── 02-28-quick-reviews │ └── README.md ├── 03-02-quick-reviews │ └── README.md ├── 03-06-aspnet-reviews │ └── README.md ├── 03-07-quick-reviews │ └── README.md ├── 03-09-quick-reviews │ └── README.md ├── 03-14-quick-reviews │ └── README.md ├── 03-16-aspnet-reviews │ └── README.md ├── 03-16-quick-reviews │ └── README.md ├── 03-20-aspnet-reviews │ └── README.md ├── 03-21-quick-reviews │ └── README.md ├── 03-23-quick-reviews │ └── README.md ├── 03-28-quick-reviews │ └── README.md ├── 03-30-aspnet-reviews │ └── README.md ├── 03-30-quick-reviews │ └── README.md ├── 04-03-aspnet-reviews │ └── README.md ├── 04-04-quick-reviews │ └── README.md ├── 04-06-quick-reviews │ └── README.md ├── 04-11-quick-reviews │ └── README.md ├── 04-13-aspnet-reviews │ └── README.md ├── 04-13-quick-reviews │ └── README.md ├── 04-13-roslyn-reviews │ └── README.md ├── 04-18-quick-reviews │ └── README.md ├── 04-20-quick-reviews │ └── README.md ├── 04-27-quick-reviews │ └── README.md ├── 05-02-quick-reviews │ └── README.md ├── 05-03-roslyn-reviews │ └── README.md ├── 05-09-quick-reviews │ └── README.md ├── 05-11-aspnet-reviews │ └── README.md ├── 05-11-quick-reviews │ └── README.md ├── 05-11-roslyn-reviews │ └── README.md ├── 05-15-aspnet-reviews │ └── README.md ├── 05-16-quick-reviews │ └── README.md ├── 05-18-quick-reviews │ └── README.md ├── 05-30-quick-reviews │ └── README.md ├── 06-01-quick-reviews │ └── README.md ├── 06-06-quick-reviews │ └── README.md ├── 06-08-quick-reviews │ └── README.md ├── 06-08-roslyn-reviews │ └── README.md ├── 06-13-quick-reviews │ └── README.md ├── 06-15-quick-reviews │ └── README.md ├── 06-20-quick-reviews │ └── README.md ├── 06-22-quick-reviews │ └── README.md ├── 06-22-roslyn-reviews │ └── README.md ├── 06-27-quick-reviews │ └── README.md ├── 06-29-quick-reviews │ └── README.md ├── 07-06-quick-reviews │ └── README.md ├── 07-11-quick-reviews │ └── README.md ├── 07-13-quick-reviews │ └── README.md ├── 07-18-aspnet-reviews │ └── README.md ├── 07-18-quick-reviews │ └── README.md ├── 07-20-quick-reviews │ └── README.md ├── 07-25-quick-reviews │ └── README.md ├── 07-27-quick-reviews │ └── README.md ├── 08-01-quick-reviews │ └── README.md ├── 08-03-quick-reviews │ └── README.md ├── 08-03-roslyn-reviews │ └── README.md ├── 08-08-quick-reviews │ └── README.md ├── 08-10-quick-reviews │ └── README.md ├── 09-12-quick-reviews │ └── README.md ├── 09-14-roslyn-reviews │ └── README.md ├── 09-21-quick-reviews │ └── README.md ├── 09-26-quick-reviews │ └── README.md ├── 10-10-quick-reviews │ └── README.md ├── 10-12-roslyn-reviews │ └── README.md ├── 10-24-quick-reviews │ └── README.md ├── 10-26-roslyn-reviews │ └── README.md ├── 10-31-quick-reviews │ └── README.md ├── 11-07-quick-reviews │ └── README.md ├── 11-09-roslyn-reviews │ └── README.md ├── 11-14-quick-reviews │ └── README.md ├── 11-17-roslyn-reviews │ └── README.md ├── 12-07-roslyn-reviews │ └── README.md ├── 12-12-quick-reviews │ └── README.md └── 12-21-roslyn-reviews │ └── README.md ├── 2024 ├── 01-04-roslyn-reviews │ └── README.md ├── 01-09-quick-reviews │ └── README.md ├── 01-16-quick-reviews │ └── README.md ├── 01-18-roslyn-reviews │ └── README.md ├── 01-23-quick-reviews │ └── README.md ├── 01-30-quick-reviews │ └── README.md ├── 02-01-quick-reviews │ └── README.md ├── 02-01-roslyn-reviews │ └── README.md ├── 02-05-aspnet-reviews │ └── README.md ├── 02-06-quick-reviews │ └── README.md ├── 02-08-quick-reviews │ └── README.md ├── 02-13-quick-reviews │ └── README.md ├── 02-15-quick-reviews │ └── README.md ├── 02-15-roslyn-reviews │ └── README.md ├── 02-20-quick-reviews │ └── README.md ├── 02-27-quick-reviews │ └── README.md ├── 02-29-quick-reviews │ └── README.md ├── 02-29-roslyn-reviews │ └── README.md ├── 03-05-quick-reviews │ └── README.md ├── 03-07-roslyn-reviews │ └── README.md ├── 03-12-quick-reviews │ └── README.md ├── 03-14-roslyn-reviews │ └── README.md ├── 03-19-quick-reviews │ └── README.md ├── 03-26-quick-reviews │ └── README.md ├── 03-28-roslyn-reviews │ └── README.md ├── 04-02-quick-reviews │ └── README.md ├── 04-09-quick-reviews │ └── README.md ├── 04-11-quick-reviews │ └── README.md ├── 04-11-roslyn-reviews │ └── README.md ├── 04-16-quick-reviews │ └── README.md ├── 04-23-quick-reviews │ └── README.md ├── 04-30-quick-reviews │ └── README.md ├── 05-02-quick-reviews │ └── README.md ├── 05-09-quick-reviews │ └── README.md ├── 05-09-roslyn-reviews │ └── README.md ├── 05-14-quick-reviews │ └── README.md ├── 05-16-quick-reviews │ └── README.md ├── 05-21-quick-reviews │ └── README.md ├── 05-23-roslyn-reviews │ └── README.md ├── 05-28-quick-reviews │ └── README.md ├── 06-11-quick-reviews │ └── README.md ├── 06-13-quick-reviews │ └── README.md ├── 06-18-quick-reviews │ └── README.md ├── 06-20-roslyn-reviews │ └── README.md ├── 06-25-quick-reviews │ └── README.md ├── 06-27-quick-reviews │ └── README.md ├── 07-02-quick-reviews │ └── README.md ├── 07-09-quick-reviews │ └── README.md ├── 07-11-quick-reviews │ └── README.md ├── 07-16-quick-reviews │ └── README.md ├── 07-18-quick-reviews │ └── README.md ├── 07-23-quick-reviews │ └── README.md ├── 07-25-quick-reviews │ └── README.md ├── 07-30-quick-reviews │ └── README.md ├── 08-01-aspnet-reviews │ └── README.md ├── 08-01-quick-reviews │ └── README.md ├── 08-06-quick-reviews │ └── README.md ├── 08-13-quick-reviews │ └── README.md ├── 08-15-roslyn-reviews │ └── README.md ├── 08-20-quick-reviews │ └── README.md ├── 08-29-roslyn-reviews │ └── README.md ├── 09-06-roslyn-reviews │ └── README.md ├── 09-17-quick-reviews │ └── README.md ├── 09-24-quick-reviews │ └── README.md ├── 10-01-quick-reviews │ └── README.md ├── 10-08-quick-reviews │ └── README.md ├── 10-10-roslyn-reviews │ └── README.md ├── 10-15-quick-reviews │ └── README.md ├── 10-22-quick-reviews │ └── README.md ├── 10-29-quick-reviews │ └── README.md ├── 11-05-quick-reviews │ └── README.md ├── 11-07-roslyn-reviews │ └── README.md ├── 11-12-quick-reviews │ └── README.md ├── 11-19-quick-reviews │ └── README.md ├── 12-03-quick-reviews │ └── README.md └── 12-05-roslyn-reviews │ └── README.md ├── 2025 ├── 01-07-quick-reviews │ └── README.md ├── 01-14-quick-reviews │ └── README.md ├── 01-16-roslyn-reviews │ └── README.md ├── 01-21-quick-reviews │ └── README.md ├── 01-28-quick-reviews │ └── README.md ├── 02-04-quick-reviews │ └── README.md ├── 02-11-quick-reviews │ └── README.md ├── 02-13-roslyn-reviews │ └── README.md ├── 02-18-quick-reviews │ └── README.md ├── 02-24-aspnet-reviews │ └── README.md ├── 02-25-quick-reviews │ └── README.md ├── 03-04-quick-reviews │ └── README.md ├── 03-10-aspnet-reviews │ └── README.md ├── 03-11-quick-reviews │ └── README.md ├── 03-18-quick-reviews │ └── README.md ├── 04-01-quick-reviews │ └── README.md ├── 04-01-roslyn-reviews │ └── README.md ├── 04-08-quick-reviews │ └── README.md ├── 04-10-roslyn-reviews │ └── README.md ├── 04-15-quick-reviews │ └── README.md ├── 04-22-quick-reviews │ └── README.md ├── 04-25-roslyn-reviews │ └── README.md ├── 05-06-quick-reviews │ └── README.md ├── 05-13-quick-reviews │ └── README.md ├── 06-03-quick-reviews │ └── README.md └── 06-03-roslyn-reviews │ └── README.md ├── .github └── CODEOWNERS ├── .markdownlint.json ├── CODE-OF-CONDUCT.md ├── LICENSE ├── README.md └── SECURITY.md /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # This file lists the code owners that should be added to pull requests 2 | # See https://help.github.com/articles/about-codeowners/ for details. 3 | 4 | /** @dotnet/fxdc 5 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": true, 3 | "MD003": { "style": "atx" }, 4 | "MD004": false, 5 | "MD007": { "indent": 4 }, 6 | "MD013": { "tables": false, "code_blocks": false }, 7 | "MD026": false, 8 | "no-hard-tabs": false 9 | } -------------------------------------------------------------------------------- /2015/06-30-configuration/issue-2199-samples.md: -------------------------------------------------------------------------------- 1 | # Sample Usages 2 | 3 | For related issues see the [ASP.NET repo](https://github.com/aspnet/Configuration/issues?utf8=%E2%9C%93&q=is%3Aissue+bcl+). 4 | 5 | ## Configuration sample usage 6 | 7 | ```CSharp 8 | // providers setup 9 | var configuration = 10 | new ConfigurationBuilder(appEnv.ApplicationBasePath) 11 | .AddJsonFile("config.json") 12 | .AddEnvironmentVariables() 13 | .Build(); 14 | 15 | // reading a value 16 | var connectionString = configuration["Data:DefaultConnection:ConnectionString"]; 17 | 18 | // writing a value (to memory) 19 | configuration.Set("AppSettings:BackgroundColor", "Blue"); 20 | 21 | // accessing a group of values 22 | var applicationSettings = configuration.GetSection("AppSettings"); 23 | ``` 24 | 25 | ## Options sample usage 26 | 27 | ```CSharp 28 | // setup with configuration binding 29 | services.Configure(Configuration.GetSection("AppSettings")); 30 | 31 | // setup with an Action 32 | services.Configure(as => as.BackgrounColorName = "Blue"); 33 | 34 | // access 35 | public class Window 36 | { 37 | private string _backgroundColorName; 38 | 39 | public Window(IOptions appSettings) 40 | { 41 | _backgroundColorName = appSettings.Options.BackgroundColorName; 42 | } 43 | ... 44 | ``` 45 | -------------------------------------------------------------------------------- /2015/07-14-securestring/shirt.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/apireviews/094ecb4784024d96cf3079b2dadfcbd45d9f6ed1/2015/07-14-securestring/shirt.jpg -------------------------------------------------------------------------------- /2015/08-11-process-and-securestring/System.Diagnostics.Process_v4.1.0.0.md: -------------------------------------------------------------------------------- 1 | ```diff 2 | ---D:\ProjectK\binaries\x86chk\Contracts\System.Diagnostics.Process\4.0.0.0\System.Diagnostics.Process.dll 3 | +++D:\ProjectK\binaries\x86chk\Contracts\System.Diagnostics.Process\4.1.0.0\System.Diagnostics.Process.dll 4 | namespace System.Diagnostics { 5 | public class Process : IDisposable { 6 | + public static Process Start(string fileName, string userName, string password, string domain); 7 | ^ Immo Landwerth: Remove 8 | + public static Process Start(string fileName, string arguments, string userName, string password, string domain); 9 | ^ Immo Landwerth: Remove 10 | } 11 | public sealed class ProcessStartInfo { 12 | + public string Domain { get; set; } 13 | + public bool LoadUserProfile { get; set; } 14 | + public string PlainTextPassword { get; set; } 15 | ^ Immo Landwerth: For desktop, we should hide this property from designers using DesignerSerializationVisibilityAttribute. 16 | ^ Immo Landwerth: PasswordInClearText 17 | + public string UserName { get; set; } 18 | } 19 | } 20 | ``` -------------------------------------------------------------------------------- /2015/08-21-TryGetRawMetadata/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-08-21 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/cdld1f77acl7eqj1nfkemdr3tqg). 4 | 5 | ### #2768 CoreCLR: TryGetRawMetadata 6 | 7 | Status: **Approved** | 8 | [Issue](https://github.com/dotnet/corefx/issues/2768) | 9 | [Video](https://plus.google.com/events/cdld1f77acl7eqj1nfkemdr3tqg) 10 | 11 | * Which namespace? 12 | - `System.Reflection.Metadata` seems like a good candidate 13 | * Which assembly? 14 | - Folks feel it logically belong to `System.Runtime.Loader` 15 | - We should lump it together with the requests for getting metadata tokens 16 | from reflection objects (e.g. `MethodInfo`) 17 | - Could imagine similar APIs, such as `TryGetPEImage` 18 | * Roslyn will ship a preview of scripting for November 19 | - As long as we unblock them, they are fine with us moving the API around 20 | -------------------------------------------------------------------------------- /2015/08-26-long-path/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-08-27 2 | 3 | This API review was also recorded and is available on Google+: 4 | 5 | * [Part 1] 6 | * [Part 2] 7 | 8 | [part 1]: https://plus.google.com/events/ccj5m9oheonldrlp2hg59mhevtk 9 | [part 2]: https://plus.google.com/events/c3bs3mqme23isi005bhlcv6nu68 10 | 11 | ## Overview 12 | 13 | In this API review we reviewed [a proposal](NET API FullPath Proposal.md). 14 | 15 | ## .NET API Proposal for handling full paths 16 | 17 | Status: **Design in progress** | 18 | [Video 1][part 1] | 19 | [Video 2][part 2] 20 | 21 | * Apps that are broken today, will continue to be broken regardless of whether 22 | we fix that issue or not. 23 | * No risk of causing buffer overruns as the Win32 APIs already take buffer sizes 24 | and apps pass in `MAX_PATH`, which will cause them to get "buffer too small" 25 | error. 26 | * The Win32 API `GetFinalPath` fixes casing issues. It seems we need a new API 27 | that allows us to get the canonical path that hits the disk and follows links 28 | and fixes casing 29 | * Should `GetFullPath` expand short file names (xxxx~x) to long names? 30 | - It might be better to move this stuff to this new API instead of 31 | doing this from `GetFullPath` 32 | - *Note:* this might be a behavioral breaking change in .NET Framework -------------------------------------------------------------------------------- /2015/10-09-portable-pdb/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-10-09 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/cc1vin923d7nuddasqkd487b8fk). 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed additions to the `System.Reflection.Metadata` 8 | APIs to deal with an amendment to ECMA-335 Partition II metadata for embedding 9 | [debug information](https://github.com/dotnet/roslyn/blob/master/docs/specs/PortablePdb-Metadata.md). 10 | 11 | ## Notes 12 | 13 | ### Portable PDB 14 | 15 | Status: **Approved with Feedback** | 16 | [APIs](APIs.md) | 17 | [Spec](https://github.com/dotnet/roslyn/blob/master/docs/specs/PortablePdb-Metadata.md) | 18 | [Video](https://plus.google.com/events/cc1vin923d7nuddasqkd487b8fk) 19 | 20 | * Will existing readers trip over due to new tables? 21 | - We believe the answer is no, but **@TMat** should clarify 22 | * Should the functionality live in a separate assembly? 23 | - We concluded that it shouldn't be split -- it shares a bunch of infrastructure 24 | * Some very generic names, especially Document 25 | - We should qualify them, e.g. `SourceDocument` 26 | * ~~Should `DebugMetadataHeader` be collapsed and expose `EntryPoint` as a method 27 | on `MetadataReader`, e.g. `GetDebugEntryPoint()` or something?~~ 28 | - Now has an extra `Id` property, so it's fine as-is. -------------------------------------------------------------------------------- /2015/10-27-csharp-interactive/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-10-27 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/ckjlqlts64s47aj8a9sbebkf2pg). 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed additions to the Roslyn interactive APIs, 8 | AKA scripting APIs. 9 | 10 | ## Notes 11 | 12 | ### C# Scripting APIs 13 | 14 | Status: **Approved with Feedback** | 15 | [APIs](APIs.md) | 16 | [Video](https://plus.google.com/events/ckjlqlts64s47aj8a9sbebkf2pg) 17 | 18 | * `CSharpScript.Build()` should be renamed `CSharpScript.Compile()` 19 | * Chaining potentially creates many objects, flattening would be nice 20 | - However, it seems that there is no major impact because large script 21 | files will be a single `CSharpScript` object 22 | - It only affects interactive hosting, such as REPL 23 | * `ScriptRunner<>` should be `Func`/`Action` 24 | - Maybe it's worse because every value is returned as `Task` and it takes 25 | object 26 | * `CancellationToken` isn't passed to the script, the host is responsible for 27 | passing it to the script via its own global type 28 | * More feedback is in the [API Ref](APIs.md) 29 | 30 | ## Follow-ups 31 | 32 | * We should document how to version APIs with optional parameters 33 | 34 | -------------------------------------------------------------------------------- /2015/10-27-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 10/27/2015 2 | 3 | ## Revising System.Net.Sockets contract v4.1 4 | 5 | **Rejected** | [#corefx/3895](https://github.com/dotnet/corefx/issues/3895#issuecomment-151577559) | [Video](https://www.youtube.com/watch?v=PXl1We3Yr0I&t=0h0m0s) 6 | 7 | The PR for this issue is merged and the API review is completed. Hence closing this issue. 8 | 9 | -------------------------------------------------------------------------------- /2015/10-30_misc/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-10-30 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/cquf537h1tijs1aq9gf548f8eqg). 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed additions to the Roslyn interactive APIs, 8 | AKA scripting APIs. 9 | 10 | ## Notes 11 | 12 | ### Environment.GetCommandLineArgs() 13 | 14 | * We don't expose the `CommandLine` property 15 | - Can't implement meaningfully x-plat, shell expanded wildcards etc. 16 | * The native CLR host can control behavior already, thus we don't expose a 17 | managed way to control the args 18 | * We'll expose `Environment.GetCommandLineArgs()` as-proposed 19 | 20 | ### RuntimeInformation should expose APIs to detect OS architecture and OS skus 21 | 22 | * https://github.com/dotnet/corefx/issues/4137 23 | 24 | * **Namespace**: `System.Runtime.InteropServices` 25 | * **Contract**: `System.Runtime.InteropServices.RuntimeInformation.dll` 26 | * We should expose both, `GetOSArchitecture()` as well as 27 | `GetProcessArchitecture()` 28 | * We should expose the display name methods to `RuntimeInformation` 29 | 30 | Here is how do the look like: 31 | 32 | **Window** where type in {Server, Client} and version is from the Win32 version helper APIs: 33 | 34 | ``` 35 | string.Format("Windows {0} {1} Or Greater", type, version); 36 | ``` 37 | 38 | **Linux** Output of `uname -sr` which returns the following on Ubuntu 14.04: 39 | 40 | ``` 41 | Linux 3.16.0-50-generic 42 | ``` 43 | 44 | **OSX**. Output of `uname -sr` which returns the following on OSX 10.10.3: 45 | 46 | ``` 47 | Darwin 14.3.0 48 | ``` 49 | -------------------------------------------------------------------------------- /2015/11-24-networking/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2015-11-24 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/ck32jai0jurth6849hkldto1o98). 4 | 5 | ## Overview 6 | 7 | In this API review we took a look at the new networking APIs we're adding to 8 | .NET Core. 9 | 10 | ## Notes 11 | 12 | ### Networking 13 | 14 | Status: **Approved with Feedback** | 15 | [API Rev (All)](All ASPNET5 contracts.md) | 16 | [API Rev (Desktop vs NetCore)](Desktop_vs_ASPNET5 contracts.md) | 17 | [Video](https://plus.google.com/events/ck32jai0jurth6849hkldto1o98) 18 | 19 | * The new APIs are fully OOB on desktop 20 | * Should `SocketTaskExtensions` ship OOB on desktop or should we add to the 21 | desktop implementations? 22 | - For now the answer is: we can implement it on top 23 | * The `Func<>` for the server callback is a bit messy but it's preferred over 24 | a named delegate because: 25 | - There is an existing named delegate that takes a cert 1 that we can't 26 | reuse, so we'd have to come with a new name 27 | - There are dependency issues for the arguments; there is no good contract 28 | in which we could put the named delegate 29 | * `SocketReceiveFromResult` and `SocketReceiveMessageFromResult` both use 30 | public fields -- shouldn't those be properties? 31 | -------------------------------------------------------------------------------- /2015/12-04-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 12/4/2015 2 | 3 | ## Missing several valuable members of System.Console in contract 4 | 5 | **Approved** | [#corefx/4636](https://github.com/dotnet/corefx/issues/4636#issuecomment-162039060) | [Video](https://www.youtube.com/watch?v=nG-Af_TgYbI&t=0h0m0s) 6 | 7 | Looks good, except for `BufferWidth` and `BufferHeight` because they are not meaningful on Linux; they basically have to return `WindowWidth` and `WindowHeight`. 8 | 9 | @stephentoub, can you create a list of all the missing APIs in `Console`? We should probably add all except for the ones we don't want/can't support. 10 | 11 | ## Add ValueTask to corefx 12 | 13 | **Approved** | [#corefx/4708](https://github.com/dotnet/corefx/issues/4708#issuecomment-162042013) | [Video](https://www.youtube.com/watch?v=nG-Af_TgYbI&t=0h10m27s) 14 | 15 | No major concerns. We should agree, though, how we name types that provide a struct-based alternative to a class. Should this be a prefix or a suffix? 16 | - **Prefix**. Matches how must people read C# code, i.e. `struct Foo`, `ValueFoo`. 17 | - **Suffix**. Sorts better in IntelliSense, documentation, or any other case where APIs are sorted. 18 | 19 | The best location seems to be `System.Threading.Tasks`. We need to check whether we can make this a partial façade for .NET Framework. 20 | 21 | -------------------------------------------------------------------------------- /2016/01-08-metadata/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2016-01-08 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/c8o1cl7joerpcalc48ema1l2n1c). 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed the following PRs and proposals: 8 | 9 | * [Notes](#262-systemreflectionmetadata-should-provide-easier-signature-reading-api) | [#262](https://github.com/dotnet/corefx/issues/262) System.Reflection.Metadata should provide easier signature reading API 10 | * [Notes](#5212-api-review-systemreflectionmetadata-debug-directory-reading-misc) | [#5212](https://github.com/dotnet/corefx/issues/5212) API review: System.Reflection.Metadata debug directory reading + misc 11 | 12 | ## Notes 13 | 14 | ### #262 System.Reflection.Metadata should provide easier signature reading API 15 | 16 | Status: **Approved with Feedback** | 17 | [Issue](https://github.com/dotnet/corefx/issues/262) | 18 | 19 | * The providers could need context, so it might be good to introduce a generic 20 | parameter that represents the context. 21 | * They should probably be abstract types 22 | * `GetGenericInstance` -> `GetGenericInstantiation` 23 | 24 | ### #5212 API review: System.Reflection.Metadata debug directory reading + misc 25 | 26 | Status: **Approved with Feedback** | 27 | [Issue](https://github.com/dotnet/corefx/issues/5212) | 28 | [Video](http://channel9.msdn.com/Blogs/dotnet/NET-Core-API-Review-2016-01-08#time=0h0m0s) 29 | 30 | * `MethodSemanticsAttribute` should be in `System.Reflection.Metadata` 31 | - Assuming, we already add enums to `System.Reflection.Metadata` 32 | * Mark assembly as `[CLSCompliant(true)]` and mark individual APIs as 33 | `[CLSCompliant(false)]` 34 | -------------------------------------------------------------------------------- /2016/01-12-simd-and-console/VectorOfT.md: -------------------------------------------------------------------------------- 1 | ```diff 2 | namespace System.Numerics { 3 | public struct Vector 4 | { 5 | + public Vector(void* dataPointer); 6 | + public void CopyTo(void* destination); 7 | } 8 | } 9 | ``` 10 | -------------------------------------------------------------------------------- /2016/01-15-shutdown/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2016-01-12 2 | 3 | This API review was also recorded and is available on [Google+](https://plus.google.com/events/c147l9eb5ibs2br2aciqvqlapr4). 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed the following PRs and proposals: 8 | 9 | * [Notes](#5205-during-shutdown-revisit-finalization-and-provide-a-way-to-clean-up-resources) | [#5205](https://github.com/dotnet/corefx/issues/5205) During shutdown, revisit finalization and provide a way to clean up resources 10 | 11 | ## Notes 12 | 13 | ### #5205 During shutdown, revisit finalization and provide a way to clean up resources 14 | 15 | Status: **Approved** | 16 | [Issue](https://github.com/dotnet/corefx/issues/5205) | 17 | 18 | * We'd change the semantics to run finalizers as a best effort during shutdown 19 | * If customers need to run code on shutdown, they need to subscribe to an event 20 | * Desktop: 21 | - If you crash, we may not run all finalizers 22 | - If you have a deadlock, we've a 40 seconds timeout 23 | * CoreCLR: 24 | - We got rid of the timeout because it's too long for smaller devices, such as phone 25 | 26 | * Running threads is problematic 27 | * Should we have a special type? 28 | -------------------------------------------------------------------------------- /2016/01-29-reflection/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2016-01-29 2 | 3 | This API review was also recorded and is available on [Google Hangouts](https://plus.google.com/events/cim35s6be58n3qnv0s4ebdaevs0) 4 | 5 | ## Overview 6 | 7 | In this API review we reviewed the following PRs and proposals: 8 | 9 | * [Notes](#5381-add-missing-members-for-systemreflection-namespace) | [#5381](https://github.com/dotnet/corefx/issues/5381) Add missing members for System.Reflection namespace 10 | 11 | ## Notes 12 | 13 | ### #5381 Add missing members for System.Reflection namespace 14 | 15 | Status: **Not reviewed** | 16 | [Issue](https://github.com/dotnet/corefx/issues/5381) | 17 | [API Reference](System.Reflection.md) | 18 | [Video](https://plus.google.com/events/cim35s6be58n3qnv0s4ebdaevs0) 19 | 20 | * Don't expose the notion of `ReflectionOnlyLoad` 21 | * `GetExecutingAssembly()` 22 | * Don't expose any `RuntimeXxxHandle` APIs 23 | * Don't expose `Resolve` methods that resolve tokens to `*Info` classes 24 | * * Don't expose `ReflectedType` 25 | * Don't expose `GetCurrentMethod` 26 | * `GetInterfaceMap()` isn't implemented by .NET Native and would be costly 27 | - Use is unclear; can be replaced by calling through the interface 28 | - Used by DCS and JSON 29 | 30 | For more details, take a look at the [API level notes](NetFx_NetCore.md). -------------------------------------------------------------------------------- /2016/02-09-ADO_NET/README.md: -------------------------------------------------------------------------------- 1 | # API Review 2016-02-09 2 | 3 | This API review was also recorded and is available on [Google Hangouts](https://plus.google.com/events/c4l3me8hagne0cgeipqh8959gk4). 4 | 5 | ## API for GetColumnSchema 6 | 7 | Status: **Approved with feedback** | 8 | [Issue](https://github.com/dotnet/corefx/issues/5915) | 9 | [Video](https://plus.google.com/events/c4l3me8hagne0cgeipqh8959gk4) 10 | 11 | After some discussion we decided to simplify this design to keep it simpler for V2. Originally, we said we'll add a virtual method on `DbDataReader` that in V2 we'll replace the current proposal that derivatives of `DbDataReader` need to implement the interface `IDbColumnSchemaGenerator`, which is what we plan on doing now in order avoid having add an API to the .NET Framework (V1) 12 | 13 | We concluded that there is no way to make this work well in V2, specifically around cases where a V1 consumers tries to deal with a V2 provider or a V2 consumer uses a V1 provider. 14 | 15 | More notes: 16 | 17 | * `DbColumn` 18 | - Setters should be `protected` 19 | - Should the indexer throw for non existing keys or return `null`? We should do one of the following: 20 | 1. Agree that `null` is a good enough value for non-existing keys. 21 | 2. Follow `Dictionary` and throw for non-existing keys and also offer `TryGetValue` to avoid exceptions. 22 | - The indexer exposes properties defined on the derived type, which allows consumers to light up for specific providers without having a static dependency on the derived type 23 | * No virtual for V2 24 | - Provider will continue to provide schema by implementing the interface -------------------------------------------------------------------------------- /2017/06-16-System.Text.Buffers/README.md: -------------------------------------------------------------------------------- 1 | # API Review for `System.Buffers.Text` 2 | 3 | Status: **Needs more work** | [API Reference](System.Text.Buffers.md) 4 | 5 | ## Feedback 6 | 7 | * The assembly name should match the namespace; we have to rename anyway b/c 8 | they cause collisions between the CoreFxLab's MyGet feed and NuGet.org 9 | * We should consider merging the contents of this assembly with the existing 10 | assembly 11 | - This would allow re-implementing the existing encoding APIs to sit on top 12 | of the new APIs 13 | - But being out-of-band has some benefit has some benefit, too 14 | * Maybe we should have a more generic name so that we can put all 15 | transformations in that assembly, instead of just APIs related to text 16 | * `TransformationStatus ` is quite long -- can we make it shorter? 17 | - `TransformStatus`? 18 | * The `ConvertFrom*` and `Compute*` are too long; makes common call sites quite 19 | verbose, especially considering the nested classes 20 | * We've some concerns with the name and shape of the API. Are we taking the good 21 | name here? One proposal is to make the namespace more generic, like 22 | `System.Buffers.Transformations` 23 | * `ComputeDecodedLength` -> `GetLength` 24 | * `ComputeEncodedBytesFromUtf32` -> `GetLengthFromUtf32` 25 | * `ConvertFromUtf32` -> `FromUtf32` 26 | * Remove `IBufferFormattable` not needed for now 27 | * Why do we need `TextFormat`? Shouldn't we be using the existing 28 | `NumberFormatInfo` 29 | 30 | -------------------------------------------------------------------------------- /2017/08-22-Tensor/README.md: -------------------------------------------------------------------------------- 1 | # `Tensor` 2 | 3 | Status: **Needs more work** | [API Ref](System.Numerics.Tensors.md) 4 | 5 | * Most feedback is in the [API Ref](System.Numerics.Tensors.md) 6 | * We need to have a way to bridge C# and C++ code 7 | - We need to support multiple layouts for different conventions / use cases -------------------------------------------------------------------------------- /2017/09-19-GitHub issues.md: -------------------------------------------------------------------------------- 1 | # API Review session for GitHub issues 2 | 3 | 1 hour API review session of GitHub issues on 2017/9/19. 4 | 5 | Recording: https://www.youtube.com/watch?v=W_r6oG7nnK4 6 | 7 | * https://youtu.be/W_r6oG7nnK4?t=99 8 | * [#21055](https://github.com/dotnet/corefx/issues/21055) - **Proposal: Specialize IA.Builder.ToImmutableArray, IHS.Builder.ToImmutableHashSet** (Approved) 9 | * Duration: 10 min 10 | * https://youtu.be/W_r6oG7nnK4?t=680 11 | * [#19928](https://github.com/dotnet/corefx/issues/19928) - **Add API to get an AssemblyName that doesn't throw on a native binary** (Rejected) 12 | * Duration: 15 min 13 | * https://youtu.be/W_r6oG7nnK4?t=1723 14 | * [#16428](https://github.com/dotnet/corefx/issues/16428) - **New Math APIs** (Approved) 15 | * Duration: 40 min 16 | 17 | 18 | ### Participants 19 | 20 | * Left-to-right on the video at start: [@karelz](https://github.com/karelz), [@bartonjs](https://github.com/bartonjs), [@KrzysztofCwalina](https://github.com/KrzysztofCwalina), [@danmosemsft](https://github.com/danmosemsft) 21 | * On call without video: [@stephentoub](https://github.com/stephentoub) 22 | * Later appearances: [@weshaggard](https://github.com/weshaggard) (at [7:13](https://youtu.be/W_r6oG7nnK4?t=434)), [@ahsonkhan](https://github.com/ahsonkhan) (at [12:03](https://youtu.be/W_r6oG7nnK4?t=723)), [@mellinoe](https://github.com/mellinoe) (at [34:30](https://youtu.be/W_r6oG7nnK4?t=2070)), [@tannergooding](https://github.com/tannergooding) (at [47:11](https://youtu.be/W_r6oG7nnK4?t=2831)) 23 | -------------------------------------------------------------------------------- /2017/11-07-GitHub issues.md: -------------------------------------------------------------------------------- 1 | # API Review session for GitHub issues 2 | 3 | 2 hours API review session of GitHub issues on 2017/11/7. 4 | 5 | Recording: https://www.youtube.com/watch?v=HnKmLJcEM74 6 | 7 | * https://youtu.be/HnKmLJcEM74?t=83 8 | * [#24946](https://github.com/dotnet/corefx/issues/24946) - **Expose RuntimeWrappedException constructor** - Approved 9 | * Duration: 3 min 10 | * https://youtu.be/HnKmLJcEM74?t=264 11 | * Discussion: The worst API name in BCL 12 | * Duration: 2 min 13 | * https://youtu.be/HnKmLJcEM74?t=391 14 | * [#24854](https://github.com/dotnet/corefx/issues/24854) - **Provide IEnumerable\ support for Memory\** - Approved 15 | * Duration: 13 min 16 | * https://youtu.be/HnKmLJcEM74?t=1163 17 | * [#25085](https://github.com/dotnet/corefx/issues/25085) - **Add String support to ReadOnlyMemory\** - Approved 18 | * Duration: 28 min 19 | * https://youtu.be/HnKmLJcEM74?t=2840 20 | * [#24839](https://github.com/dotnet/corefx/issues/24839) - **Add SpanExtensions.LastIndexOf** - Approved 21 | * Duration: 20 min 22 | * https://youtu.be/HnKmLJcEM74?t=4047 23 | * [#20903](https://github.com/dotnet/corefx/issues/20903) - **Additional API for DbProviderFactories in .NET Core** - Approved 24 | * Duration: 48 min 25 | 26 | 27 | ### Participants 28 | 29 | * Left-to-right on the video at start: [@terrajobst](https://github.com/terrajobst), [@marek-safar](https://github.com/marek-safar), [@KrzysztofCwalina](https://github.com/KrzysztofCwalina), [@karelz](https://github.com/karelz), [@weshaggard](https://github.com/weshaggard) 30 | * On call without video: [@stephentoub](https://github.com/stephentoub) 31 | * Later appearances: [@divega](https://github.com/divega) & [@ajcvickers](https://github.com/ajcvickers) (at [1:23:31](https://youtu.be/HnKmLJcEM74?t=5011)) 32 | -------------------------------------------------------------------------------- /2017/11-28-GitHub issues.md: -------------------------------------------------------------------------------- 1 | # API Review session for GitHub issues 2 | 3 | 1 hour API review session of GitHub issues on 2017/11/28. 4 | 5 | Recording: https://www.youtube.com/watch?v=9F_NsviGT0Y 6 | 7 | * https://youtu.be/9F_NsviGT0Y?t=18 8 | * [#25535](https://github.com/dotnet/corefx/issues/25535) - **Add overload to Path.GetFullPath() to specify base path** - Approved 9 | * Duration: 9 min 10 | * https://youtu.be/9F_NsviGT0Y?t=552 11 | * [#25539](https://github.com/dotnet/corefx/issues/25539) - **Need Span overloads for Path APIs** - Approved 12 | * Duration: 7 min 13 | * https://youtu.be/9F_NsviGT0Y?t=957 14 | * [#25536](https://github.com/dotnet/corefx/issues/25536) - **Need Span based path join API** - Needs more work 15 | * Duration: 30 min 16 | * https://youtu.be/9F_NsviGT0Y?t=2670 17 | * [#25427](https://github.com/dotnet/corefx/issues/25427) - **Add PipeOptions.CurrentUserOnly option** - Approved 18 | * Duration: 5 min 19 | * https://youtu.be/9F_NsviGT0Y?t=2950 20 | * [#23519](https://github.com/dotnet/corefx/issues/23519) - **Add Scalar Intel hardware intrinsic functions** - Approved 21 | * Duration: 7 min 22 | 23 | 24 | ### Participants 25 | 26 | * Left-to-right on the video at start: [@terrajobst](https://github.com/terrajobst), [@OliaG](https://github.com/OliaG), [@ViktorHofer](https://github.com/ViktorHofer), [@tannergooding](https://github.com/tannergooding), [@pjanotti](https://github.com/pjanotti), [@karelz](https://github.com/karelz) 27 | * On call without video: [@JeremyKuhne](https://github.com/JeremyKuhne), [@stephentoub](https://github.com/stephentoub) 28 | * Later appearances: [@bartonjs](https://github.com/bartonjs) (at [1:27](https://youtu.be/9F_NsviGT0Y?t=87)), [@weshaggard](https://github.com/weshaggard) (at [4:43](https://youtu.be/9F_NsviGT0Y?t=283)) 29 | -------------------------------------------------------------------------------- /2017/11-28-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 11/28/2017 2 | 3 | ## Add overload to Path.GetFullPath() to specify base path 4 | 5 | **Approved** | [#corefx/25535](https://github.com/dotnet/corefx/issues/25535) | [Video](https://www.youtube.com/watch?v=9F_NsviGT0Y&t=0h0m0s) 6 | 7 | ## Need Span overloads for Path APIs 8 | 9 | **Approved** | [#corefx/25539](https://github.com/dotnet/corefx/issues/25539) | [Video](https://www.youtube.com/watch?v=9F_NsviGT0Y&t=0h9m18s) 10 | 11 | ## Need Span based path join API 12 | 13 | **Approved** | [#corefx/25536](https://github.com/dotnet/corefx/issues/25536#issuecomment-347624492) | [Video](https://www.youtube.com/watch?v=9F_NsviGT0Y&t=0h13m12s) 14 | 15 | It seems weird to me to introduce a new API without deprecating the old API. However, deprecating the old API would be fairly invasive (high usage). 16 | 17 | 1. Could we fix the behavior of `Combine`? We could quirk the behavior. @JeremyKuhne will take a look. 18 | 2. It seems less ideal but more acceptable to me to introduce an overload of `Combine` that takes `Span` with the new behavior. People would opt-into the new behavior by converting to `Span`. Reason being we have a unified set of verbs. 19 | ## Add PipeOptions.CurrentUserOnly option 20 | 21 | **Approved** | [#corefx/25427](https://github.com/dotnet/corefx/issues/25427) | [Video](https://www.youtube.com/watch?v=9F_NsviGT0Y&t=0h44m2s) 22 | 23 | ## Add Scalar Intel hardware intrinsic functions 24 | 25 | **Approved** | [#corefx/23519](https://github.com/dotnet/corefx/issues/23519) | [Video](https://www.youtube.com/watch?v=9F_NsviGT0Y&t=0h49m16s) 26 | 27 | -------------------------------------------------------------------------------- /2017/12-12-GitHub issues.md: -------------------------------------------------------------------------------- 1 | # API Review session for GitHub issues 2 | 3 | 2 hours API review session of GitHub issues on 2017/12/12. 4 | 5 | Recording: https://www.youtube.com/watch?v=KKUjm8zaJBM 6 | 7 | * https://youtu.be/KKUjm8zaJBM?t=10 8 | * [#24668](https://github.com/dotnet/corefx/issues/24668) - **New APIs in SyndicationFeedFormatter** - Needs more work 9 | * Duration: 50 min 10 | * https://youtu.be/KKUjm8zaJBM?t=3014 11 | * [#25779](https://github.com/dotnet/corefx/issues/25779) - **Add a BCL tensor API to represent multi-dimensional data for machine learning** - Needs deeper review 12 | * Duration 65 min 13 | 14 | 15 | ### Participants 16 | 17 | * Left-to-right on the video at start: [@terrajobst](https://github.com/terrajobst), [@weshaggard](https://github.com/weshaggard), [@KrzysztofCwalina](https://github.com/KrzysztofCwalina), [@mconnew](https://github.com/mconnew), [@shmao](https://github.com/shmao), [@karelz](https://github.com/karelz), [@GrabYourPitchforks](https://github.com/GrabYourPitchforks) 18 | * On call without video: [@eerhardt](https://github.com/eerhardt) 19 | * Later appearances: [@ahsonkhan](https://github.com/ahsonkhan) (at [1:05:18](https://youtu.be/KKUjm8zaJBM?t=3918)) 20 | -------------------------------------------------------------------------------- /2018/01-02-GitHub issues.md: -------------------------------------------------------------------------------- 1 | # API Review session for GitHub issues 2 | 3 | 1 hour API review session of GitHub issues on 2018/1/2. 4 | 5 | Recording: https://www.youtube.com/watch?v=dOpH6bUNbcw 6 | 7 | * https://youtu.be/dOpH6bUNbcw?t=62 8 | * [#25846](https://github.com/dotnet/corefx/issues/25846) - **Add StringBuilder.Equals(string) to efficiently compare a StringBuilder with a string** - Approved 9 | * Duration: 15 min (+ few ad-hoc mini discussions later on) 10 | * https://youtu.be/dOpH6bUNbcw?t=1420 (2 min) 11 | * https://youtu.be/dOpH6bUNbcw?t=2049 (3 min) 12 | * https://youtu.be/dOpH6bUNbcw?t=2746 (3 min) 13 | * https://youtu.be/dOpH6bUNbcw?t=992 14 | * [#25671](https://github.com/dotnet/corefx/issues/25671) - **Add MemberInfo.IsCollectible & Assembly.IsCollectible** - Approved 15 | * Duration: 8 min 16 | * https://youtu.be/dOpH6bUNbcw?t=1567 17 | * [#1593](https://github.com/dotnet/corefx/issues/1593) - **XPathNodeIterator should implement IEnumerable** - Needs more work 18 | * Duration: 8 min 19 | * https://youtu.be/dOpH6bUNbcw?t=2235 20 | * [#16493](https://github.com/dotnet/corefx/issues/16493) - **X509Certificate GetCertHash and GetCertHashString with SHA256** - Approved 21 | * Duration: 2 min 22 | * https://youtu.be/dOpH6bUNbcw?t=2391 23 | * [#17135](https://github.com/dotnet/corefx/issues/17135) - **Helper class for dealing with native shared libraries and function pointers** - Postponed 24 | * Duration: 5 min 25 | 26 | 27 | ### Participants 28 | 29 | * Left-to-right on the video at start: [@terrajobst](https://github.com/terrajobst), [@bartonjs](https://github.com/bartonjs), [@danmosemsft](https://github.com/danmosemsft), [@weshaggard](https://github.com/weshaggard), [@karelz](https://github.com/karelz) 30 | * On call without video: N/A 31 | -------------------------------------------------------------------------------- /2018/01-12-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 1/12/2018 2 | 3 | ## Add MemoryExtension APIs to get parity with array APIs 4 | 5 | **Approved** | [#corefx/25850](https://github.com/dotnet/corefx/issues/25850#issuecomment-357358606) | [Video](https://www.youtube.com/watch?v=1t_a9fbB3jY&t=0h0m0s) 6 | 7 | Let's only add `Reverse` and not the rest. Reason being that delegate invocations could potentially become a perf trap; the have obvious 1 - 5 line replacements for the caller. `Reverse` can be optimized and seems generally useful. 8 | ## String-like extension methods to ReadOnlySpan Epic 9 | 10 | **Approved** | [#corefx/21395](https://github.com/dotnet/corefx/issues/21395#issuecomment-357363944) | [Video](https://www.youtube.com/watch?v=1t_a9fbB3jY&t=0h20m28s) 11 | 12 | We don't think this is ready yet. @ahsonkhan, please redesign the APIs to avoid allocations by returning new spans. Instead, they should follow our `TryXxx` pattern. But we have to keep in mind that many times folks will start with `ReadOnlySpan` from a `string` where in-place isn't possible. It would help to have some sample code that shows how these APIs are used. 13 | ## Add StringBuilder.Equals(string) to efficiently compare a StringBuilder with a string. 14 | 15 | **Approved** | [#corefx/25846](https://github.com/dotnet/corefx/issues/25846) | [Video](https://www.youtube.com/watch?v=1t_a9fbB3jY&t=0h43m51s) 16 | 17 | -------------------------------------------------------------------------------- /2018/01-19-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 1/19/2018 2 | 3 | ## Change OwnedMemory to IOwnedMemory 4 | 5 | **Rejected** | [#corefx/26002](https://github.com/dotnet/corefx/issues/26002#issuecomment-359105642) | [Video](https://www.youtube.com/watch?v=Qcqn-yv1X0o&t=-1h0m-9s) 6 | 7 | We decided against it. We cannot model read-only spans with this interface unless we're creating RW and RO interfaces for this. 8 | ## Move Span.DangerousCreate to MemoryMarshal.Create 9 | 10 | **Approved** | [#corefx/26139](https://github.com/dotnet/corefx/issues/26139#issuecomment-359111438) | [Video](https://www.youtube.com/watch?v=Qcqn-yv1X0o&t=0h13m35s) 11 | 12 | We should consider changing the second overload to be `in`. Otherwise, it looks good as proposed. 13 | ## Move Span.NonPortableCast to MemoryMarshal and rename to Cast 14 | 15 | **Approved** | [#corefx/26368](https://github.com/dotnet/corefx/issues/26368#issuecomment-359109249) | [Video](https://www.youtube.com/watch?v=Qcqn-yv1X0o&t=0h38m14s) 16 | 17 | Looks good as proposed. We can add a more specialized API that handles the `else` case if we we want to. Only difference from the proposal is to leave it on `MemoryExtensions` as the API is now safe. 18 | 19 | 20 | ```csharp 21 | namespace System 22 | { 23 | public static partial class MemoryExtensions 24 | { 25 | public static bool TryCast(this ReadOnlySpan source, out ReadOnlySpan output) where TFrom : struct where TTo : struct; 26 | public static bool TryCast(this Span source, out Span output) where TFrom : struct where TTo : struct; 27 | } 28 | } 29 | ``` 30 | 31 | We'll also leave the `NonPortableCast` API but we'll move it `MemoryMarshal`. We need to make sure it's not an extension method, under which case we can rename it to just `Cast`. 32 | -------------------------------------------------------------------------------- /2018/02-20-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 2/20/2018 2 | 3 | ## Consider adding MemoryMarshal.GetOwner(ROM) 4 | 5 | **Approved** | [#corefx/27237](https://github.com/dotnet/corefx/issues/27237#issuecomment-367072826) | [Video](https://www.youtube.com/watch?v=9BC3Q1kgWAA&t=0h0m0s) 6 | 7 | We believe this API would slightly better and would be more consistent: 8 | 9 | ```C# 10 | namespace System.Runtime.InteropServices 11 | { 12 | public static class MemoryMarshal 13 | { 14 | public static bool TryGetOwnedMemory(ReadOnlyMemory readOnlyMemory, out TOwner ownedMemory) 15 | where TOwner: OwnedMemory; 16 | public static bool TryGetOwnedMemory(ReadOnlyMemory readOnlyMemory, out TOwner ownedMemory, out int index, out int length) 17 | where TOwner: OwnedMemory; 18 | } 19 | } 20 | ``` 21 | ## Add DecompressionMethods.Brotli? 22 | 23 | **Approved** | [#corefx/26995](https://github.com/dotnet/corefx/issues/26995) | [Video](https://www.youtube.com/watch?v=9BC3Q1kgWAA&t=0h25m14s) 24 | 25 | ## Add file enumeration extensibility points 26 | 27 | **Approved** | [#corefx/25873](https://github.com/dotnet/corefx/issues/25873#issuecomment-367082482) | [Video](https://www.youtube.com/watch?v=9BC3Q1kgWAA&t=0h38m11s) 28 | 29 | We should probably rename `MatchType.Dos` to `MatchType.Win32`. Otherwise, looks good as proposed. 30 | -------------------------------------------------------------------------------- /2018/03-13-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/13/2018 2 | 3 | ## Add support for RemoteCertificateValidationCallback with ClientWebSocket 4 | 5 | **Approved** | [#corefx/12038](https://github.com/dotnet/corefx/issues/12038) | [Video](https://www.youtube.com/watch?v=RsNFSBH3XX0&t=-13h-35m-54s) 6 | 7 | ## [System.Runtime.InteropServices] Introduce broader platform definitions. 8 | 9 | **Needs Work** | [#corefx/27417](https://github.com/dotnet/corefx/issues/27417) | [Video](https://www.youtube.com/watch?v=RsNFSBH3XX0&t=0h10m32s) 10 | 11 | -------------------------------------------------------------------------------- /2018/03-20-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/20/2018 2 | 3 | ## Path Span APIs that write into a specified buffer 4 | 5 | **Approved** | [#corefx/27418](https://github.com/dotnet/corefx/issues/27418) | [Video](https://www.youtube.com/watch?v=HvGnuR6zxfI&t=-11h-34m-38s) 6 | 7 | -------------------------------------------------------------------------------- /2018/03-27-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/27/2018 2 | 3 | ## SNI API for SslStream 4 | 5 | **Approved** | [#corefx/24553](https://github.com/dotnet/corefx/issues/24553#issuecomment-376614353) | [Video](https://www.youtube.com/watch?v=cwX05hKkp8s&t=-7h-8m-18s) 6 | 7 | @krwq, please make sure that deciding on the cert via a callback is viable, i.e. you don't have to pass a mapping of host name to cert up front on any of the platforms we support with .NET Core. Otherwise, the API shape won't work. 8 | 9 | > When caller returns `null` certificate we will throw `AuthenticationException` 10 | 11 | Alternative design would be that `null` means use the default certificate (`SslServerAuthenticationOptions.ServerCertificate`). That might be more convenient without forcing the delegate to allocate a closure. 12 | 13 | @davidfowl @halter73, preferences? 14 | 15 | -------------------------------------------------------------------------------- /2018/04-10-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/10/2018 2 | 3 | ## Remove SequenceMarshal.TryGetMemoryManager for ReadOnlySequence 4 | 5 | **Approved** | [#corefx/28959](https://github.com/dotnet/corefx/issues/28959) | [Video](https://www.youtube.com/watch?v=FwqoZUlanYg&t=0h-9m-58s) 6 | 7 | ## Make CreateFromPinnedArray visible and move it to MemoryMarshal 8 | 9 | **Approved** | [#corefx/28954](https://github.com/dotnet/corefx/issues/28954) | [Video](https://www.youtube.com/watch?v=FwqoZUlanYg&t=0h5m0s) 10 | 11 | ## Remove .Length from MemoryManager 12 | 13 | **Approved** | [#corefx/28751](https://github.com/dotnet/corefx/issues/28751) | [Video](https://www.youtube.com/watch?v=FwqoZUlanYg&t=0h13m35s) 14 | 15 | ## Add GetPinnableReference back to Span and ReadOnlySpan 16 | 17 | **Approved** | [#corefx/28969](https://github.com/dotnet/corefx/issues/28969#issuecomment-380190393) | [Video](https://www.youtube.com/watch?v=FwqoZUlanYg&t=0h22m45s) 18 | 19 | * The API looks fine. It's a bit weird to have these APIs on `Span` and `ReadOnlySpan`, it would be more consistent to have these APIs on `MemoryMarshal`. However, one could also argue that these API are are safe, as they return `null` for empty spans, so callers will get a null reference rather than being able to get into corrupted states. 20 | 21 | * It's true that we mostly don't have extension methods there, but I don't see a reason why we wouldn't declare them as extension methods. However, the real issue is that moving them to `MemoryMarshal` is that without the using, the feature wouldn't work. Yes, its not different from Linq, but it seems desirable to have these APIs just work. 22 | 23 | Hence, we believe these should be instance methods on `Span` and `ReadOnlySpan`. We'd still mark the APIs as `[EditorBrowsable(Never)]` as this API is plumbing only. 24 | -------------------------------------------------------------------------------- /2018/04-17-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/17/2018 2 | 3 | ## Expose `System.Runtime.CompilerServices.SkipLocalsInitAttribute` 4 | 5 | **Approved** | [#corefx/29026](https://github.com/dotnet/corefx/issues/29026#issuecomment-382076991) | [Video](https://www.youtube.com/watch?v=8m4ijdz0CXw&t=0h0m0s) 6 | 7 | Questions: 8 | 9 | * Will there be a keyword in the language too or will developers use the attribute? 10 | * Presumably people will be able to define the attribute in their own code and get the same behavior? 11 | * Does it make sense to be applied to fields? Presumably no, because what matters is the constructor in case initializers are present? 12 | * Do you plan to support override behavior, i.e. apply to assembly/module/type to turn on/off and then override on the a per member basis? 13 | 14 | ```csharp 15 | namespace System.Runtime.CompilerServices 16 | { 17 | [AttributeUsage(AttributeUsage.All, Inherited = false)] 18 | public sealed class SkipLocalsInitAttribute : Attribute 19 | { 20 | public SkipLocalsInitAttribute(bool isEnabled); 21 | public bool IsEnabled { get; } 22 | } 23 | } 24 | ``` 25 | ## Add a GetEncodings method to System.Text.EncodingProvider to support enumerating available character encodings 26 | 27 | **Needs Work** | [#corefx/28944](https://github.com/dotnet/corefx/issues/28944#issuecomment-382081100) | [Video](https://www.youtube.com/watch?v=8m4ijdz0CXw&t=0h9m53s) 28 | 29 | * `EncodingProvider.GetEncodings()` should be `IEnumerable` 30 | * `EncodingProvider.GetEncodings()` should be virtual and return an empty list (instead of throwing). While this isn't correct it means that one provider that isn't updated doesn't spoil the enumeration for everyone else. 31 | * `Encoding.GetEncodings()` should return all registered encodings across all providers and de-dupe them if necessary. 32 | -------------------------------------------------------------------------------- /2018/05-29-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 5/29/2018 2 | 3 | ## Regex Match, Split and Matches should support RegexOptions.AnyNewLine as (?=[\r\n]|\z) 4 | 5 | **Approved** | [#corefx/28410](https://github.com/dotnet/corefx/issues/28410#issuecomment-392863409) | [Video](https://www.youtube.com/watch?v=ZHKLi8qWTCs&t=0h0m0s) 6 | 7 | Looks good. A few comments: 8 | 9 | * We cannot use the proposed value of 128 because it's already taken (see `#if DBG` in code) 10 | * The table looks wrong (Windows on Windows on the Current should work IMHO) 11 | * May be `AcceptAllLineEndings`? 12 | ## GroupCollection should implement IReadOnlyDictionary interface to align with its Dictionary-Type Usage 13 | 14 | **Approved** | [#corefx/23262](https://github.com/dotnet/corefx/issues/23262#issuecomment-392866863) | [Video](https://www.youtube.com/watch?v=ZHKLi8qWTCs&t=0h10m20s) 15 | 16 | Looks good. 17 | 18 | * We should also implement IDictionary as the BCL exposes the notion of read-onlyness as a mode (`IsReadOnly` returns true) 19 | * Given that we implemen `IList<>`, should we also implement `IReadOnlyList<>`? 20 | ## Socket support for TCP_QUICKACK 21 | 22 | **Needs Work** | [#corefx/29917](https://github.com/dotnet/corefx/issues/29917) | [Video](https://www.youtube.com/watch?v=ZHKLi8qWTCs&t=0h21m40s) 23 | 24 | ## TypeInfo doesn't expose a parameterless constructor 25 | 26 | **Approved** | [#corefx/14334](https://github.com/dotnet/corefx/issues/14334) | [Video](https://www.youtube.com/watch?v=ZHKLi8qWTCs&t=0h27m53s) 27 | 28 | -------------------------------------------------------------------------------- /2018/06-12-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 6/12/2018 2 | 3 | ## Make it easy for large StringBuilders to be written to TextWriters without making a large string 4 | 5 | **Approved** | [#corefx/30048](https://github.com/dotnet/corefx/issues/30048#issuecomment-396671773) | [Video](https://www.youtube.com/watch?v=CcocbzCjCxM&t=-2h-2m-53s) 6 | 7 | Looks good as proposed. A few minor suggestions: 8 | 9 | ```csharp 10 | class TextWriter { 11 | public virtual void Write(StringBuilder value); 12 | public virtual void WriteLine(StringBuilder value); 13 | public virtual Task WriteAsync(StringBuilder value, CancelationToken cancellationToken=default); 14 | public virtual Task WriteLineAsync(StringBuilder value, CancelationToken cancellationToken=default); 15 | } 16 | ``` 17 | 18 | We should consider special casing `Write(object)` to check for `StringBuilder` to avoid going through `StringBuilder.ToString()`. Althought it seems we aren't special casing any other types but `IFormattable` today. 19 | ## Allow Dictionary.Remove during enumeration 20 | 21 | **Approved** | [#corefx/29979](https://github.com/dotnet/corefx/issues/29979) | [Video](https://www.youtube.com/watch?v=CcocbzCjCxM&t=0h27m56s) 22 | 23 | ## new System.ComponentModel.VersionConverter class 24 | 25 | **Approved** | [#corefx/28594](https://github.com/dotnet/corefx/issues/28594#issuecomment-396690545) | [Video](https://www.youtube.com/watch?v=CcocbzCjCxM&t=1h19m29s) 26 | 27 | Looks good as proposed. 28 | -------------------------------------------------------------------------------- /2018/12-11-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 12/11/2018 2 | 3 | ## Random-access document model for JSON (JsonDocument) 4 | 5 | **Approved** | [#corefx/33968](https://github.com/dotnet/corefx/issues/33968) | [Video](https://www.youtube.com/watch?v=6QOv4c1O6ME&t=-17h-46m-38s) 6 | 7 | -------------------------------------------------------------------------------- /2018/Hardware-Intrinsics-Intel/HWIntrinsicAPIReview.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/apireviews/094ecb4784024d96cf3079b2dadfcbd45d9f6ed1/2018/Hardware-Intrinsics-Intel/HWIntrinsicAPIReview.pptx -------------------------------------------------------------------------------- /2018/IAsyncEnumerable/README.md: -------------------------------------------------------------------------------- 1 | # IAsyncEnumerable 2 | 3 | Status: **Needs more discussions** | 4 | [Video](https://www.youtube.com/watch?v=XgC0oV29OqM) 5 | 6 | * Issues 7 | - [#32640: IAsyncEnumerable & IAsyncDisposable](https://github.com/dotnet/corefx/issues/32640) 8 | - [#32664: ManualResetValueTaskSource](https://github.com/dotnet/corefx/issues/32664) 9 | - [#32684: IAsyncEnumerable.ConfigureAwait ](https://github.com/dotnet/corefx/issues/32684) 10 | - [#32665: Implement IAsyncDisposable in the BCL](https://github.com/dotnet/corefx/issues/32665) 11 | 12 | * We believe we need an `IAsyncDisposable` in order to model releasing resources 13 | in an asynchronous fashion, which is often needed, for example to close file 14 | handles. The compiler will use this in order to model `try/finally` in 15 | iterators. 16 | 17 | ## Notes 18 | 19 | * We're using `ValueTask` and `ValueTask` to improve performance in cases 20 | where the operation completes asynchronously. 21 | * `ConfigureAwait` is supported with some machinery in `S.R.CS`. The support is 22 | the same 23 | - We'll add an extension method to S.T.Task.TaskExtension 24 | * It should be OK for a type to only implement `IAsyncDisposable` if the type 25 | can only be used in an async context. 26 | 27 | ## Next actions 28 | 29 | * We need to talk more about cancellation 30 | - Right now, it's ambient state that the implementer has to store on the 31 | the instance that implements `IAsyncEnumerable`, which doesn't seem 32 | right as the state belongs to the enumerator, not the enumerable. Which 33 | means single use enumerable is fine, multi-use isn't. 34 | - The problem is there no easy way to pass it 35 | -------------------------------------------------------------------------------- /2018/Microsoft.ML.Core/Microsoft.ML_Dependencies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/apireviews/094ecb4784024d96cf3079b2dadfcbd45d9f6ed1/2018/Microsoft.ML.Core/Microsoft.ML_Dependencies.png -------------------------------------------------------------------------------- /2018/Microsoft.ML.Core/Session3.md: -------------------------------------------------------------------------------- 1 | # Microsoft.ML 2 | 3 | Status: **Needs more work** 4 | 5 | ## Notes 6 | 7 | * Tom is working on internalizing large chunks of `Microsoft.ML.Core` 8 | * We didn't do much today as we didn't have quorum. But we did agree on a set of 9 | next steps: 10 | 1. `Microsoft.ML.Core` (wrapping up) 11 | - `IEstimator` 12 | - `ITransformer` 13 | - `IDataReader` 14 | - `IDataReaderEstimator` 15 | - `SchemaShape` 16 | - `MLContext` 17 | - `IHostEnvironment` 18 | - `IHost` 19 | 2. Typical examples of implementations of common abstractions: 20 | - "typical" transformer (select columns, normalizer, pca, sdca, text loader) 21 | - "typical" trainer 22 | - This batch should get close to under to understand most of the basic samples 23 | -------------------------------------------------------------------------------- /2018/System.IO.Enumerations/README.md: -------------------------------------------------------------------------------- 1 | # System.IO.Enumerations 2 | 3 | Status: **Needs more work** | 4 | [API](System.IO.FileSystem.md) | 5 | [Video](https://www.youtube.com/watch?v=osuw4V-H8hA) 6 | 7 | ## Notes 8 | 9 | * Most notes are in the [API reference](System.IO.FileSystem.md). 10 | * High-level: 11 | - Does this assembly need to be made available to .NET Framework OOB? 12 | - We should move the enumeration feature to a nested namespace 13 | `System.IO.Enumeration`. 14 | - We should rename `FindData` to `FileSystemEntry` 15 | - We should try to remove the user supplied state from `FindData` and 16 | make it instead part of the callback signature. 17 | - Calling the `FindEnumerable` is quite busy due to the 18 | fact that everything is a delegate. Consider making them virtual methods 19 | and let users derive from `FindEnumerable`. 20 | - Collapse the static types holding the matchers into a single type. 21 | 22 | ## Requirements from CPS/MSBuild 23 | 24 | * Required for CPS and benefit for MSBuild: `BeginDirectoryEnumeration` / 25 | `EndDirectoryEnumeration` callbacks. 26 | * Benefit for MSBuild: enumeration overload accepting a `RecurseDirectory` 27 | callback that also returns a new state object to use for that subtree (either 28 | this or we'll have to use a global dictionary in the global state object to 29 | keep the state per subtree). -------------------------------------------------------------------------------- /2018/System.IO.Enumerations2/README.md: -------------------------------------------------------------------------------- 1 | # System.IO.Enumerations 2 | 3 | Status: **Approved with Feedback** | 4 | [API](System.IO.Enumeration.md) 5 | 6 | ## Notes 7 | 8 | - `EnumerationOptions` 9 | - Check whether we can use a different word than `Inaccessible` 10 | - `Recurse` should be `EnumerateSubdirectories` 11 | - `Default` and `default` don't necessarily have the same values, which 12 | might be confusing. 13 | - We should make it a class, it solves most problems. And for allocations, 14 | it should be a non-issue as the options themselves are static and don't 15 | need to be created per enumeration. 16 | -------------------------------------------------------------------------------- /2018/System.IO.Pipelines/System.IO.Pipelines.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/apireviews/094ecb4784024d96cf3079b2dadfcbd45d9f6ed1/2018/System.IO.Pipelines/System.IO.Pipelines.pptx -------------------------------------------------------------------------------- /2018/System.IO.Pipelines_2/System.IO.Pipelines2.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dotnet/apireviews/094ecb4784024d96cf3079b2dadfcbd45d9f6ed1/2018/System.IO.Pipelines_2/System.IO.Pipelines2.pptx -------------------------------------------------------------------------------- /2018/System.Text.Json.Utf8JsonWriter/README.md: -------------------------------------------------------------------------------- 1 | # System.Text.Json.Utf8JsonWriter 2 | 3 | Status: **Approved with Feedback** | 4 | [API Ref](https://github.com/dotnet/corefx/issues/33552) 5 | [Video](https://www.youtube.com/watch?v=jFIS4v2H_4s) 6 | 7 | ## Notes 8 | 9 | * `JsonWriterState` 10 | - Should the state be nested under the writer class? 11 | - Should the properties be internal? Nobody will read them but the writer. 12 | * `JsonWriterOptions` 13 | - We don't expose indent-level customizations (2 spaces vs 4 spaces vs 1 tab) 14 | - We can add it later if needed 15 | * Validation 16 | - We should give people a way to disable validation of property names as 17 | that's fairly expensive. 18 | - We may want to split validation into escaping and structure validation 19 | - In fact, we should probably not consider escaping part of the validation. 20 | - Instead of failing, the writer should auto-escape. That means we should 21 | have `SkipValidation` (which only handles structure) and 22 | `EncodePropertyNames`. 23 | - If `EncodePropertyNames` is off, we should write the property as-is, no 24 | validation. 25 | * We should rename the `WriteValue` methods to match the `WriteNumber`, 26 | `WriteString` etc. methods. 27 | - However, we should suffix them with `Value`, so it would be 28 | `WriteNumberValue` and `WriteStringValue`. 29 | * `WriteBytesUnchecked` needs more thought -------------------------------------------------------------------------------- /2018/System.Text.Utf8Char/README.md: -------------------------------------------------------------------------------- 1 | # System.Text.Utf8Char 2 | 3 | Status: **Needs more work** | 4 | [API Ref](https://github.com/dotnet/corefx/issues/34094) 5 | [Video](https://www.youtube.com/watch?v=TRKTNxVSzoA) 6 | 7 | ## JSON Source Package 8 | 9 | We discussed several names. Best candidates right now: 10 | 11 | * `Microsoft.Bcl.Json.Sources` 12 | * `Microsoft.Text.Json.Sources` 13 | 14 | ## Utf8Char 15 | 16 | * We need to think about what a down-level port would look like. I don't believe 17 | we can rev `System.Memory` package without breaking compat. 18 | * `ReadOnlySpan` isn't convenient for UTF8 text 19 | - We don't *really* use `ReadOnlySpan` for text in public APIs. We 20 | have a few overloads, but they are mostly in buffer land or on brand new 21 | APIs. 22 | * While there is some validation for individual values, this type doesn't in 23 | itself guaranteeing that any `ReadOnlySpan` is a valid UTF8 string 24 | (for example, it can break multi-byte sequences apart). So if UTF8 text 25 | well-formedness is critical, users still have validate. The primary benefit of 26 | having the type is to express to callers of an API what the data is supposed 27 | to represent. We can also improve debugging by making `ToString()` meaningful. 28 | * This feature is useful without `Utf8String`. However, the feature is much less 29 | compelling without compiler support for UTF8 literals. 30 | * `IsWellFormedSequence()` doesn't seem super useful. We'd want to perform 31 | validation as part of transcoding/fixup. If people don't care about the 32 | result, they can underscore the output parameter. 33 | -------------------------------------------------------------------------------- /2018/System.Utf8String/Session2.md: -------------------------------------------------------------------------------- 1 | # UTF8 String (Session 2) 2 | 3 | Status: **Needs more work** | 4 | [API](https://github.com/dotnet/corefx/issues/30503) | 5 | 6 | ## UnicodeScalar 7 | 8 | * `String.GetScalarAt(): UnicodeScalar` 9 | - Should be a static on `UnicodeScalar`, as it's tricky 10 | * `String.GetScalars()` should be an instance `String` 11 | * `ToUtfXxx()` should use the `Try`-pattern and should be named `TryEncode` 12 | 13 | * `UnicodeScalar` 14 | - The tuples should be an a struct called `UnicodeScalarPosition` 15 | - This struct should have two deconstruct methods 16 | - `(UnicodeScalar, int StartIndex)` 17 | - `(UnicodeScalar, int StartIndex, int Length)` 18 | - We don't expose a nullable `UnicodeScalar`, instead there is a bool on the struct `WasReplaced` 19 | - People that use deconstruction should can use `GetScalarAt()` -- they know the start index 20 | 21 | * Replace `UnicodeScalar` with `Rune` 22 | * All types will go into `System.Text` -------------------------------------------------------------------------------- /2019/01-08-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 1/8/2019 2 | 3 | ## Native Library Loader API 4 | 5 | **Approved** | [#corefx/32015](https://github.com/dotnet/corefx/issues/32015) | [Video](https://www.youtube.com/watch?v=e1nUhoqMJn8&t=0h0m0s) 6 | 7 | ## IAsyncEnumerable.WithCancellation extension method 8 | 9 | **Approved** | [#corefx/33909](https://github.com/dotnet/corefx/issues/33909) | [Video](https://www.youtube.com/watch?v=e1nUhoqMJn8&t=0h22m27s) 10 | 11 | ## PlaceholderText API addition to TextBox control 12 | 13 | **Approved** | [#winforms/134](https://github.com/dotnet/winforms/issues/134#issuecomment-452412351) | [Video](https://www.youtube.com/watch?v=e1nUhoqMJn8&t=0h41m18s) 14 | 15 | Presumably `PlaceholderText` will behave like `Text` with respect to handling `null` vs `string.Empty`? 16 | ## string.Concat(ReadOnlySpan, ...) 17 | 18 | **Approved** | [#corefx/34330](https://github.com/dotnet/corefx/issues/34330) | [Video](https://www.youtube.com/watch?v=e1nUhoqMJn8&t=0h45m2s) 19 | 20 | -------------------------------------------------------------------------------- /2019/02-07-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 2/7/2019 2 | 3 | ## PipeReader and PipeWriter implementations over a Stream 4 | 5 | **Approved** | [#corefx/27246](https://github.com/dotnet/corefx/issues/27246#issuecomment-461567272) | [Video](https://www.youtube.com/watch?v=9TSP4awoHuI&t=-14h-40m-2s) 6 | 7 | Notes are here: https://github.com/dotnet/apireviews/pull/90 8 | -------------------------------------------------------------------------------- /2019/02-22-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 2/22/2019 2 | 3 | ## Complex Rune enumeration over spans of UTF-16 and UTF-8 text 4 | 5 | **Approved** | [#corefx/34826](https://github.com/dotnet/corefx/issues/34826#issuecomment-466507394) | [Video](https://www.youtube.com/watch?v=0ReXmy2bQvQ&t=0h0m0s) 6 | 7 | * `RunPosition` 8 | - We considered swapping `rune` and `startIndex` in the deconstruct method 9 | to match Go, but decided against it because we also expose `length` and 10 | the order `startIndex`, `rune`, `length` would be very weird. 11 | - We should have a constructor that sets all four fields 12 | * `Rune` 13 | - We should move the enumerate methods to `RunePosition`, which allows 14 | making the names shorter 15 | 16 | ```C# 17 | public readonly struct RunPosition 18 | { 19 | public static Utf16Enumerator EnumerateUtf16(ReadOnlySpan span); 20 | public static Utf8Enumerator EnumerateUtf8(ReadOnlySpan span); 21 | 22 | public ref struct Utf8Enumerator; 23 | public ref struct Utf16Enumerator; 24 | } 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /2019/03-12-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/12/2019 2 | 3 | ## Add remove Range to sorted List 4 | 5 | **Rejected** | [#corefx/32987](https://github.com/dotnet/corefx/issues/32987#issuecomment-472132435) | [Video](https://www.youtube.com/watch?v=aaFcBs6cFqg&t=-1h-28m-59s) 6 | 7 | @hernot could you please update the issue to include a formal api proposal? I think it makes sense to have this API but we need to include Rationale and Usage. Once you've done that I can bring it over to API Review to get its approval and then implement it. 8 | 9 | Here is an example of an API Proposal: https://github.com/dotnet/corefx/issues/30953#issue-339950811 10 | -------------------------------------------------------------------------------- /2019/03-26-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/26/2019 2 | 3 | ## API proposal AssemblyLoadContext.ActiveForContextSensitiveReflection 4 | 5 | **Approved** | [#corefx/36236](https://github.com/dotnet/corefx/issues/36236#issuecomment-476796579) | [Video](https://www.youtube.com/watch?v=SNc-nABLZws&t=-17h-2m-8s) 6 | 7 | ```C# 8 | namespace System.Runtime.Loader 9 | { 10 | public partial class AssemblyLoadContext 11 | { 12 | public static AssemblyLoadContext CurrentContextualReflectionContext { get; } 13 | 14 | public ContextualReflectionScope EnterContextualReflection(); 15 | static public ContextualReflectionScope EnterContextualReflection(Assembly activating); 16 | 17 | [EditorBrowsable(Never)] 18 | public struct ContextualReflectionScope : IDisposable 19 | { 20 | } 21 | } 22 | } 23 | ``` 24 | ## AssemblyLoadContext .NET Core 3.0 improvements 25 | 26 | **Approved** | [#corefx/34791](https://github.com/dotnet/corefx/issues/34791#issuecomment-476796715) | [Video](https://www.youtube.com/watch?v=SNc-nABLZws&t=0h42m56s) 27 | 28 | * Replace `AssemblyLoadContext.Contexts` with `AssemblyLoadContext.All` to make `foreach` easier to read 29 | * Other than that, looks good as proposed 30 | 31 | -------------------------------------------------------------------------------- /2019/03-28-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 3/28/2019 2 | 3 | ## Build a JsonDocument from an already positioned Utf8JsonReader 4 | 5 | **Approved** | [#corefx/36148](https://github.com/dotnet/corefx/issues/36148#issuecomment-477696501) | [Video](https://www.youtube.com/watch?v=_Uq0qG3KAzg&t=0h0m0s) 6 | 7 | We should have a consistent naming with the `Parse` methods. We suggest to go with `ParseValue`: 8 | 9 | ```C# 10 | public partial class JsonDocument 11 | { 12 | public static bool TryParseValue(ref Utf8JsonReader reader, out JsonDocument document); 13 | public static JsonDocument ParseValue(ref Utf8JsonReader reader); 14 | } 15 | ``` 16 | ## Utf8JsonWriter and JsonElement, redux 17 | 18 | **Approved** | [#corefx/36153](https://github.com/dotnet/corefx/issues/36153#issuecomment-477705735) | [Video](https://www.youtube.com/watch?v=_Uq0qG3KAzg&t=0h21m30s) 19 | 20 | Usability wise, this proposal seems less than ideal. Not sure I personal buy the layering argument, but if we feel strongly we should rename the method and swap the arguments: 21 | 22 | ```C# 23 | public partial struct JsonElement 24 | { 25 | public void WriteAsValue(ref Utf8JsonWriter writer); 26 | public void WriteAsProperty(ReadOnlySpan propertyName, ref Utf8JsonWriter writer); 27 | public void WriteAsProperty(ReadOnlySpan utf8PropertyName, ref Utf8JsonWriter writer); 28 | } 29 | ``` 30 | -------------------------------------------------------------------------------- /2019/04-09-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/9/2019 2 | 3 | ## Making the info GC.GetMemoryInfo provides public 4 | 5 | **Approved** | [#corefx/34631](https://github.com/dotnet/corefx/issues/34631#issuecomment-481358549) | [Video](https://www.youtube.com/watch?v=BgF2UKtQjWA&t=0h0m0s) 6 | 7 | Looks good! Comments from the review: 8 | 9 | * `GCMemoryInfo` should be marked readonly 10 | * We should suffix all members with `Bytes` 11 | * We should normalzie all values into bytes 12 | * `HighMemoryLoadThreshold` should return `long` and be named `HighMemoryLoadThresholdBytes` 13 | * `MemoryLoad` should return `long` and be named `MemoryLoadBytes` 14 | * `Fragmentation` should be `FragmentedBytes` 15 | * `GetTotalAllocatedBytes()` should default the parameter to `false` 16 | ## Revisit Index/Range API requirements 17 | 18 | **Approved** | [#corefx/35972](https://github.com/dotnet/corefx/issues/35972) | [Video](https://www.youtube.com/watch?v=BgF2UKtQjWA&t=0h37m15s) 19 | 20 | ## HWIntrinsics API Proposal: VPMOVZXBD and friends need pointer-based overloads 21 | 22 | **Approved** | [#corefx/35768](https://github.com/dotnet/corefx/issues/35768) | [Video](https://www.youtube.com/watch?v=BgF2UKtQjWA&t=0h49m27s) 23 | 24 | ## Take another look at the `COMISS` and `UCOMISS` hardware intrinisics 25 | 26 | **Approved** | [#corefx/34881](https://github.com/dotnet/corefx/issues/34881#issuecomment-481371966) | [Video](https://www.youtube.com/watch?v=BgF2UKtQjWA&t=1h9m5s) 27 | 28 | Works for us. 29 | ## Clarity and control on a JsonDocument lifetime 30 | 31 | **Approved** | [#corefx/36152](https://github.com/dotnet/corefx/issues/36152#issuecomment-481375975) | [Video](https://www.youtube.com/watch?v=BgF2UKtQjWA&t=1h13m43s) 32 | 33 | Let's remove `IsPersistable` for now and make `Clone()` a no-op. This way, callers can always call `Clone()` before storing it. 34 | -------------------------------------------------------------------------------- /2019/04-16-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/16/2019 2 | 3 | ## Json serializer support for a property name policy 4 | 5 | **Approved** | [#corefx/36351](https://github.com/dotnet/corefx/issues/36351#issuecomment-483773918) | [Video](https://www.youtube.com/watch?v=M1Hc0qrL_Oo&t=-15h-41m-49s) 6 | 7 | * `JsonNamePolicy` should have a protected constructor 8 | * For `PropertyNameCaseInsensitive` we need to think about how we match names (comparisons and normalization aren't yielding the same results). @GrabYourPitchforks and @steveharter should chat. 9 | * The `ConvertName()` method produces strings but that seems fine because they are going to be cached. 10 | * The code calling `ConvertName()` should disallow `null` values, but must accept empty strings. Likewise, `ConvertName()` should be documented as disallowing `null` values but as accepting empty strings. 11 | 12 | 13 | ## Evolving EventCounter API 14 | 15 | **Approved** | [#corefx/36129](https://github.com/dotnet/corefx/issues/36129#issuecomment-483778953) | [Video](https://www.youtube.com/watch?v=M1Hc0qrL_Oo&t=0h38m51s) 16 | 17 | The APIs were exposed via https://github.com/dotnet/coreclr/pull/23808 and all the changes discussed during the API review were implemented. 18 | ## Add missing async methods in System.Data.Common and implement IAsyncDisposable 19 | 20 | **Approved** | [#corefx/35012](https://github.com/dotnet/corefx/issues/35012#issuecomment-483779404) | [Video](https://www.youtube.com/watch?v=M1Hc0qrL_Oo&t=0h48m31s) 21 | 22 | @roji @divega 23 | 24 | * What does it mean to cancel `CancelAsync()`? Also, how is calling `CancelAsync()` different from cancelling the cancellation token that was passed to the operation that `CancelAsync()` would cancel? 25 | * Is there a reason why `CloseAsync()` returns `ValueTask`? It doesn't seem to on the perf critical path? 26 | * Should we really add `DbDataReader.CloseAsync()` seems odd to add an API that is known to be not useful. 27 | -------------------------------------------------------------------------------- /2019/04-23-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/23/2019 2 | 3 | ## System.Resources API additions for non-primitive objects 4 | 5 | **Approved** | [#corefx/37041](https://github.com/dotnet/corefx/issues/37041#issuecomment-485934735) | [Video](https://www.youtube.com/watch?v=5heMq4U2ek8&t=0h-12m-42s) 6 | 7 | Looks good: 8 | 9 | * Seal the types and make the protected members private or remove them 10 | * `closeAfterWrite` should be defaulted 11 | * Remove the `TypeNameConverter`, assuming MSBuild doens't need it 12 | 13 | -------------------------------------------------------------------------------- /2019/04-25-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/25/2019 2 | 3 | ## Should Utf8JsonReader expose TokenStartIndex? 4 | 5 | **Approved** | [#corefx/33967](https://github.com/dotnet/corefx/issues/33967) | [Video](https://www.youtube.com/watch?v=byHU4Ube7fg&t=0h0m0s) 6 | 7 | -------------------------------------------------------------------------------- /2019/04-30-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 4/30/2019 2 | 3 | ## Implement global proxy configuration for HttpClient 4 | 5 | **Approved** | [#corefx/36553](https://github.com/dotnet/corefx/issues/36553) | [Video](https://www.youtube.com/watch?v=jQjHzmAomLE&t=0h0m0s) 6 | 7 | ## HttpClient.DefaultRequestVersion 8 | 9 | **Approved** | [#corefx/37224](https://github.com/dotnet/corefx/issues/37224) | [Video](https://www.youtube.com/watch?v=jQjHzmAomLE&t=0h34m19s) 10 | 11 | ## add Netlink, Packet and Can to AddressFamily and ProtocolFamily enum 12 | 13 | **Approved** | [#corefx/35143](https://github.com/dotnet/corefx/issues/35143#issuecomment-488053098) | [Video](https://www.youtube.com/watch?v=jQjHzmAomLE&t=0h47m46s) 14 | 15 | We should rename `Can` to `ControllerAreaNetwork` to avoid confusion with it being a word in English. `Packet` seems generic, but we can't think of a better, so it's fine. 16 | -------------------------------------------------------------------------------- /2019/05-14-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 5/14/2019 2 | 3 | ## Add missing async methods in System.Data.Common and implement IAsyncDisposable 4 | 5 | **Approved** | [#corefx/35012](https://github.com/dotnet/corefx/issues/35012#issuecomment-492336595) | [Video](https://www.youtube.com/watch?v=cP2E0gSe8is&t=0h0m0s) 6 | 7 | * To follow the existing pattern, `BeginConnection` should be non-virtual and we should add a single BeginDbConnectionAsync that takes an isolation level 8 | * Consider for reach API whether you want `Task` or `ValueTask` 9 | 10 | ## Add missing feature detection properties to DbProviderFactory 11 | 12 | **Approved** | [#corefx/35564](https://github.com/dotnet/corefx/issues/35564) | [Video](https://www.youtube.com/watch?v=cP2E0gSe8is&t=0h31m15s) 13 | 14 | ## New System.Data.Common batching API 15 | 16 | **Approved** | [#corefx/35135](https://github.com/dotnet/corefx/issues/35135#issuecomment-492347155) | [Video](https://www.youtube.com/watch?v=cP2E0gSe8is&t=0h36m11s) 17 | 18 | * Have you considered making `DbBatch` extend `DbCommand`? 19 | * `IList` should probably be `DbBatchCollection : Collection` 20 | * Validate this against multiple providers; shipping a new concept is best validated by having multiple implementations. 21 | -------------------------------------------------------------------------------- /2019/06-05-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 6/5/2019 2 | 3 | ## Add protected SecurityDescriptor to ObjectSecurity 4 | 5 | **Approved** | [#corefx/35993](https://github.com/dotnet/corefx/issues/35993) | [Video](https://www.youtube.com/watch?v=CJLCnj82kSA&t=-2h-47m-50s) 6 | 7 | -------------------------------------------------------------------------------- /2019/06-11-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 6/11/2019 2 | 3 | ## Add a per Activity API to set the default ActivityIdFormat 4 | 5 | **Approved** | [#corefx/36999](https://github.com/dotnet/corefx/issues/36999#issuecomment-500941214) | [Video](https://www.youtube.com/watch?v=XWSjh7qkHkg&t=-9h-52m-44s) 6 | 7 | Personally, I'd prefer this being a property but it seems folks on the thread have strong opinion that this should be method, which is also accetable. 8 | 9 | If that's a method it should be called `SetIdFormat`. 10 | 11 | ```C# 12 | public void SetIdFormat(ActivityIdFormat idFormat); 13 | ``` 14 | ## Add DisplayUnits property to EventCounter and friends 15 | 16 | **Approved** | [#corefx/37510](https://github.com/dotnet/corefx/issues/37510#issuecomment-500943921) | [Video](https://www.youtube.com/watch?v=XWSjh7qkHkg&t=0h16m14s) 17 | 18 | Looks like we're OK with this. The default return value would be `string.Empty`. 19 | 20 | ```C# 21 | namespace System.Diagnostics.Tracing 22 | { 23 | public partial abstract class DiagnosticCounter 24 | { 25 | public string DisplayUnits { get; } 26 | } 27 | } 28 | ``` 29 | ## [API review] Add Timers.Count 30 | 31 | **Approved** | [#corefx/38422](https://github.com/dotnet/corefx/issues/38422#issuecomment-500951300) | [Video](https://www.youtube.com/watch?v=XWSjh7qkHkg&t=0h23m2s) 32 | 33 | After long discussion, we agreed on: 34 | 35 | ```C# 36 | namespace System.Threading 37 | { 38 | public partial class Timer 39 | { 40 | public static long ActiveCount { get; } 41 | } 42 | } 43 | ``` 44 | ## Add NullableAttribute 45 | 46 | **Rejected** | [#corefx/36222](https://github.com/dotnet/corefx/issues/36222#issuecomment-500957428) | [Video](https://www.youtube.com/watch?v=XWSjh7qkHkg&t=0h42m59s) 47 | 48 | We decided to keep doing the code spit because 49 | 50 | 1. Any code reasoning about the attribute has to assume that attribute is emitted, so you can't optimize the path. 51 | 2. The size is small 52 | -------------------------------------------------------------------------------- /2019/06-25-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 6/25/2019 2 | 3 | ## Add hard limit to MemoryInfo API 4 | 5 | **Approved** | [#corefx/38821](https://github.com/dotnet/corefx/issues/38821#issuecomment-505662309) | [Video](https://www.youtube.com/watch?v=1k-niYNMo4w&t=0h0m0s) 6 | 7 | Looks good as proposed. 8 | -------------------------------------------------------------------------------- /2019/07-16-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 7/16/2019 2 | 3 | ## Add Encode(ReadOnlySpan) method to TextEncoder for performance 4 | 5 | **Approved** | [#corefx/39523](https://github.com/dotnet/corefx/issues/39523) | [Video](https://www.youtube.com/watch?v=JdaQ2RP2tqM&t=0h-33m-56s) 6 | 7 | ## Deprecate PipeWriter.OnReaderCompleted 8 | 9 | **Approved** | [#corefx/38362](https://github.com/dotnet/corefx/issues/38362) | [Video](https://www.youtube.com/watch?v=JdaQ2RP2tqM&t=0h10m49s) 10 | 11 | ## (System.Numerics) Cross Product for Vector2 and Vector4 12 | 13 | **Approved** | [#corefx/35434](https://github.com/dotnet/corefx/issues/35434#issuecomment-511933825) | [Video](https://www.youtube.com/watch?v=JdaQ2RP2tqM&t=0h32m15s) 14 | 15 | Generally this seems like a reasonable API. The only sticking point is that it seems undefined and only DirectX exposes this operation for `Vector2` and `Vector4`. This may be odd, but doesn't seem to be a blocker to us. 16 | ## Add StringBuilder(Char) 17 | 18 | **Rejected** | [#corefx/17745](https://github.com/dotnet/corefx/issues/17745#issuecomment-511942559) | [Video](https://www.youtube.com/watch?v=JdaQ2RP2tqM&t=1h28m39s) 19 | 20 | So after discussion we think it's not worth it. It's been 20 years and this isn't a widespread enough problem. 21 | -------------------------------------------------------------------------------- /2019/08-27-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 8/27/2019 2 | 3 | ## API Change Request: Expression support for ref and readonly ref types 4 | 5 | **Needs Work** | [#corefx/26772](https://github.com/dotnet/corefx/issues/26772#issuecomment-525417923) | [Video](https://www.youtube.com/watch?v=maDBdlZfCGA&t=0h0m0s) 6 | 7 | There is a general item on the compiler team to figure out how expression trees are going to be evolved (and if). 8 | ## Add a ValueStringBuilder 9 | 10 | **Needs Work** | [#corefx/28379](https://github.com/dotnet/corefx/issues/28379#issuecomment-525424732) | [Video](https://www.youtube.com/watch?v=maDBdlZfCGA&t=0h5m44s) 11 | 12 | We believe that without a feature that forces consumers to pass value types by reference (either language feature or in-box analyzer) this will cause unreliable applications due to corruption of the array pool when accidental copies are being made. 13 | 14 | @JeremyKuhne do you want to drive that discussion with @jaredpar? 15 | ## Add Path.RemoveRelativeSegments Api 16 | 17 | **Approved** | [#corefx/30701](https://github.com/dotnet/corefx/issues/30701#issuecomment-525429074) | [Video](https://www.youtube.com/watch?v=maDBdlZfCGA&t=0h24m8s) 18 | 19 | @Anipik you mentioned you don't want to use `GetFullPath()` because you want to preserve the relativeness. What's the scenario for this API then? Functionally, it seems `GetFullPath()` or keeping the path with the dots seems both OK. 20 | ## List.AsSpan() 21 | 22 | **Needs Work** | [#corefx/19814](https://github.com/dotnet/corefx/issues/19814#issuecomment-525432693) | [Video](https://www.youtube.com/watch?v=maDBdlZfCGA&t=0h34m56s) 23 | 24 | Let's start with no :) 25 | -------------------------------------------------------------------------------- /2019/09-17-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 9/17/2019 2 | 3 | ## Add UnderScoreCase support for System.Text.Json 4 | 5 | **Approved** | [#corefx/39564](https://github.com/dotnet/corefx/issues/39564#issuecomment-532341171) | [Video](https://www.youtube.com/watch?v=6Kd92ScY3gM&t=0h0m0s) 6 | 7 | Makes sense. We also considered others (such as kebap casing) but it seems we should defer that until someone actually needs that. 8 | ## Add mechanism to handle circular references when serializing 9 | 10 | **Needs Work** | [#corefx/41002](https://github.com/dotnet/corefx/issues/41002#issuecomment-532349735) | [Video](https://www.youtube.com/watch?v=6Kd92ScY3gM&t=0h9m39s) 11 | 12 | We seem to lean towards not having `Ignore` -- it results in payloads that nobody can reason about. The right fix for those scenarios to modify the C# types to exclude back pointers from serialization. 13 | 14 | We'd like to see more detailed spec for the behavior, specifically error cases. 15 | ## HashAlgorithmName.FromOid 16 | 17 | **Approved** | [#corefx/40558](https://github.com/dotnet/corefx/issues/40558) | [Video](https://www.youtube.com/watch?v=6Kd92ScY3gM&t=0h32m28s) 18 | 19 | ## Add RemoveIfValue to ConcurrentDictionary 20 | 21 | **Approved** | [#corefx/24770](https://github.com/dotnet/corefx/issues/24770#issuecomment-532361229) | [Video](https://www.youtube.com/watch?v=6Kd92ScY3gM&t=0h45m49s) 22 | 23 | If we're adding it, it should be `TryRemove(KV)`. 24 | -------------------------------------------------------------------------------- /2019/10-08-dataframe/README.md: -------------------------------------------------------------------------------- 1 | # Data Frame Notes 2 | 3 | **Needs more work** | 4 | [API](Microsoft.Data.DataFrame.md) | 5 | [Video](https://youtu.be/FAaw4uaYvgY?t=114) 6 | 7 | ## General notes 8 | 9 | * .NET version of Pandas 10 | * Two primary scenarios 11 | - Spark.NET 12 | - Interactive exploration (Jupyter Notebook) 13 | * `DataFrame` is to `IDataView` as 14 | `List` is to `IEnumerable` 15 | * Would it be possible to align the `DataFrame` API more with `IDataView` so 16 | that they feel like orthogonal features of the same technology, rather than 17 | two competing technologies. 18 | * Equality operators seem problematic because it messes with people's intuition 19 | - This applies to `<`, `<=`, `>`, `>=` 20 | - Should we talk to C# about more operators? 21 | - This sadly means that certain compact notations aren't expressible 22 | 23 | ## BaseColumn 24 | 25 | * Shouldn't use the `Base` prefix. What about `DataFrameColumn`? 26 | 27 | ## DataFrame 28 | 29 | * `ColumnCount` and `Columns.Count` seem odd? Presumably the are both `O(1)`? 30 | * You should probably not return `IList` for columns 31 | - `ReadOnlyCollection` or your own custom type seems more 32 | appropriate 33 | * The indexers seems inconsistent 34 | - The `IEnumerable` should be of `long` 35 | - The `BaseColumn` has surprising behavior (selects rows) 36 | - The `row`, `column` indexer seems at odds with the one takes 37 | `IEnumerable<>` 38 | - Maybe we need better parameter names? 39 | - One issue seems to be related to range-based indexing. `Range` doesn't 40 | work because it's only up to `int.MaxValue` rows (rows are long here) 41 | 42 | ## Next steps 43 | 44 | * We should close on the package name and namespace name 45 | * There are some concerns that this API shape is very specific to Apache Arrow. 46 | If that's the case we should not put it in a general purpose namespace 47 | - Examples: stores data in colums, rather than rows, `RecordBatch` -------------------------------------------------------------------------------- /2019/11-05-dataframe/README.md: -------------------------------------------------------------------------------- 1 | # Data Frame Notes 2 | 3 | **Needs more work** | 4 | [API](Microsoft.Data.DataFrame.md) | 5 | [Video](https://www.youtube.com/watch?v=s1R5GRTVb48) | 6 | [Demo](Microsoft.Data.DataFrame-Demo.md) 7 | 8 | ## Demo notes 9 | 10 | * `StringDataFrameColumn` 11 | - `ApplyElementWise` looks odd, especially 12 | 13 | ## General notes 14 | 15 | * `DataFrame` 16 | - Factor out the `RecordBatch` dependency 17 | - `LoadCsv` should have an overload that is short as people have trouble with optional values 18 | - `LoadCsv` should also take an encoding 19 | - We shouldn't define operator overloads that always throw (e.g. `+(DataFrame df, bool value)`) 20 | 21 | * Namespace & package name 22 | - `Microsoft.Data.Analysis` 23 | - Core stuff 24 | - `DataFrame` 25 | - Other stuff 26 | - `Microsoft.Data.Analysis.Arrow` 27 | - Arrow dependency 28 | -------------------------------------------------------------------------------- /2019/12-17-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 12/17/2019 2 | 3 | ## MemoryMarshal.GetRawArrayData 4 | 5 | **Approved** | [#corefx/36133](https://github.com/dotnet/corefx/issues/36133#issuecomment-566723424) | [Video](https://www.youtube.com/watch?v=VRTCAkk7wKU&t=0h0m0s) 6 | 7 | We considered this: 8 | 9 | ```C# 10 | namespace System.Runtime.CompilerServices 11 | { 12 | public static class Unsafe 13 | { 14 | public static ref T GetRawArrayRef(ref T source); 15 | } 16 | } 17 | ``` 18 | 19 | but we'd prefer this: 20 | 21 | ```C# 22 | namespace System.Runtime.InteropServices 23 | { 24 | public static class MemoryMarshal 25 | { 26 | public static ref T GetReference(T[] array); 27 | } 28 | } 29 | ``` 30 | 31 | (Please not that's OK because the existing `GetReference()` method don't bind for arrays due to an ambiguous match, so the caller had to add a cast.) 32 | ## API request : CompressionLevel.Highest 33 | 34 | **Approved** | [#corefx/36348](https://github.com/dotnet/corefx/issues/36348#issuecomment-566725990) | [Video](https://www.youtube.com/watch?v=VRTCAkk7wKU&t=1h49m9s) 35 | 36 | * We prefer `SmallestSize` to make it more clear what the API does (`Highest` or `Best` seem ambiguous with `Optimal`). 37 | 38 | ```C# 39 | namespace System.IO.Compression 40 | { 41 | public partial enum CompressionLevel 42 | { 43 | SmallestSize 44 | 45 | // Existing: 46 | // Fastest, 47 | // NoCompression, 48 | // Optimal 49 | } 50 | } 51 | ``` 52 | -------------------------------------------------------------------------------- /2019/System.Buffers.IBufferWriter/README.md: -------------------------------------------------------------------------------- 1 | # IBufferWriter 2 | 3 | Status: **Approved with feedback** | 4 | [API Ref](https://github.com/dotnet/corefx/issues/34894) | 5 | [Video](https://www.youtube.com/watch?v=MXeuyhQ6g0k) 6 | 7 | ## Notes 8 | 9 | * The constructor shouldn't be hardcoded to a specific buffer size 10 | - Just make it two constructors where the one with no argument is documented 11 | as "some default size" 12 | * The `CopyTo` and `CopyToAsync` methods aren't very convenient to use, assuming 13 | the goal is to get the data to a stream. The reason being that the consumer is 14 | responsible to call them periodically to avoid buffering the entire data. 15 | Also, as the methods are currently implemented `CopyTo` really moves the data 16 | (i.e. clears the data from the `ArrayBufferWriter`. 17 | * Should we return `ValueTask` as opposed to `Task` 18 | * Should we seal the class? 19 | * `CopyTo` should be renamed to `MoveTo` or `CopyToAndClear` and 20 | `CopyToAndClearAsync` 21 | * Should we have a type like `StreamBufferWriter` that implements 22 | `IBufferWritter` and accepts a `Stream` to write to? That type could use 23 | `ArrayBufferWriter` and handle the periodic flushing. 24 | * `BytesCommitted` and `BytesWritten` are confusing 25 | - `BytesCommitted` -> `TotalBytesWritten` 26 | - `BytesWritten` -> `BytesWritten` 27 | * We don't expose the size of the buffer. We should add a property called 28 | `Capacity`, of type `int`. 29 | * We should consider exposing `BytesAvailable` and doc it as returning 30 | `Capacity - BytesWritten`. 31 | * Consider implementing the `IBufferWriter` APIs explicitly 32 | 33 | ### Follow-up 34 | 35 | * We should take another look at `BufferWriter`. We were hoping that the JSON 36 | APIs would drive its requirements, but we ended up bypassing it entirely. -------------------------------------------------------------------------------- /2019/System.IO.Pipelines/README.md: -------------------------------------------------------------------------------- 1 | # Adapter for System.IO.Pipelines 2 | 3 | Status: **Approved with Feedback** | 4 | [API Ref](https://github.com/dotnet/corefx/issues/27246) | 5 | [Video](https://www.youtube.com/watch?v=9TSP4awoHuI) 6 | 7 | # Notes 8 | 9 | * The proposal is to throw an exception when anybody uses synchronous (blocking) 10 | APIs on the returned `Stream`. 11 | - The reason being that the blocking APIs don't perform as well. 12 | - We should reverse the default so that synchronous APIs work by default but 13 | advanced customers can opt out so they get a "slap on the wrist" when the 14 | stack accidentally uses synchronous APIs. 15 | - Actually, we decided to get rid of the argument so that we can make the 16 | method `AsStream` idempotent. 17 | * Extension methods vs. virtual methods 18 | - We'd make `AsStream()` virtual methods on `PipeReader` and `PipeWriter`. 19 | - Since we don't have default interface methods yet, we should not expose an 20 | extension method on `IDuplexPipe` to avoid behavior inconsistencies. 21 | * `AsStream()` should return the same instance when called multiple times on the 22 | same instance (will be idempotent) 23 | * We decided against making them structs so that it's consistent `PipeOptions` 24 | * Remove constants for defaults 25 | * Renames 26 | - `MinimumSegmentSize` -> `BufferSize` 27 | * `PipeReader.CopyToAsync()` 28 | - Should be virtual 29 | - Should return `Task` 30 | * `PipeWriter.CopyFromAsync()` 31 | - Should be virtual 32 | - Should return `Task` 33 | - Should be `protected internal` because the name is very unusual 34 | * Consider overriding `Stream.CopyToAsync` to handle the case where the caller 35 | passed in a stream that was produced from a `PipeWriter`. This way, you can 36 | by-pass the naïve `Stream`-based copy and go straight to the pipeline. -------------------------------------------------------------------------------- /2019/System.Private.CoreLib-Nullable-Custom-Attributes/System.Runtime.InteropServices.WindowsRuntime.md: -------------------------------------------------------------------------------- 1 | # System.Runtime.InteropServices.WindowsRuntime 2 | 3 | ```diff 4 | --- D:\Temp\nullable\before\System.Runtime.InteropServices.WindowsRuntime.dll.cs 2019-06-26 13:40:22.000000000 -0700 5 | +++ D:\Temp\nullable\after\System.Runtime.InteropServices.WindowsRuntime.dll.cs 2019-06-26 13:40:41.000000000 -0700 6 | @@ -15,12 +15,13 @@ 7 | public static bool operator ==(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken left, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken right) { throw null; } 8 | public static bool operator !=(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken left, System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken right) { throw null; } 9 | } 10 | public sealed partial class EventRegistrationTokenTable where T : class 11 | { 12 | public EventRegistrationTokenTable() { } 13 | + [System.Diagnostics.CodeAnalysis.MaybeNullAttribute] 14 | public T InvocationList { get { throw null; } set { } } 15 | public System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken AddEventHandler(T handler) { throw null; } 16 | public static System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable GetOrCreateEventRegistrationTokenTable(ref System.Runtime.InteropServices.WindowsRuntime.EventRegistrationTokenTable refEventTable) { throw null; } 17 | public void RemoveEventHandler(System.Runtime.InteropServices.WindowsRuntime.EventRegistrationToken token) { } 18 | public void RemoveEventHandler(T handler) { } 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /2019/System.Private.CoreLib-Nullable/System.Buffers.md: -------------------------------------------------------------------------------- 1 | # System.Buffers 2 | 3 | ```diff 4 | ---\\scratch2\scratch\safern\RefAssembliesNullable\System.Buffers\before\System.Buffers.dll 5 | +++\\scratch2\scratch\safern\RefAssembliesNullable\System.Buffers\after\System.Buffers.dll 6 | namespace System.Buffers { 7 | public abstract class ArrayPool { 8 | protected ArrayPool(); 9 | public static ArrayPool Shared { get; } 10 | public static ArrayPool Create(); 11 | public static ArrayPool Create(int maxArrayLength, int maxArraysPerBucket); 12 | public abstract T[] Rent(int minimumLength); 13 | public abstract void Return(T[] array, bool clearArray = false); 14 | } 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /2019/System.Private.CoreLib-Nullable/System.Diagnostics.Tools.md: -------------------------------------------------------------------------------- 1 | # System.Diagnostics.Tools 2 | 3 | ```diff 4 | ---\\scratch2\scratch\safern\RefAssembliesNullable\System.Diagnostics.Tools\before\System.Diagnostics.Tools.dll 5 | +++\\scratch2\scratch\safern\RefAssembliesNullable\System.Diagnostics.Tools\after\System.Diagnostics.Tools.dll 6 | namespace System.CodeDom.Compiler { 7 | public sealed class GeneratedCodeAttribute : Attribute { 8 | public GeneratedCodeAttribute(string? tool, string? version); 9 | public string? Tool { get; } 10 | public string? Version { get; } 11 | } 12 | } 13 | namespace System.Diagnostics.CodeAnalysis { 14 | public sealed class ExcludeFromCodeCoverageAttribute : Attribute { 15 | public ExcludeFromCodeCoverageAttribute(); 16 | } 17 | public sealed class SuppressMessageAttribute : Attribute { 18 | public SuppressMessageAttribute(string category, string checkId); 19 | public string Category { get; } 20 | public string CheckId { get; } 21 | public string? Justification { get; set; } 22 | public string? MessageId { get; set; } 23 | public string? Scope { get; set; } 24 | public string? Target { get; set; } 25 | } 26 | } 27 | ``` 28 | -------------------------------------------------------------------------------- /2019/System.Private.CoreLib-Nullable/System.Security.Principal.md: -------------------------------------------------------------------------------- 1 | # System.Security.Principal 2 | 3 | ```diff 4 | ---D:\Temp\nullable\before 5 | +++D:\Temp\nullable\after 6 | assembly System.Security.Principal { 7 | namespace System.Security.Principal { 8 | public interface IIdentity { 9 | string AuthenticationType { get; } 10 | bool IsAuthenticated { get; } 11 | string Name { get; } 12 | } 13 | public interface IPrincipal { 14 | IIdentity Identity { get; } 15 | bool IsInRole(string role); 16 | } 17 | public enum PrincipalPolicy { 18 | NoPrincipal = 1, 19 | UnauthenticatedPrincipal = 0, 20 | WindowsPrincipal = 2, 21 | } 22 | public enum TokenImpersonationLevel { 23 | Anonymous = 1, 24 | Delegation = 4, 25 | Identification = 2, 26 | Impersonation = 3, 27 | None = 0, 28 | } 29 | } 30 | } 31 | ``` 32 | -------------------------------------------------------------------------------- /2019/System.Text.Utf8/README.md: -------------------------------------------------------------------------------- 1 | # Utf8 and Rune APIs 2 | 3 | Status: **Approved with feedback** | 4 | [Issue](https://github.com/dotnet/corefx/issues/34761) 5 | 6 | ## Notes 7 | 8 | * Breaking down the APIs into multiple was done because reviewers didn't give 9 | actionable feedback before. We should fix the review process rather than doing 10 | micro-reviews because it's harder to see the larger picture. 11 | * We should change the API as follows: 12 | 13 | ```C# 14 | public static OperationStatus FromUtf16(ReadOnlySpan source, Span destination, out int numCharsRead, out int numBytesWritten, bool replaceInvalidSequences = true, bool isFinalBlock = true); 15 | public static OperationStatus ToUtf16(ReadOnlySpan source, Span destination, out int numBytesRead, out int numCharsWritten, bool replaceInvalidSequences = true, bool isFinalBlock = true); 16 | ``` 17 | 18 | -------------------------------------------------------------------------------- /2020/01-28-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 1/28/2020 2 | 3 | ## Add StringContent ctor providing tighter control over charset 4 | 5 | **Approved** | [#corefx/7864](https://github.com/dotnet/corefx/issues/7864#issuecomment-579398933) | [Video](https://www.youtube.com/watch?v=keHv3W-2-Q4&t=0h0m0s) 6 | 7 | We believe the correct API is this: 8 | 9 | ```C# 10 | public StringContent(string content, MediaTypeHeaderValue mediaType) 11 | ``` 12 | 13 | ## Is there a function to copy directories? 14 | 15 | **Rejected** | [#corefx/15708](https://github.com/dotnet/corefx/issues/15708#issuecomment-579405459) | [Video](https://www.youtube.com/watch?v=keHv3W-2-Q4&t=0h23m57s) 16 | 17 | We generally have avoided IO APIs with complex policy (such as, cancellation, error handling, recovery, permissions etc). The API shape would work, but we're concerned about the complexity in implementation and don't think it's worth it. 18 | -------------------------------------------------------------------------------- /2020/02-25-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 2/25/2020 2 | 3 | -------------------------------------------------------------------------------- /2020/06-26-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 6/26/2020 2 | 3 | ## Guarding calls to platform-specific APIs 4 | 5 | **Approved** | [#runtime/33331](https://github.com/dotnet/runtime/issues/33331#issuecomment-650326500) | [Video](https://www.youtube.com/watch?v=R5G4scTRRNQ&t=0h0m0s) 6 | 7 | * We should rename `TargetPlatformMinVersion` 8 | - It's a runtime concept, not a targeting concept 9 | * Can we change `Platform` to `OS`? 10 | * `MinimumPlatform` -> `MinimumOSPlatform` 11 | * `PlatformAttribute` should have an internal constructor 12 | * Add `ObsoletedInPlatformAttribute.Message` 13 | * `RuntimeInformation` 14 | - `IsOSPlatformOrLater` should also take a `string` 15 | - `IsOSPlatformEarlierThan` should also take a `string` 16 | - The `IsPlatformXXx` methods should be recognized by the JIT to be constant 17 | * `OSPlatform` 18 | - Hide `OSX` 19 | - Add `macOS` 20 | * Analyzer 21 | - The analyzer should handle `Debug.Assert` for these methods 22 | - Should we support helpers methods? We concluded we don't need it yet 23 | ## OS compatibility analyzer 24 | 25 | **Approved** | [#runtime/37359](https://github.com/dotnet/runtime/issues/37359) | [Video](https://www.youtube.com/watch?v=R5G4scTRRNQ&t=1h21m0s) 26 | 27 | -------------------------------------------------------------------------------- /2020/07-14-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 07/14/2020 2 | 3 | ## System.Text.Json: (De)serialization support for quoted numbers 4 | 5 | **Approved** | [#runtime/30255](https://github.com/dotnet/runtime/issues/30255#issuecomment-658313884) | [Video](https://www.youtube.com/watch?v=Cw-kYXQ7Sw8&t=0h0m0s) 6 | 7 | * Looks good. 8 | * We should have a discussion around defaults for .NET 5, especially web. 9 | * We decided to rename `JsonNumberHandling.None` an `JsonNumberHandling.Strict` 10 | 11 | ```C# 12 | namespace System.Text.Json 13 | { 14 | public partial sealed class JsonSerializerOptions 15 | { 16 | public JsonNumberHandling NumberHandling { get; set; } 17 | } 18 | } 19 | namespace System.Text.Json.Serialization 20 | { 21 | [Flags] 22 | public enum JsonNumberHandling 23 | { 24 | Strict = 0x0, 25 | AllowReadingFromString = 0x1, 26 | WriteAsString = 0x2, 27 | AllowNamedFloatingPointLiterals = 0x4 28 | } 29 | 30 | [AttributeUsage( 31 | AttributeTargets.Class | 32 | AttributeTargets.Struct | 33 | AttributeTargets.Property | 34 | AttributeTargets.Field, AllowMultiple = false)] 35 | public partial sealed class JsonNumberHandlingAttribute : JsonAttribute 36 | { 37 | public JsonNumberHandlingAttribute(JsonNumberHandling handling); 38 | public JsonNumberHandling Handling { get; } 39 | } 40 | } 41 | ``` 42 | ## System.Text.Json: Ignore null values while serializing 43 | 44 | **Approved** | [#runtime/39152](https://github.com/dotnet/runtime/issues/39152#issuecomment-658319929) | [Video](https://www.youtube.com/watch?v=Cw-kYXQ7Sw8&t=0h24m36s) 45 | 46 | * Makes perfect sense. 47 | 48 | ```C# 49 | public enum JsonIgnoreCondition 50 | { 51 | // Never = 0, 52 | // Always = 1, 53 | // WhenWritingDefault = 2, 54 | WhenWritingNull = 3 55 | } 56 | ``` 57 | -------------------------------------------------------------------------------- /2020/07-29-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 07/29/2020 2 | 3 | ## configurable HTTP/2 PING timeouts in HttpClient 4 | 5 | **Approved** | [#runtime/31198](https://github.com/dotnet/runtime/issues/31198#issuecomment-665783930) 6 | 7 | ```C# 8 | namespace System.Net.Http 9 | { 10 | public class SocketsHttpHandler 11 | { 12 | public TimeSpan KeepAlivePingDelay { get; set; } 13 | public TimeSpan KeepAlivePingTimeout { get; set; } 14 | public HttpKeepAlivePingPolicy KeepAlivePingPolicy { get; set; } 15 | } 16 | public enum HttpKeepAlivePingPolicy 17 | { 18 | WithActiveRequests, 19 | Always 20 | } 21 | } 22 | ``` 23 | -------------------------------------------------------------------------------- /2020/07-31-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 07/31/2020 2 | 3 | ## ConsoleLogger output is garbled with color codes when redirected 4 | 5 | **Approved** | [#runtime/37421](https://github.com/dotnet/runtime/issues/37421#issuecomment-667250129) | [Video](https://www.youtube.com/watch?v=wOytg5ukJ2Y&t=0h0m0s) 6 | 7 | * Looks good as proposed 8 | * We considered exposing a setting on `System.Console` instead but we want a setting that can be configured via the configuration system of `Microsoft.Extensions`. 9 | 10 | ```diff 11 | namespace Microsoft.Extensions.Logging.Console 12 | { 13 | + public enum LoggerColorBehavior 14 | + { 15 | + Default = 0, 16 | + Enabled = 1, 17 | + Disabled = 2, 18 | + } 19 | public class SimpleConsoleFormatterOptions : ConsoleFormatterOptions 20 | { 21 | public SimpleConsoleFormatterOptions(); 22 | - public bool DisableColors { get; set; } 23 | + public LoggerColorBehavior ColorBehavior { get; set; } 24 | public bool SingleLine { get; set; } 25 | } 26 | } 27 | ``` 28 | 29 | -------------------------------------------------------------------------------- /2020/09-08-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 09/08/2020 2 | 3 | ## Add SocketsHttpHandler.ConnectCallback 4 | 5 | **Approved** | [#runtime/41949](https://github.com/dotnet/runtime/issues/41949#issuecomment-689032184) | [Video](https://www.youtube.com/watch?v=SyCQa-125uQ&t=0h0m0s) 6 | 7 | * We should add a context class that passes in the parameters so that we can add more values over time 8 | * We originally had `SocketsHttpConnectionContext` as get/set POCO but that would mean that all properties would have to be nullable, which would be super annoying to use 9 | 10 | ```C# 11 | namespace System.Net.Http 12 | { 13 | public sealed class SocketsHttpConnectionContext 14 | { 15 | public DnsEndPoint DnsEndPoint { get; } 16 | public HttpRequestMessage RequestMessage { get; } 17 | } 18 | public sealed class SocketsHttpHandler : HttpMessageHandler 19 | { 20 | public Func>? ConnectCallback { get; set; } 21 | } 22 | } 23 | ``` 24 | 25 | ## Mark System.Threading.Thread ResetAbort as Obsolete 26 | 27 | **Approved** | [#runtime/41925](https://github.com/dotnet/runtime/issues/41925#issuecomment-689040775) | [Video](https://www.youtube.com/watch?v=SyCQa-125uQ&t=0h12m58s) 28 | 29 | * We believe it makes sense to reuse the existing diagnostic ID 30 | 31 | ```C# 32 | namespace System.Threading 33 | { 34 | public sealed class Thread 35 | { 36 | // Obsoleted in .NET 5: 37 | //[Obsolete(DiagnosticId = "SYSLIB0006")] 38 | //public void Abort(); 39 | //[Obsolete(DiagnosticId = "SYSLIB0006")] 40 | //public void Abort(object stateInfo); 41 | [Obsolete(DiagnosticId = "SYSLIB0006")] 42 | public static void ResetAbort(); 43 | } 44 | } 45 | ``` 46 | 47 | -------------------------------------------------------------------------------- /2021/04-06-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # Quick Reviews 04/06/2021 2 | 3 | ## Compile-time source generation for System.Text.Json 4 | 5 | **NeedsWork** | [#runtime/45448](https://github.com/dotnet/runtime/issues/45448#issuecomment-814368729) | [Video](https://www.youtube.com/watch?v=MNWITQvvMYU) 6 | 7 | * General notes 8 | - The current proposal is that building application that use linking by default (Blazor, iOS, Android) 9 | - This means that by default, starting, in .NET, those application models will warn on usage of JSON serialization/deserialization because those will be marked as linker unfriendly. Can we improve this, by, for example, having more of a progressive mode? 10 | - Since this proposal is generating the serializer on a per assembly boundary, and each assembly's context contains the serialization of the type closure, it means the closure of assemblies is a single versioning bubble. In other words, if a type in a dependency adds new property, the serializer won't know about until it's being re-generated. That's different from the reflection approach. 11 | 12 | * `JsonContext` 13 | - Consider dropping `From` and instead expose the constructor taking options directly 14 | - It seems unfortunate that for users to take advantage of the source generated serializer all call sites need to change to pass in the context/type info. This might make it harder for frameworks like ASP.NET Core that serialize user provided types without having access to the generated `JsonContext` 15 | - The `SerializeXxx` funcs are currently hardcoded. We need to make sure that they work for options that the context is tied to. We need to make sure that the generated code is correct; for example, it needs to honor the casing policy. It's OK to have a slower path for non-standard configuration, but we can't ignore the supplied configuration. 16 | - Can we also get a generic `GetTypeInfo()` 17 | 18 | -------------------------------------------------------------------------------- /2021/06-08-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/08/2021 2 | 3 | ## Add HTTP/0.9 to Microsoft.AspNetCore.Http.HttpProtocol 4 | 5 | **Approved** | [#aspnetcore/33280](https://github.com/dotnet/aspnetcore/pull/33280) 6 | 7 | ## Close connection 8 | 9 | **Approved** | [#aspnetcore/32096](https://github.com/dotnet/aspnetcore/pull/32096#issuecomment-856902967) 10 | 11 | Let's make the default implementation non-public. Outside of that, API looks :shipit: 12 | ## Use request culture to deserialize JSON body 13 | 14 | **Approved** | [#aspnetcore/31331](https://github.com/dotnet/aspnetcore/pull/31331) 15 | 16 | ## GRPC :scheme pseudo-header passed from proxy/loadbalancer causes ConnectionAbortedException 17 | 18 | **Approved** | [#aspnetcore/30532](https://github.com/dotnet/aspnetcore/issues/30532#issuecomment-856917570) 19 | 20 | We discussed putting this on the root Kestrel options at which point it would apply to HTTP/2 and HTTP/3. Most limits are currently numeric, so this seems like a slight outlier. On the other hand, it crowds the top-level option. 21 | 22 | API feedback: Put this on the top level Kestrel option. 23 | 24 | Additional discussion: Need to talk to @blowdart about enabling this option at all. 25 | -------------------------------------------------------------------------------- /2021/06-08-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/08/2021 2 | 3 | ## Incremental Generators merge to main 4 | 5 | **Approved** | [#roslyn/53948](https://github.com/dotnet/roslyn/issues/53948#issuecomment-857141143) 6 | 7 | # Notes 8 | 9 | ## Combine vs Pair 10 | 11 | * Combine is an action, Pair is not necessarily an action. 12 | * Settled on Combine 13 | 14 | ## Should every function in the pipeline take 2 parameters? 15 | 16 | * Pretty much any operation can be cancellable 17 | * If we require CancellationTokens in lambdas, then our analyzers around not passing through CancellationTokens can help. If there's no CancellationToken in scope, then it can't. 18 | * We'll go with CancellationTokens for all predicates. 19 | 20 | ## Moving GenerateSource 21 | 22 | * Weird to end the pipeline that is fully pure with an explicitly side-effecting function. 23 | * Rename to RegisterSourceOutput, put on the context 24 | 25 | ## Flattening the pipeline 26 | 27 | * Pipeline is just a nested context, we could reduce a level of nesting. 28 | * Users don't need the extra level of nesting. 29 | * Approved: we'll remove the nested initialization contexts and just build pipelines in the initialize methods. 30 | 31 | ## AsSingleValue 32 | 33 | * Not really analogous to `Single` from LINQ, but sounds similar 34 | * Possibilities 35 | * Collect 36 | * ToArray 37 | * AsValueProvider 38 | * GetValue 39 | * Collect it is, we can wait for user feedback if needed 40 | 41 | -------------------------------------------------------------------------------- /2021/06-17-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/17/2021 2 | 3 | ## Missing compiler generated switch expression arm in/from ISwitchExpressionOperation 4 | 5 | **Approved** | [#roslyn/52577](https://github.com/dotnet/roslyn/issues/52577#issuecomment-863562850) 6 | 7 | ## API Review 8 | 9 | * Naming seems fine as long as the documentation about nullable implications is good. 10 | ## SyntaxTree.GetLineMappings 11 | 12 | **Approved** | [#roslyn/53752](https://github.com/dotnet/roslyn/issues/53752#issuecomment-863563291) 13 | 14 | ## API Review 15 | 16 | * How will the new `#line` changes be incorporated? 17 | * Offset should be added before we ship. 18 | * Otherwise looks good. 19 | ## Consider making Operation.ChildOperations public 20 | 21 | **Approved** | [#roslyn/49475](https://github.com/dotnet/roslyn/issues/49475#issuecomment-863563588) 22 | 23 | ## API Review 24 | 25 | * We're fine with the nesting level. 26 | ## New IOperation: IAttributeOperation 27 | 28 | **NeedsWork** | [#roslyn/53618](https://github.com/dotnet/roslyn/issues/53618#issuecomment-863564797) 29 | 30 | ## API Review 31 | 32 | * We'll defer giving information about the attribute target (ie, the field/method/property/etc the attribute is applied to) to future feedback. It's not a cheap thing to track because we don't track it today, and we'd prefer users to move from Symbols -> Operations, not the other way around. 33 | * Should have a single `IOperation` child instead, which either be an `IObjectCreationOperation` for success cases, or some form of `IInvalidOperation` for invalid cases where a constructor wasn't bound. 34 | ## Add predicate version of IOperation.Descendants 35 | 36 | **Approved** | [#roslyn/53621](https://github.com/dotnet/roslyn/issues/53621#issuecomment-863565123) 37 | 38 | ## API Review 39 | 40 | * Seems like a fine convenience API. We already have the non-descendIntoChildren version. 41 | * Our future selves can consider a cross-operation API break if we want to change to a struct-enumerator return type. 42 | -------------------------------------------------------------------------------- /2021/06-28-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/28/2021 2 | 3 | ## QueryStringEnumerable API 4 | 5 | **Approved** | [#aspnetcore/33910](https://github.com/dotnet/aspnetcore/pull/33910#issuecomment-869901305) 6 | 7 | * We think `DecodeName` / `DecodeValue` are useful APIs to have. With `DecodeName` we can optimize for the common cases where the name does not need decoding and return the encoded value as is. For `DecodeValue` it's less useful in the common case, but could help in the event if the value need to be parsed (e.g. `int.TryParse`). 8 | 9 | * If we do need to share this publicly in the future, we can consider creating a M.Extensions.HttpHelperUtility package. 10 | ## Support custom delimiter KeyPerFile configuration source 11 | 12 | **Approved** | [#aspnetcore/33693](https://github.com/dotnet/aspnetcore/pull/33693#issuecomment-869905167) 13 | 14 | * API triage: Rename `Delimiter` -> `SectionDelimiter`. API approved. 15 | -------------------------------------------------------------------------------- /2021/06-30-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/30/2021 2 | 3 | ## Represent enhanced `#line` directives in syntax API 4 | 5 | **Approved** | [#roslyn/54318](https://github.com/dotnet/roslyn/issues/54318#issuecomment-871731075) 6 | 7 | ## API Review 8 | 9 | API Approved 10 | 11 | * Remove `Deconstruct` from `LineMapping`. If we want to add `Deconstruct` methods to our simple structs, we can add them in general. 12 | * Before merge, see if `CharacterOffset` on `LineMapping` can be an `int` instead of an `int?`. Are there scenarios where the information loss is actually important? 13 | ## Expose a way to identify custom attributes 14 | 15 | **Approved** | [#roslyn/53410](https://github.com/dotnet/roslyn/issues/53410#issuecomment-871731737) 16 | 17 | ## API Review 18 | 19 | API Approved. 20 | ## Add public API to retrieve metadata token from ISymbol 21 | 22 | **Approved** | [#roslyn/53486](https://github.com/dotnet/roslyn/issues/53486#issuecomment-871734638) 23 | 24 | ## API Review 25 | 26 | API Approved 27 | 28 | * Adding to `Location`, while somewhat tempting, is concerning from a perf perspective. Metadata symbols can share `Location` arrays for all symbols from the same metadata symbol, this would prevent us from doing that and potentially incur a large number of allocations. 29 | * While we do have precedent for exposing `System.Runtime.Metadata` types from our APIs (`IModuleSymbol.GetMetadata().GetMetadataReader()`), an `int` is a good abstraction here that is aligned with ECMA 335 and can be used by both `System.Reflection` and `System.Reflection.Emit`. We'd also want to hide the handle property on derived types to expose `ParameterHandle`/`PropertyHandle`/etc strongly-typed properties, which can be painful. 30 | -------------------------------------------------------------------------------- /2021/07-06-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/06/2021 2 | 3 | ## Developers will be able to control how distributed tracing information is propagated 4 | 5 | **Approved** | [#runtime/50658](https://github.com/dotnet/runtime/issues/50658#issuecomment-875007158) 6 | 7 | * Since there's already a strong delegate type for the getter, let's use a strong delegate type for the setter to name the string parameters. 8 | * Extract(out id, out state) should use the "trace" prefix to help callers understand the alignment to (e.g.) Activity.TraceStateString 9 | * Instead of relying on the shape of the out parameters, the different Extract methods should use purpose names 10 | * We renamed CreateLegacyPropagator() to CreateDefaultPropagator() 11 | 12 | ```C# 13 | namespace System.Diagnostics 14 | { 15 | public abstract class TextMapPropagator 16 | { 17 | public delegate void PropagatorGetterCallback(object carrier, string fieldName, out string? fieldValue, out IEnumerable? fieldValues); 18 | public delegate void PropagatorSetterCallback(object carrier, string fieldName, string fieldValue); 19 | 20 | public abstract IReadOnlyCollection Fields { get; } 21 | public abstract void Inject(Activity activity, object carrier, PropagatorSetterCallback setter); 22 | public abstract void ExtractTraceIdAndState(object carrier, PropagatorGetterCallback getter, out string? traceId, out string? traceState); 23 | public abstract IEnumerable>? ExtractBaggage(object carrier, PropagatorGetterCallback getter); 24 | 25 | public static TextMapPropagator Current { get; set; } 26 | public static TextMapPropagator CreateDefaultPropagator() { throw null; } 27 | public static TextMapPropagator CreatePassThroughPropagator() { throw null; } 28 | public static TextMapPropagator CreateNoOutputPropagator() { throw null; } 29 | } 30 | } 31 | ``` 32 | -------------------------------------------------------------------------------- /2021/07-12-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/12/2021 2 | 3 | ## [SignalR] Close connection on auth expiration 4 | 5 | **Approved** | [#aspnetcore/32431](https://github.com/dotnet/aspnetcore/pull/32431) 6 | 7 | ## RequestDelegateFactory should take an optional set of route pattern names or route parameter names 8 | 9 | **Approved** | [#aspnetcore/33700](https://github.com/dotnet/aspnetcore/issues/33700#issuecomment-878484429) 10 | 11 | ```diff 12 | + public class RequestDelegateFactoryOptions 13 | + { 14 | + public IServiceProvider? ServiceProvider { get; init; } 15 | - public IReadOnlyList? RouteParameterNames { get; init; } 16 | + public IEnumerable? RouteParameterNames { get; init; } 17 | + } 18 | ``` 19 | 20 | ## Capture Endpoint and RouteValues on ExceptionHandlerFeature 21 | 22 | **Approved** | [#aspnetcore/34205](https://github.com/dotnet/aspnetcore/pull/34205) 23 | 24 | -------------------------------------------------------------------------------- /2021/07-29-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/29/2021 2 | 3 | ## IFieldSymbol is missing API to retrieve fixed-sized buffer size 4 | 5 | **Approved** | [#roslyn/54799](https://github.com/dotnet/roslyn/issues/54799#issuecomment-889429193) 6 | 7 | ## API Review 8 | 9 | Approved. 10 | ## IOperation support for interpolated string handler conversions 11 | 12 | **NeedsWork** | [#roslyn/54718](https://github.com/dotnet/roslyn/issues/54718#issuecomment-889517902) 13 | 14 | ## API Review 15 | 16 | We discussed this in depth today, and some members are worried that we're over-specifying the API here. We'll dig into this again in a future API review session with more concrete tree examples. 17 | -------------------------------------------------------------------------------- /2021/08-02-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/02/2021 2 | 3 | ## Add feature and DiagnosticSource event for rejected request info 4 | 5 | **Approved** | [#aspnetcore/34783](https://github.com/dotnet/aspnetcore/pull/34783#issuecomment-891209558) 6 | 7 | We drilled on the name, but think this is alright because the underlying feature also uses the term `BadHttpRequestException`, so we think keeping with the theme is fine. 8 | -------------------------------------------------------------------------------- /2021/08-19-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/19/2021 2 | 3 | ## IOperation support for interpolated string handler conversions 4 | 5 | **NeedsWork** | [#roslyn/54718](https://github.com/dotnet/roslyn/issues/54718#issuecomment-902250198) 6 | 7 | ## API Review 8 | 9 | We've generally agreed that the interface should expose the Append calls as children directly, rather than trying to add the information to `IInterpolatedTextOperation` or `IInterpolatedContentOperation`. We don't want to expose the data on `IBinaryOperation` directly: we feel it's surprising and a violation of layering, and that the `IInterpolatedStringOperation` should be the top node. We have a few options we're considering: 10 | 11 | * We collapse all the parts into a single `IInterpolatedStringOperation`. While this is the most faithful to the semantics of the language, we're concerned about the ergonomics of not having `IOperation` nodes that correspond to nested `BinaryExpressionSyntax`es or `InterpolatedStringExpressionSyntax`es, which this approach would necessitate. 12 | * We have dedicated `IBinaryContentOperation` or similar nodes that represent the binary operations themselves, and are part of the `Parts` array on the root `IInterpolatedStringOperation` node. While this is more complex and more of a "syntactic" view, it will alleviate the concerns about missing explicit syntax nodes. 13 | 14 | A smaller team will explore this space and update the design. 15 | 16 | One other note is that we should have a flag on `IInterpolatedStringAppendOperation` that indicates whether the content is a literal or an interpolation placeholder. 17 | -------------------------------------------------------------------------------- /2021/09-07-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/07/2021 2 | 3 | ## Port ObjectSerializer abstraction from the Azure SDK 4 | 5 | **NeedsWork** | [#runtime/43669](https://github.com/dotnet/runtime/issues/43669#issuecomment-914555568) | [Video](https://www.youtube.com/watch?v=AGFnSBdnJ6o&t=0h0m0s) 6 | 7 | * We should have a list of places where we'd **implement** the abstraction: 8 | - `System.Text.Json` 9 | - XML serializer? 10 | - Data contract serialization? 11 | * We should have a list of placed where we'd **accept** the abstraction 12 | - Azure SDK (such as Cosmos) 13 | - ASP.NET Core's model binder? 14 | - `HttpClientJsonExtensions`? 15 | * We should validate that the abstraction works well with the feature set of the serializers we have. There shouldn't be a bias towards just JSON. Also, we've added a ton of features to `System.Text.Json`. Would these all work? 16 | * Can we make `ObjectSerializer` friendly for the linker? 17 | - At the minimum, we'd need generic overloads 18 | * Is `Stream` the correct type? Should we also support span? 19 | * If we were to ship this, which binaries would this ship in? 20 | - Azure SDK would need a .NET Standard 2.0 package. 21 | - Could we just make it part of the same package that provided `BinaryData`? 22 | -------------------------------------------------------------------------------- /2021/09-20-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/20/2021 2 | 3 | ## Add MapPatch overloads to routing 4 | 5 | **Approved** | [#aspnetcore/36198](https://github.com/dotnet/aspnetcore/issues/36198#issuecomment-923142748) 6 | 7 | API approved. We discussed adding `MapHead` along with this, but it typically appears in a place where `GET` and `HEAD` need to be supported together. `MapMethods` is what we would recommend in that case. We should also add the RequestDelegate overload as part of this change: 8 | 9 | ```diff 10 | namespace Microsoft.AspNetCore.Builder 11 | { 12 | public static class DelegateEndpointRouteBuilderExtensions 13 | { 14 | + public static DelegateEndpointConventionBuilder MapPatch(this IEndpointRouteBuilder endpoints, string pattern, Delegate handler); 15 | } 16 | } 17 | 18 | namespace Microsoft.AspNetCore.Builder 19 | { 20 | public static class EndpointRouteBuilderExtensions 21 | { 22 | + public static IEndpointConventionBuilder MapPatch(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate) 23 | } 24 | } 25 | ``` 26 | 27 | -------------------------------------------------------------------------------- /2021/09-23-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/23/2021 2 | 3 | ## Consider making Operation.ChildOperations public 4 | 5 | **Approved** | [#roslyn/49475](https://github.com/dotnet/roslyn/issues/49475#issuecomment-926170479) 6 | 7 | ## Review Notes 8 | 9 | Significant discussion was had on what consistency principles we wanted to have here: 10 | 11 | * We have existing `SyntaxList` APIs that expose indexers with similar performance characteristics. It would be valuable to have existing knowledge of our API shapes carry over to this API. At the same time, we're not getting requests for the ability to index a child collection of IOperation nodes, and every new piece of code adds maintenance work. 12 | * Our existing public `List`-suffixed nodes implement `IReadOnlyList`. 13 | * If we go with a minimal API now, but later want to add indexer and list implementations to it, some of the members of the design group would regret a non-list suffixed name, and some would not. 14 | 15 | We decided to compromise by naming the type `OperationList`, but _not_ implementing an indexer on it at this time. If we get requests for an indexer later, we can add it then. 16 | ## Introduce IParameterSymbol.AssociatedSymbol to allow one to relate a primary constructor parameter to it's associated prop 17 | 18 | **Approved** | [#roslyn/54286](https://github.com/dotnet/roslyn/issues/54286#issuecomment-926171135) 19 | 20 | ## Review Notes 21 | 22 | Updated proposal looks good. We have a singular rule we can say for all `AssociatedSymbol` properties: `AssociatedSymbol`s point from the most synthesized thing to the least synthesized thing, not the other way around. 23 | -------------------------------------------------------------------------------- /2021/10-07-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/07/2021 2 | 3 | ## GeneratedKind.SourceGenerator 4 | 5 | **Approved** | [#roslyn/56810](https://github.com/dotnet/roslyn/issues/56810#issuecomment-938170140) 6 | 7 | ## API Review 8 | 9 | We generally approved the idea. We think that the naming could be a bit better, but we'll address this during review when implemented. We have these candidates: 10 | 11 | * SourceGenerator 12 | * SourceGenerated 13 | * GeneratedSource 14 | * SourceGeneratorGenerated 15 | ## Expose API to signify if an `or-expression` (`|`) surprisingly widened a sign extended value. 16 | 17 | **NeedsWork** | [#roslyn/56994](https://github.com/dotnet/roslyn/issues/56994#issuecomment-938179043) 18 | 19 | ## API Review 20 | 21 | Initial review is concerned that this is too specific of a concept and is also never going to be change, so the existing code should have a low maintenance burden. We're going to start with a test of a simplification on the IDE side, where the simplifier will not remove widening, signed, numeric conversions, rather than trying to implement the full logic of the compiler here. We could also consider simply removing the compiler warning altogether. We'll explore these before revisiting this proposal. 22 | -------------------------------------------------------------------------------- /2021/10-18-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/18/2021 2 | 3 | ## Expose Use(Func middleware) on WebApplication 4 | 5 | **Approved** | [#aspnetcore/37346](https://github.com/dotnet/aspnetcore/issues/37346#issuecomment-946012521) 6 | 7 | API review: We think it's worthwhile having this, although I personally don't think it adds a great deal of value. That said, we already have two additional overloads, so a 3rd one isn't over kill. Approved. 8 | -------------------------------------------------------------------------------- /2021/10-21-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/21/2021 2 | 3 | ## IOperation support for interpolated string handler conversions 4 | 5 | **Approved** | [#roslyn/54718](https://github.com/dotnet/roslyn/issues/54718#issuecomment-949022790) 6 | 7 | ## API Review 8 | 9 | The update is generally approved, with the following names for the enum: 10 | 11 | ```cs 12 | public enum InterpolatedStringArgumentPlaceholderKind 13 | { 14 | CallsiteArgument, 15 | CallsiteReceiver, 16 | TrailingValidityArgument, 17 | } 18 | ``` 19 | ## IOperation support for list patterns 20 | 21 | **Approved** | [#roslyn/57194](https://github.com/dotnet/roslyn/issues/57194#issuecomment-949023570) 22 | 23 | ## API Review 24 | 25 | General shape is approved. However, we need to be more specific with the naming, as `Symbol` is not clear and ambiguous. Discussion and approval for naming can take place offline. 26 | ## API for IFunctionPointerInvocationOperation 27 | 28 | **NeedsWork** | [#roslyn/57195](https://github.com/dotnet/roslyn/issues/57195#issuecomment-949024340) 29 | 30 | ## API Review 31 | 32 | We think there's opportunity for a base interface between `IFunctionPointerInvocationOperation`, `IInvocationOperation`, `IPropertyReferenceOperation`, and `IRaiseEventOperation`. A group will meet offline shortly to design that interface, and we'll revisit this issue with that API in mind. 33 | -------------------------------------------------------------------------------- /2021/10-25-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/25/2021 2 | 3 | ## GetEndpointAttribute in EndpointHttpContextExtensions.cs 4 | 5 | **NeedsWork** | [#aspnetcore/37425](https://github.com/dotnet/aspnetcore/issues/37425#issuecomment-951163011) 6 | 7 | API review: 8 | 9 | 👍🏽 all the points @JamesNK raises. It's a bit difficult to reason about what to do when `GetEndpoint()` returns null. A alternative we might consider is to bump the `GetMetadata` and `GetOrderedMetadata` to hang off of `Endpoint`: 10 | 11 | ```diff 12 | + public static class EndpointExtensions 13 | + { 14 | + public T? GetMetadata(this Endpoint endpoint) where T : class 15 | + public IReadOnlyList GetOrderedMetadata(this Endpoint endpoint) where T : class 16 | + } 17 | ``` 18 | -------------------------------------------------------------------------------- /2021/10-26-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/26/2021 2 | 3 | ## Expose the field `_stringHasEscaping` of the `Utf8JsonReader` struct 4 | 5 | **Approved** | [#runtime/45167](https://github.com/dotnet/runtime/issues/45167#issuecomment-952220732) | [Video](https://www.youtube.com/watch?v=MrStTiZcpuU&t=0h0m0s) 6 | 7 | * It should return `false` when the current token isn't a string. 8 | * It would be beneficial to align the name with `ValueSpan`. This also solves the issue if we ever have any other token types that are escaped, so let's rename this to `ValueIsEscaped` 9 | * Do we need an `Unescape` API that allows unescaping in a non-allocating way. We can treat this a separate API request. 10 | 11 | ```C# 12 | namespace System.Text.Json 13 | { 14 | public partial ref struct Utf8JsonReader 15 | { 16 | public bool ValueIsEscaped { get; } 17 | } 18 | } 19 | ``` 20 | 21 | -------------------------------------------------------------------------------- /2021/10-28-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/28/2021 2 | 3 | ## API for IFunctionPointerInvocationOperation 4 | 5 | **Approved** | [#roslyn/57195](https://github.com/dotnet/roslyn/issues/57195#issuecomment-954299489) 6 | 7 | ## API Review Notes 8 | 9 | After discussion, we don't see much benefit to having a common base type. We don't have any real world scenarios that would benefit much from such a base type, so we will not continue looking at that unless we see more compelling evidence of real scenarios in the area. 10 | 11 | After some discussion, we tweaked some names a bit on this API for consistency with the rest of IOperation, and we would also like to add a convenience helper extension method for retrieving the signature of the function pointer type from this node. We don't want to make this a full property on the node, as it's duplicative information, but an extension to make it easier to retrieve will be fine. The final approved shape is: 12 | 13 | ```diff 14 | namespace Microsoft.CodeAnalysis.Operations 15 | { 16 | + public interface IFunctionPointerInvocationOperation : IOperation 17 | + { 18 | + IOperation Target { get; } 19 | + ImmutableArray Arguments { get; } 20 | + } 21 | public static class OperationExtensions 22 | { 23 | + public IMethodSymbol GetFunctionPointerSignature(this IFunctionPointerInvocationOperation functionPointer); 24 | } 25 | } 26 | 27 | namespace Microsoft.CodeAnalysis 28 | { 29 | public enum OperationKind 30 | { 31 | + FunctionPointerInvocation = 0x72, 32 | } 33 | } 34 | ``` 35 | -------------------------------------------------------------------------------- /2021/11-01-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/01/2021 2 | 3 | ## RouteConstraints aren't linker friendly 4 | 5 | **Approved** | [#aspnetcore/24723](https://github.com/dotnet/aspnetcore/issues/24723#issuecomment-956444763) 6 | 7 | API review: 8 | 9 | Approved API: 10 | 11 | ```diff 12 | public class RouteOptions 13 | { 14 | + public void SetParameterPolicy<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]T>(string text) where T : IParameterPolicy; 15 | + public void SetParameterPolicy(string text, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]Type constraintType); 16 | } 17 | ``` 18 | 19 | The API is approved. We we want to prevent users from mutating `Routeoptions.ConstraintMap` since that could again introduce trimmer unfriendly behavior. We think the best way to do this is to annotate the property with `RequiresUnreferencedCodeAttribute` and make a note that says the warning can be suppressed if all they are doing is reading or deleting from the dictionary. 20 | 21 | The API is named `Setxxx` since it will always replace an existing key. 22 | -------------------------------------------------------------------------------- /2021/11-04-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/04/2021 2 | 3 | ## IFlowCaptureReferenceOperation.IsInitialization 4 | 5 | **Approved** | [#roslyn/57484](https://github.com/dotnet/roslyn/issues/57484#issuecomment-961390590) 6 | 7 | ## API Review Notes 8 | 9 | We rename `IsInitialization` to `IsCapture` for consistency with the `IFlowCaptureOperation` name. Otherwise, the API is approved. 10 | -------------------------------------------------------------------------------- /2021/11-08-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/08/2021 2 | 3 | ## Add metadata for IFormFile usage with minimal actions 4 | 5 | **Approved** | [#aspnetcore/35175](https://github.com/dotnet/aspnetcore/issues/35175#issuecomment-963475874) 6 | 7 | API review: We think we might be able to get away re-using the existing `FromFormAttribute` and specialize the swagger based on if it's a `IFormFile` / `IFormFileCollection` instance. 8 | 9 | ```diff 10 | + public interface IFromFormMetadata 11 | + { 12 | + string? Name { get; } 13 | + } 14 | 15 | - public class FromFormAttribute : Attribute, IBindingSourceMetadata, IModelNameProvider 16 | + public class FromFormAttribute : Attribute, BindingSourceMetadata, IModelNameProvider, IFromFormMetadata 17 | ``` 18 | 19 | Usage: 20 | 21 | ```C# 22 | app.MapPost("/upload", async ([FromForm("file-name")] IFormFile file) => { ... }); 23 | 24 | app.MapPost("/upload", async ([FromForm] IFormFileCollection file) => { ... }); 25 | 26 | app.MapPost("/upload", async (IFormFile myFile) => { ... }); 27 | 28 | app.MapPost("/upload", async (IFormFileCollection myFiles) => { ... }); 29 | 30 | // Unsupported. Analyzer error. This can be done in a follow up 31 | app.MapPost("/upload", async ([FromForm("myFiles")] IFormFileCollection file) => { ... }); 32 | ``` 33 | 34 | For `IFormFileCollection`, we do not wanted based on the parameter name or `IFromFormAttribute.Name` (at least to start with). We can make the latter an error via an analyzer + a runtime check. 35 | 36 | 37 | -------------------------------------------------------------------------------- /2021/11-18-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/18/2021 2 | 3 | ## Allow AnalyzeDataFlow for ConstructorInitializerSyntax 4 | 5 | **Approved** | [#roslyn/57577](https://github.com/dotnet/roslyn/issues/57577#issuecomment-973331672) 6 | 7 | ## API Review 8 | 9 | * We need to make sure that we add tests for Extract Method to make sure it doesn't have negative behavior introduced with this method. 10 | * API shape is approved with the optional C#-specific overloads. The primary constructor overload needs to have its comments adjust to not imply that it's giving info about the base constructor itself, only the base call syntax. 11 | ## GetAllTypesByMetadataName 12 | 13 | **NeedsWork** | [#roslyn/57802](https://github.com/dotnet/roslyn/issues/57802#issuecomment-973341909) 14 | 15 | ## API Review 16 | 17 | We had a lengthy discussion about our philosophies in this area today. We generally think an API shaped similar to this is a good primitive to have for building heuristics, and there is some concern about adding heuristics to the compiler layer itself. We do, however, need to consider how we want to help users with common heuristics, like the equivalent of the compiler's GetWellKnownType internal API. Now that we've agreed on this API concept, we can look at specifics of the API itself in the next design meeting. Some initial comments: 18 | 19 | * `GetTypesByMetadataName` seems to be the preferred naming 20 | * `MetadataNameEnumerable` implies that we are enumerating metadata names. Perhaps `TypesByMetadataNameEnumerable` would be a better name. 21 | * We might consider adding a filter delegate to the enumerable, but we will have to carefully consider how that works with arguments and potentially avoiding performance issues. It might be best to simply let perf scenarios filter with a foreach, and non-perf scenarios use LINQ. 22 | -------------------------------------------------------------------------------- /2021/11-22-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/22/2021 2 | 3 | ## Support SkipStatusCodePages on endpoints and authorized routes 4 | 5 | **Approved** | [#aspnetcore/38573](https://github.com/dotnet/aspnetcore/issues/38573#issuecomment-975822858) 6 | 7 | **API review**: 8 | 9 | Approved. We can remove the `Enabled` property and make this a vanilla 10 | 11 | ```diff 12 | namespace Microsoft.AspNetCore.Http.Metadata; 13 | 14 | + public interface ISkipStatusCodePagesMetadata 15 | + { 16 | + } 17 | 18 | namespace Microsoft.AspNetCore.Mvc; 19 | 20 | - public class SkipStatusCodePagesAttribute : Attribute, IResourceFilter 21 | + public class SkipStatusCodePagesAttribute : Attribute, IResourceFilter, ISkipStatusCodePagesMetadata 22 | { 23 | } 24 | ``` 25 | 26 | 27 | -------------------------------------------------------------------------------- /2021/12-02-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 12/02/2021 2 | 3 | ## Source Generators: RegisterReferenceSourceOutput 4 | 5 | **NeedsWork** | [#roslyn/57589](https://github.com/dotnet/roslyn/issues/57589#issuecomment-985038558) 6 | 7 | ## API Review 8 | 9 | * Most of the generator examples we've seen as motivating examples are v1 generators that, when factored into incremental generators, have perfectly fine performance. 10 | * Doesn't help with Hot Reload or EnC scenarios, which need full implementation results 11 | * Only for the application of edits, not for things like intellisense 12 | * Workaround is available: register 2 generators, one that registers partials with empty bodies, one that provides the real implementation with our existing API 13 | * If you did it this way, it would require partial consistency, whereas the ReferenceSourceOnly version could make it harder to ensure that these things line up. 14 | Would have errors 15 | * Might have been nice if we had done a slightly different design. What if we just did RegisterSourceOutput, and put a flag on it? 16 | * Would that cause us to have to run generators twice, even if they didn't check that flag? 17 | * Can RegisterReferenceSourceOutput actually change the reference assembly output? 18 | * They probably can do that, so we're ok 19 | * Might need a slightly better name 20 | * We'll bikeshed over this when we have perf data. 21 | 22 | ### Conclusion 23 | 24 | We think the API shape is reasonable (modulo the name), but we would like data on whether it actually helps our motivating generators before shipping the API for real. 25 | -------------------------------------------------------------------------------- /2021/12-06-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 12/06/2021 2 | 3 | ## IOperation support for implicit Index/Range indexer over non-array types 4 | 5 | **Approved** | [#roslyn/58079](https://github.com/dotnet/roslyn/issues/58079#issuecomment-987324439) 6 | 7 | ### API Review 8 | 9 | * Naming: we have both Reference and Access in existing names 10 | * We'll keep it as is to keep in line IPropertyReferenceOperation 11 | * We'll rename Index to Argument to line up with IPropertyReferenceOperation 12 | 13 | #### Conclusion 14 | 15 | Rename Index to Argument. Otherwise, API is approved. 16 | ## Source Generators: Graceful cancellation for timing 17 | 18 | **NeedsWork** | [#roslyn/58080](https://github.com/dotnet/roslyn/issues/58080#issuecomment-987324780) 19 | 20 | ### API Review 21 | 22 | * Cancellation makes this complicated 23 | * Should we split the timing info and run results into separate method calls? 24 | * AnalyzerDriver precedent? 25 | * Should we instead pipe in a bag that holds timing info, always adds regardless of cancellation, if cancelled then timing data is consistent, but not complete. 26 | * Would mean we can't reuse work. 27 | * No public precedent for this type of mutable API. 28 | * Existing API is more a suspend/resume design, not necessarily a cancellation design. We should sit down with some runtime folks and see if they have general patterns for this area. 29 | * We might want a real partial results view in the future for partial frozen semantics in the IDE. 30 | * Should we pass timing data in the case of cancellation through the exception itself? 31 | * Would AggregateException flatten these things correctly and preserve data? 32 | 33 | #### Conclusion 34 | 35 | We'll split this up into "general timing info" and "timing info after cancellation". We'll write up a proposal for the `GetTimingInfo()` method and approve it over email. At a later time, we can revisit how to get info from a cancelled driver run, including both timing info and partial run results. 36 | -------------------------------------------------------------------------------- /2022/01-03-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/03/2022 2 | 3 | ## Adding EntryAssembly to AddRazorPages/AddControllers* 4 | 5 | **Approved** | [#aspnetcore/39126](https://github.com/dotnet/aspnetcore/issues/39126#issuecomment-1004284775) 6 | 7 | * Let's make the configure non-nullable in the API (without null-checking it so users can pass in a null if they really want to). e.g. 8 | 9 | ```diff 10 | + public static IMvcBuilder AddControllers(this IServiceCollection services, Assembly entryAssembly) 11 | {} 12 | 13 | + public static IMvcBuilder AddControllers(this IServiceCollection services, Assembly entryAssembly, Action configure) 14 | + {} 15 | ``` 16 | 17 | Given that the API touches the startup code, and the plan is to update the templates we should run it by @davidfowl / @DamianEdwards 18 | 19 | ## Use JSON Property Name attributes when creating ModelState Validation errors 20 | 21 | **Approved** | [#aspnetcore/39010](https://github.com/dotnet/aspnetcore/issues/39010#issuecomment-1004289017) 22 | 23 | Let's seal these types and name them to be more explicit about what they are associated with (STJ vs NewtonsoftJson and that they have to do with validation) 24 | 25 | ```diff 26 | - public class JsonMetadataProvider 27 | + public sealed class SystemTextJsonValidationMetadataProvider 28 | 29 | - public class NewtonsoftJsonMetadataProvider : IDisplayMetadataProvider, IValidationMetadataProvider 30 | + public sealed class NewtonsoftJsonValidationMetadataProvider : IDisplayMetadataProvider, IValidationMetadataProvider 31 | ``` 32 | ## A better implementation to the definition of IUrlHelper.IsLocalUrl 33 | 34 | **Rejected** | [#aspnetcore/39119](https://github.com/dotnet/aspnetcore/issues/39119#issuecomment-1004290902) 35 | 36 | Thanks for the issue report. We don't think this API has crisp details (what happens if the app has multiple hosts etc) and consequently don't think this is a valid API to consider. 37 | -------------------------------------------------------------------------------- /2022/01-20-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/20/2022 2 | 3 | ## Parameter null-checking public API 4 | 5 | **Approved** | [#roslyn/58307](https://github.com/dotnet/roslyn/issues/58307#issuecomment-1017966518) 6 | 7 | ### API Review 8 | 9 | 1. IParameterSymbol.IsNullChecked will be removed. If issues such as poor performance are discovered in practice when implementing IDE features for parameter null-checking, we can revisit. 10 | * Whether the parameter symbol is coming from source or metadata would affect the result of this property, and we feel that, currently, any IDE scenario that needs the information is in the method with already-hydrated syntax trees. 11 | 2. Syntax API is fine as written in issue description. 12 | 3. CFG will not produce additional nodes to represent parameter null checks. 13 | * No real benefit to adding this info to the tree: it just adds some null checks to the start of the method. Anything that actually cares about that can be relatively easily updated to calculate that info. 14 | -------------------------------------------------------------------------------- /2022/01-24-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/24/2022 2 | 3 | ## `CreatedResult` should accept null location 4 | 5 | **Approved** | [#aspnetcore/39454](https://github.com/dotnet/aspnetcore/issues/39454#issuecomment-1020448781) 6 | 7 | We could consider making only one of the overloads (the `string?` one) and make it nullable. If the compiler supports using nullablility as part of overload resolution, users could get away with writing `Created(null, "My-cool-value")` without having to cast. Outside of that API approved. 8 | ## Can't inject service in ValidationAttribute 9 | 10 | **Approved** | [#aspnetcore/39382](https://github.com/dotnet/aspnetcore/issues/39382#issuecomment-1020441400) 11 | 12 | API review: 13 | 14 | Approved with a change to the obsolete warning message: 15 | ```diff 16 | - [Obsolete("This API is obsolete and will be removed in a future version")] 17 | + [Obsolete("This API is obsolete and will be removed in a future version. Consider using the overload that accepts an IServiceProvider.")] 18 | ``` 19 | -------------------------------------------------------------------------------- /2022/02-03-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/03/2022 2 | 3 | ## Provide a way to efficiently get the list of global aliases in a compilation. 4 | 5 | **NeedsWork** | [#roslyn/59088](https://github.com/dotnet/roslyn/issues/59088#issuecomment-1029434575) 6 | 7 | ## API Review 8 | 9 | After some discussion, we decided we want to investigate a more symbol-based approach to see if it can answer all the questions the IDE has, and to not separate out global using as special. Instead, @CyrusNajmabadi will investigate whether a `SemanticModel` API that returns some type of hierarchical list of "here are all the using scopes at a given location", with each scope containing all the usings and alias symbols for the current location. If that will be sufficient for the IDE's purposes, we like it much better as an API than singling out global usings specially. 10 | -------------------------------------------------------------------------------- /2022/02-24-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/24/2022 2 | 3 | ## Initial sketch of exposing imports from the semantic model 4 | 5 | **NeedsWork** | [#roslyn/59533](https://github.com/dotnet/roslyn/pull/59533) 6 | 7 | ## IOperation tree change for target-typed new is breaking analyzers in the wild 8 | 9 | **Rejected** | [#roslyn/59171](https://github.com/dotnet/roslyn/issues/59171#issuecomment-1050338084) 10 | 11 | ## API Review 12 | 13 | This conversion node was added to the tree to allow the compiler to better do nullability analysis, but it's also semantically correct to have. The specification states that there exists a conversion from target-typed new nodes to the final type, which is what is now reflected by the IOperation tree. We should definitely look into infrastructure improvements in the roslyn-analyzers repo to ensure that future changes get caught earlier, but in general this change is in line with what we expect to happen with the IOperation tree as the language grows. 14 | ## Source Generators: Timing APIs 15 | 16 | **Approved** | [#roslyn/59398](https://github.com/dotnet/roslyn/issues/59398#issuecomment-1050338472) 17 | 18 | ## API Review 19 | 20 | This API is approved. 21 | ## Expose IMethodSymbolInternal.IsIterator 22 | 23 | **Approved** | [#roslyn/20179](https://github.com/dotnet/roslyn/issues/20179#issuecomment-1050339084) 24 | 25 | ## API Review 26 | 27 | This API is approved. It will return true from source symbols, when that symbol is an iterator (sync or async). 28 | -------------------------------------------------------------------------------- /2022/02-28-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/28/2022 2 | 3 | ## Add Results.Empty 4 | 5 | **Approved** | [#aspnetcore/40168](https://github.com/dotnet/aspnetcore/issues/40168#issuecomment-1054550507) 6 | 7 | API review: 8 | 9 | We'll use properties instead. Here's the approved API: 10 | 11 | ```diff 12 | public static class Results 13 | { 14 | + public static IResult Empty { get; } = new EmptyResult(); 15 | } 16 | 17 | public class ControllerBase 18 | { 19 | + public static EmptyResult Empty { get; } = new (); 20 | } 21 | ``` 22 | ## RequestDecompression middleware 23 | 24 | **Approved** | [#aspnetcore/40080](https://github.com/dotnet/aspnetcore/issues/40080#issuecomment-1054578813) 25 | 26 | API review: 27 | 28 | Approved. Update the `IRequestDecompressionProvider` to return the Stream instead of the provider: 29 | 30 | ```diff 31 | + public interface IRequestDecompressionProvider 32 | + { 33 | + Stream? GetDecompressionStream(HttpContext context); 34 | + } 35 | ``` 36 | -------------------------------------------------------------------------------- /2022/03-17-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 03/17/2022 2 | 3 | ## ILocalSymbol.IsReadOnly 4 | 5 | **Approved** | [#roslyn/59709](https://github.com/dotnet/roslyn/issues/59709#issuecomment-1071450792) 6 | 7 | ## API Review 8 | 9 | The alternative design is approved. 10 | 11 | ```diff 12 | namespace Microsoft.CodeAnalysis 13 | { 14 | public interface ILocalSymbol 15 | { 16 | + bool IsForEach { get; } 17 | + bool IsUsing { get; } 18 | } 19 | } 20 | ## Make FixAll APIs for ContainingType/Member scope public 21 | 22 | **NeedsWork** | [#roslyn/60029](https://github.com/dotnet/roslyn/issues/60029#issuecomment-1071458718) 23 | 24 | ## API Review 25 | 26 | * Some test cases to add: 27 | * Top level statements 28 | * Mutli-cursor in VS 29 | * Will we need to make `triggerSpan` an ImmutableArray to deal with this? 30 | * We should consider renaming `triggerSpan` to `diagnosticSpan`, to make it clear this is the span of the _diagnostic_ that triggered the code, not the user's selection span. 31 | * What is the use case for `GetDocumentSpanDiagnosticsAsync` to be public? Is it for the testing framework? Otherwise, we're not sure if we should add this helper now, or wait for use cases. 32 | -------------------------------------------------------------------------------- /2022/03-29-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 03/29/2022 2 | 3 | ## Updating the generic math draft proposal to include changes proposed for .NET 7 4 | 5 | **NeedsWork** | [#designs/257](https://github.com/dotnet/designs/pull/257#issuecomment-1082307333) | [Video](https://www.youtube.com/watch?v=Qo40CuHxSwk&t=0h0m0s) 6 | 7 | API Review notes: 8 | 9 | * Let's move all the interfaces except IParseable and ISpanParseable to System.Numerics. 10 | * A quick English language check says `IParsable` is the correct spelling over `IParseable`, and this matches the W3C's guidance and Wiktionary. 11 | * INumber should probably stay INumber. INumberBase may be the best name, but we don't super like it. An alternative was `INonComparableNumber`. 12 | * All of the members on the current INumber move down to the base interface except for Clamp, Max, and Min (the things that need comparisons) 13 | * ISignedNumberBase and IUnsignedNumberBase should drop their suffixes and drop their inheritance (just be marker interfaces) 14 | * IBinaryInteger 15 | * Rename (Try)CopyTo to (Try)WriteLittleEndian. 16 | * The non-Try versions should return int. 17 | * The non-Try versions should be written as DIMs 18 | * GetByteCount should return `int` 19 | * GetBitLength should return `long`. 20 | * IFloatingPoint.Round should just lock in Int32 and not be double-generic. 21 | * IFloatingPointIeee754 22 | * PI should change to `Pi`. 23 | * FusedMultiplyAdd should update the parameter names (left, right, add) in the proposal. 24 | * IEEERemainder => IeeeRemainder (or Ieee754Remainder) 25 | * CopyExponentTo => WriteExponentLittleEndian (and return types, and DIMs) 26 | * GetByteCount should return `int` 27 | * GetBitLength should return `long`. 28 | * Let's go with the CreateChecked(TOther) + CreateChecked(TOther, TNumberConverter) overload pairs plan. 29 | 30 | 31 | -------------------------------------------------------------------------------- /2022/03-31-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 03/31/2022 2 | 3 | ## Initial sketch of exposing imports from the semantic model 4 | 5 | **NeedsWork** | [#roslyn/59533](https://github.com/dotnet/roslyn/pull/59533#issuecomment-1085098582) 6 | 7 | ## API Review 8 | 9 | * `IAliasSymbol`s already have a `DeclaringSyntaxReference` property, which should be sufficient for discovering where they were defined. That property does not work for two other nodes, but we can remove the syntax references from the two aliases apis. 10 | * We should introduce a dedicated `struct` for each of the other two API returns: `ImportedNamespaceOrType` and `ImportedName` are suggestions for the names of them. 11 | * We shouldn't return the synthesized syntax reference for VB global imports. We make them behind the scenes in the compiler layer for code sharing, but no syntax is passed from the user for these things so we shouldn't expose it. 12 | -------------------------------------------------------------------------------- /2022/04-13-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/13/2022 2 | 3 | ## Introduce Results.Typed factory methods for creating results whose types properly reflect the response type & shape 4 | 5 | **NeedsWork** | [#aspnetcore/41009](https://github.com/dotnet/aspnetcore/issues/41009#issuecomment-1097399822) 6 | 7 | API review notes: 8 | 9 | - What about linker friendliness? 10 | - This will be addressed separately along with the existing `Results` methods. 11 | - Do we prefer `Results.Typed` or `TypedResults`? 12 | - We prefer `TypedResults` in the `Microsoft.AspNetCore.Http` namespace alongside `Results`. This avoids a nested type or static property. 13 | - We should use longer names for noun results. 14 | - `Ok` is okay 15 | - `Problem` is not. Should be `ProblemResult` or something. 16 | 17 | -------------------------------------------------------------------------------- /2022/04-14-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/14/2022 2 | 3 | ## Initial sketch of exposing imports from the semantic model 4 | 5 | **Approved** | [#roslyn/59533](https://github.com/dotnet/roslyn/pull/59533#issuecomment-1099591449) 6 | 7 | ### API Review: 8 | 9 | The API shape is approved. We should check to see the existing behavior of `DeclaringSyntaxReferences` in VB for global aliases, and mirror that for `DeclaringSyntaxReference` for other global imports in VB. 10 | -------------------------------------------------------------------------------- /2022/04-19-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/19/2022 2 | 3 | ## Developers can customize the JSON serialization contracts of their types 4 | 5 | **NeedsWork** | [#runtime/63686](https://github.com/dotnet/runtime/issues/63686#issuecomment-1102979549) | [Video](https://www.youtube.com/watch?v=8szYS1MiuTM) 6 | 7 | * `CanSerialize` should be named `ShouldSerialize` 8 | * We should design the combinators pattern more; this would validate that the shape of the types is correct; also, this feature might be mainstream enough that we want to ship a way to combine them along with a set of best practices in V1 of this feature. 9 | * We should consider removing the generic set/get as it's a pit of failure when structs are involved (requires unsafe unboxing in order to mutate the original value rather than a copy) 10 | * Would be good to have a sample how source generation for libraries and custom type for the app would compose, or if this out of scope. 11 | 12 | -------------------------------------------------------------------------------- /2022/04-28-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/28/2022 2 | 3 | ## System.CommandLine APIs 4 | 5 | **NeedsWork** | [#runtime/68578](https://github.com/dotnet/runtime/issues/68578) | [Video](https://www.youtube.com/watch?v=cao51EnAEYU&t=0h0m0s) 6 | 7 | -------------------------------------------------------------------------------- /2022/05-10-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/10/2022 2 | 3 | ## Use interned strings in Hub protocol implementations 4 | 5 | **Approved** | [#aspnetcore/41342](https://github.com/dotnet/aspnetcore/issues/41342) 6 | 7 | -------------------------------------------------------------------------------- /2022/05-26-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/26/2022 2 | 3 | ## API Additions for Required Members 4 | 5 | **Approved** | [#roslyn/61444](https://github.com/dotnet/roslyn/issues/61444#issuecomment-1139053906) 6 | 7 | ### API Review 8 | 9 | `WithRequired` -> `WithIsRequired`. Otherwise, this looks good for the initial API. Future APIs can be added as needed. 10 | ## Higher Level SyntaxProvider APIs for incremental generators 11 | 12 | **NeedsWork** | [#roslyn/54725](https://github.com/dotnet/roslyn/issues/54725#issuecomment-1139062813) 13 | 14 | ### API Review 15 | 16 | Overall the approach has promise, but we have some notes to look at before finalizing. 17 | 18 | * AttributeData is provided in multiple places. 19 | * GeneratorAttributeSyntaxContext might want to provide the target symbol 20 | * If we keep the syntax generic parameter, a better name might be `TAttributeTarget` 21 | * Our analyzers don't use generics, they use SyntaxKinds. Maybe we should do the same: it will allow filtering to multiple declaration kinds, and potentially make calling more ergonomic by allowing the user to leave off the generic arguments. 22 | * We might also be able use SymbolKinds instead, to allow language agnosticism? 23 | * The non-transform overload should be removed. We don't think it's necessary, and could lead users down a pit of failure by causing more recalculation later in the pipeline. 24 | -------------------------------------------------------------------------------- /2022/05-27-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/27/2022 2 | 3 | ## Simplify Authentication and Authorization configuration when using WebApplicationBuilder 4 | 5 | **Approved** | [#aspnetcore/39855](https://github.com/dotnet/aspnetcore/issues/39855#issuecomment-1139979470) 6 | 7 | API Review: 8 | 9 | - `IAuthenticationConfigurationProvider` doesn't need a `Configuration` property. 10 | - `GetSection` name can be more descriptive. `GetAuthenticationSchemeConfiguration` is clearer. This won't be called frequently or by most apps, so we can live with a longer name. 11 | 12 | 13 | ```diff 14 | namespace Microsoft.AspNetCore.Builder; 15 | 16 | class WebApplicationBuilder 17 | { 18 | + public AuthenticationBuilder Authentication { get; } 19 | } 20 | 21 | namespace Microsoft.AspNetCore.Authentication; 22 | 23 | + public class IAuthenticationConfigurationProvider 24 | + { 25 | + public IConfiguration GetAuthenticationSchemeConfiguration(string authenticationScheme) 26 | + } 27 | 28 | 29 | namespace Microsoft.Extensions.DependencyInjection; 30 | 31 | public static class JwtBearerExtensions 32 | { 33 | + public static AuthenticationBuilder AddJwtBearer(this AuthenticationBuilder builder, string authenticationScheme) 34 | } 35 | ``` 36 | -------------------------------------------------------------------------------- /2022/06-23-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/23/2022 2 | 3 | ## Introduce package for rendering Blazor components with custom HTML elements 4 | 5 | **Approved** | [#aspnetcore/42329](https://github.com/dotnet/aspnetcore/issues/42329#issuecomment-1164681562) 6 | 7 | New package: Microsoft.AspNetCore.Componenets.CustomElements 8 | 9 | ```diff 10 | + namespace Microsoft.AspNetCore.Components.Web; 11 | 12 | + public static class CustomElementsJSComponentConfigurationExtensions 13 | + { 14 | + public static void RegisterCustomElement(this IJSComponentConfiguration configuration, string identifier) where TComponent : IComponent 15 | + } 16 | ``` 17 | 18 | API approved 19 | -------------------------------------------------------------------------------- /2022/07-07-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/07/2022 2 | 3 | ## Public API for "file-local types" 4 | 5 | **Approved** | [#roslyn/62254](https://github.com/dotnet/roslyn/issues/62254#issuecomment-1178238643) 6 | 7 | ## API Reviews 8 | 9 | * IsFileLocal instead of IsFile 10 | * Could we implement metadata support? 11 | * Technically, yes, it could 12 | * However, local to which file? That data isn't preserved 13 | * Expand a bit on the doc comment: mention that it's only true for source, clarify the implementation details. 14 | * No public use case at the moment, we can look at it again when we have a use case 15 | 16 | ### Conclusion 17 | 18 | Approved, with `IsFileLocal` instead of `IsFile`. We will not expose a symbol display option for now. 19 | ## represent `ref` fields and `scoped` parameters and locals 20 | 21 | **NeedsWork** | [#roslyn/61647](https://github.com/dotnet/roslyn/issues/61647#issuecomment-1178239504) 22 | 23 | ## API Review 24 | 25 | * Need to update the docs for SymbolDisplayMemberOptions.IncludeRef 26 | * For locals and parameters, could we hide IncludeRef and add a new IncludeRefAndScoped with the same value? 27 | * Should we have a ScopedKind now, instead of IsScoped? That way we could adapt to `ref scoped` in the future 28 | * An enum `ScopedKind`, with `None`, `ScopedValue`, and `ScopedRef` 29 | -------------------------------------------------------------------------------- /2022/07-11-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/11/2022 2 | 3 | ## Add APIs to make it possible for users of RouteEndpointBuilder to use filters 4 | 5 | **Approved** | [#aspnetcore/42592](https://github.com/dotnet/aspnetcore/issues/42592#issuecomment-1180685716) 6 | 7 | API review notes: 8 | 9 | - Do we need the setter either? 10 | - No 11 | 12 | API Approved! 13 | 14 | ```diff 15 | namespace Microsoft.AspNetCore.Routing; 16 | 17 | public static class RouteEndpointBuilder 18 | { 19 | + public IList> RouteHandlerFilterFactories { get; } 20 | } 21 | ``` 22 | ## Additional Extensibility of `CreateHandler()` on `TestServer` 23 | 24 | **Approved** | [#aspnetcore/42567](https://github.com/dotnet/aspnetcore/issues/42567#issuecomment-1180715542) 25 | 26 | API Review Notes: 27 | 28 | - Awesome proposal. Simple and elegant. 29 | 30 | If you want to submit a PR with a test @justindbaur, we'd welcome it. 31 | 32 | It might be possible to use this to clean up some of our existing tests that previously had to use lower level HttpContext feature-based TestServer APIs. This doesn't have to be done as part of the initial change though. 33 | -------------------------------------------------------------------------------- /2022/07-14-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/14/2022 2 | 3 | ## Public API for "Compiler needs to declaratively fail when loading newer analyzers" 4 | 5 | **Approved** | [#roslyn/62583](https://github.com/dotnet/roslyn/issues/62583#issuecomment-1183823089) 6 | 7 | Conclusion from internal thread is to take this API as-is except we will make the 'init' accessor internal. 8 | -------------------------------------------------------------------------------- /2022/07-21-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 07/21/2022 2 | 3 | ## GeneratorDriver.ReplaceGenerators 4 | 5 | **Approved** | [#roslyn/62796](https://github.com/dotnet/roslyn/issues/62796#issuecomment-1191895067) 6 | 7 | ## API Review 8 | 9 | Approved as-is. 10 | -------------------------------------------------------------------------------- /2022/08-18-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/18/2022 2 | 3 | ## Add an overload of `CSharpSyntaxTree.Create` that allows to specify checksum algorithm 4 | 5 | **NeedsWork** | [#roslyn/62923](https://github.com/dotnet/roslyn/issues/62923#issuecomment-1219956928) 6 | 7 | ### API Review 8 | 9 | * This seems like it would be a constant value of the input text, rather than needing to be recalculated by the tree. 10 | * We need more background info on where the checksum is needed and when it needs to be calculated. 11 | ## GetDeclaredSymbol for lambdas 12 | 13 | **NeedsWork** | [#roslyn/63051](https://github.com/dotnet/roslyn/issues/63051#issuecomment-1219957735) 14 | 15 | ### API Review 16 | 17 | * Should we just have GetSymbolInfo be the API you use here? 18 | * We need to investigate the behavior of GetSymbolInfo/GetDeclaredSymbol for: 19 | * Local functions 20 | * Anonymous types 21 | * Tuples 22 | * Other GetDeclaredSymbol examples that are not suffixed with "DeclarationSyntax" 23 | * Do any of them return info from both of these APIs? 24 | ## Deprecate all public constructors of various diagnostic analysis context types 25 | 26 | **Approved** | [#roslyn/63440](https://github.com/dotnet/roslyn/issues/63440#issuecomment-1219958684) 27 | 28 | ### API Review 29 | 30 | * We're ok with the general concept, and we don't think we want to expose public constructors with `IsGeneratedCode` on them 31 | * We think we should wait until .NET 8 to mark them deprecated, however, so we get more review time. 32 | ## Add CSharpSyntaxVisitor and CSharpSyntaxRewriter 33 | 34 | **Approved** | [#roslyn/62647](https://github.com/dotnet/roslyn/issues/62647#issuecomment-1219960086) 35 | 36 | ### API Review 37 | 38 | * APIs are approved 39 | * We should also add a SyntaxWalker variant with ``, to match `OperationWalker` 40 | * We need VB versions of these as well. 41 | -------------------------------------------------------------------------------- /2022/08-23-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/23/2022 2 | 3 | ## [Analyzer] Prevent behavioral change in built-in operators for IntPtr and UIntPtr 4 | 5 | **Approved** | [#runtime/74022](https://github.com/dotnet/runtime/issues/74022#issuecomment-1224524650) | [Video](https://www.youtube.com/watch?v=2cVDxAEITn0&t=0h0m0s) 6 | 7 | Looks good as proposed. 8 | 9 | Severity: Warning 10 | Category: Reliability 11 | ## List.Slice 12 | 13 | **Approved** | [#runtime/66773](https://github.com/dotnet/runtime/issues/66773#issuecomment-1224682686) | [Video](https://www.youtube.com/watch?v=2cVDxAEITn0&t=0h23m45s) 14 | 15 | * Looks good as proposed. We should consider adding to immutable collections. 16 | 17 | ```diff 18 | namespace System.Collections.Generic 19 | { 20 | public class List 21 | { 22 | + public List Slice(int start, int length); 23 | } 24 | } 25 | ``` 26 | -------------------------------------------------------------------------------- /2022/08-24-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/24/2022 2 | 3 | ## Intermediate Generator outputs 4 | 5 | **NeedsWork** | [#roslyn/63291](https://github.com/dotnet/roslyn/issues/63291#issuecomment-1226474936) 6 | 7 | ### API Review 8 | 9 | * The razor source generator don't just produce C#, it produces semantic info the editor needs to run 10 | * Razor tooling wants not just razor source, but even the generated C# source. With the suppressed generator today, this isn't possible. 11 | * We need to think about OOP in this API, since we may need to communicate between the generator running in a different process and the tooling running in the same process. 12 | * Would maybe need to serialize/deserialize in the same process, but we already say this is necessary for C# source 13 | * Are these just a non-source artifact? 14 | * Intermediate might not be the right word in this case? 15 | * Maybe `AddNonSourceOutput`? 16 | * Could a user just get a stage of the pipeline and see the output of that stage? 17 | * May be ok, but it might also not be that the intermediate step has the exact thing you want 18 | * Serialization concerns for this. 19 | * Razor already needs serialization for tag helpers, so perhaps it doesn't matter that we start with just strings. 20 | * We do want to think about some of these intermediate outputs not needing to be written to disk. These intermediate pieces of info don't need to be written to disk for razor, but might for generators that want to write config files. 21 | * We could also look into allowing outputs to be `ROS` or similar, and users can serialize and rehydrate however they choose. 22 | 23 | -------------------------------------------------------------------------------- /2022/09-06-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/06/2022 2 | 3 | ## Add an overload of `CSharpSyntaxTree.Create` that allows to specify checksum algorithm 4 | 5 | **NeedsWork** | [#roslyn/62923](https://github.com/dotnet/roslyn/issues/62923#issuecomment-1238739811) 6 | 7 | ### API Review 8 | 9 | - Common case is the SourceText is what is calculating the checksum 10 | - Default implementation forwards to SourceText's property 11 | - However, IDE creates trees without the SourceText in some occasions 12 | - Don't want to rehydrate the SourceText for this scenario 13 | - We'll make sure doc comments on the property explain the usage 14 | - Can't calculate from the nodes: BOM can't be round-tripped, for example, as it's not represented in in-memory string 15 | - Might consider changing the return of `Encoding` to be none for trees from binary data or other non-file sources, but that would be a breaking change. 16 | - Do we regret having `Encoding` on the tree as well? 17 | - Neither `Encoding` or `Checksum` are really components of the tree itself. The tree isn't influenced by them, and just turns the tree into a property bag 18 | - Could the implementation PR keep this info in a different location? 19 | - Maybe we could create `SourceTextProvider` component that gets a callback when we need to make a tree? 20 | - But `GetText` is already virtual, derived types can override as appropriate 21 | - Next steps will be attempting to make `Encoding` obsolete in the IDE and see what progress we can make with plumbing extra info in that way. 22 | -------------------------------------------------------------------------------- /2022/10-13-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/13/2022 2 | 3 | ## CodeFix/CodeRefactoring Support for AdditionalFiles and AnalyzerConfigFiles 4 | 5 | **Approved** | [#roslyn/62877](https://github.com/dotnet/roslyn/issues/62877#issuecomment-1278144582) 6 | 7 | ### API Review 8 | 9 | * We should mark the old `Document` constructors as `EditorBrowsable.Never`. 10 | * API is approved. 11 | -------------------------------------------------------------------------------- /2022/10-31-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/31/2022 2 | 3 | ## AuthZ: Add IAuthorizationRequirementData 4 | 5 | **Approved** | [#aspnetcore/44551](https://github.com/dotnet/aspnetcore/issues/44551#issuecomment-1297451848) 6 | 7 | API Review Notes: 8 | 9 | 1. The motivation is that writing code to add new auth requirements to an endpoint (e.g. min age) requires writing a lot of code today in many classes. 10 | 2. Discussed how the `IAuthorizationRequirement` marker interface works. All existing logic. 11 | 3. Are we okay with logic in attributes? Yes. It's super convenient. 12 | 4. Method vs property. We fee that a method better matches expectations. We don't know much about what the implementation could be. It's probably usually cached by our built-in policy providers, so we don't really require this is inexpensive. 13 | 14 | API Approved! 15 | 16 | ```diff 17 | namespace Microsoft.AspNetCore.Authorization; 18 | 19 | + public interface IAuthorizationRequirementData 20 | + { 21 | + IEnumerable GetRequirements(); 22 | + } 23 | ``` 24 | -------------------------------------------------------------------------------- /2022/12-08-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 12/08/2022 2 | 3 | ## Expose constructor that allows for AnalysisOptions and a CancellationToken. 4 | 5 | **Approved** | [#roslyn/65051](https://github.com/dotnet/roslyn/pull/65051#issuecomment-1343401737) 6 | 7 | ## API Review 8 | 9 | * API is approved. 10 | ```cs 11 | public class CompilationWithAnalyzers 12 | { 13 | 14 | public CompilationWithAnalyzers( 15 | Compilation compilation, 16 | ImmutableArray analyzers, 17 | CompilationWithAnalyzersOptions analysisOptions, 18 | CancellationToken cancellationToken); 19 | } 20 | ``` 21 | ## API to determine if a syntax tree contains *conditional* directives. 22 | 23 | **Approved** | [#roslyn/65792](https://github.com/dotnet/roslyn/issues/65792#issuecomment-1343403338) 24 | 25 | ## API Review 26 | 27 | * Should we be able to answer for any types of directive, not just `#if`? 28 | * Differentiate based on SyntaxKind? 29 | * Instance method in SyntaxNode taking an int, extension methods for C# and VB taking specific kinds 30 | * Approved with the above change. Final design will be verified over email before merge. 31 | ## The `SyntaxGenerator` does not generate implicit conversion operators 32 | 33 | **NeedsWork** | [#roslyn/65833](https://github.com/dotnet/roslyn/issues/65833#issuecomment-1343404934) 34 | 35 | ## API Review 36 | 37 | * Should we just make `OperatorDeclaration` handle conversions as well, as conversions are user-defined operators? 38 | * Needs to be further investigated for consistency with existing methods. We'll review again at the next session if there is still any need for public api changes, instead of just implementation changes. 39 | -------------------------------------------------------------------------------- /2023/01-05-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/05/2023 2 | 3 | ## Breaking change - Make some types static 4 | 5 | **Approved** | [#roslyn/65909](https://github.com/dotnet/roslyn/issues/65909#issuecomment-1372800508) 6 | 7 | ### API Review 8 | 9 | * First two are already static on the C# side, seems ok 10 | * Third has similar examples on other option holder types. 11 | 12 | *Conclusion*: Approved. 13 | -------------------------------------------------------------------------------- /2023/02-16-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/16/2023 2 | 3 | ## Move `UseValueTuple` from `SymbolDisplayCompilerInternalOptions` to `SymbolDisplayMiscellaneousOptions` 4 | 5 | **Approved** | [#roslyn/66757](https://github.com/dotnet/roslyn/issues/66757#issuecomment-1433781770) 6 | 7 | ### API Review 8 | 9 | * `ExpandValueTuple` in Misc options 10 | * Approved 11 | 12 | ## API proposal for "Using Alias to any Type" 13 | 14 | **Approved** | [#roslyn/66913](https://github.com/dotnet/roslyn/issues/66913#issuecomment-1433782355) 15 | 16 | ### API Review 17 | 18 | * Have we thought about what we'd need to do if we end up doing generics in alias names? 19 | * The part that would change is independent of this. 20 | * Do we want an "expanded using alias" thing to avoid API breaks? 21 | * Would result in more pain for users than making `Name` nullable, as everywhere that is currently `UsingDirectiveSyntax` is now `BaseUsingDirectiveSyntax` 22 | * Rename `Type` to be `NamespaceOrType` to be more clear 23 | * Approved 24 | ## New APIs for "Primary Constructors" 25 | 26 | **Approved** | [#roslyn/66914](https://github.com/dotnet/roslyn/issues/66914#issuecomment-1433783095) 27 | 28 | ### API Review 29 | 30 | * We may want to move ParameterList up to BaseTypeDeclarationSyntax for error recovery purposes at some point 31 | * We will confirm that that won't a binary break. Otherwise, this is approved. 32 | -------------------------------------------------------------------------------- /2023/04-13-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/13/2023 2 | 3 | ## [Lightbulb Perf] Expose an optional FilterSpan public API on SyntaxTreeAnalysisContext and SemanticModelAnalysisContext 4 | 5 | **Approved** | [#roslyn/67257](https://github.com/dotnet/roslyn/issues/67257#issuecomment-1507605065) 6 | 7 | ### API Review 8 | 9 | * Purely informative, analyzers can still report outside of it 10 | * Already proven internally. 11 | * Should this be internal only? 12 | * Already used internal only, and we need it further, such as in roslyn-analyzers 13 | * Call it `FilterSpan` 14 | * Should we add it to _all_ contexts? 15 | * Some contexts might start being called from a different file than is being filtered. SymbolStart/Stop for a partial field, for example 16 | 17 | Approved for these two apis. Further additions will need to consider the different tree and span scenario. 18 | ## Deprecate CompilationWithAnalyzers.IsDiagnosticAnalyzerSuppressed public API 19 | 20 | **NeedsWork** | [#roslyn/67592](https://github.com/dotnet/roslyn/issues/67592#issuecomment-1507646644) 21 | 22 | ### API Review 23 | 24 | * Could we pull the existing impl out so it doesn't have to be updated in the future? 25 | * This could be pretty complex, it calls into some gnarly code. 26 | * What's the timeline for deprecation? 27 | * Put it on the BannedAPI list for Roslyn users? 28 | 29 | We'll move forward with obsoletion, and investigate how difficult freezing the current implementation will be. If it's easy, then we can remove at the next major version. If it's not, then we'll need to discuss when we want to break the functionality of the API. 30 | -------------------------------------------------------------------------------- /2023/05-03-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/03/2023 2 | 3 | ## Add `AdditionalTextValueProvider` 4 | 5 | **Approved** | [#roslyn/67611](https://github.com/dotnet/roslyn/issues/67611#issuecomment-1533887132) 6 | 7 | ### API Review 8 | 9 | * Worked around it for existing usages, do we really need it? 10 | * Is it the type of thing that we'd tell people not to use? 11 | * Not really. It's not super ergonomic, but it's not unsafe or dangerous. 12 | * Morally kind of wrong though? 13 | * Approved, marked help wanted. If it gets done it gets done. 14 | ## Add ReportDiagnostic API to all initial transform APIs 15 | 16 | **NeedsWork** | [#roslyn/63776](https://github.com/dotnet/roslyn/issues/63776#issuecomment-1533887892) 17 | 18 | ### API Review 19 | 20 | * Are the `Select` methods a source-breaking change for lambdas? 21 | * Maybe not, exist Selects are two-args? 22 | * Not a source-breaking change 23 | * Do we want `Where` as well? 24 | * Are diagnostics a side-channel? 25 | * How would we actually implement this? We'd have a lot of the same issues of tracking and invalidating those locations 26 | * We could do it the same way users can already, but that's no more efficient 27 | * Slight optimizations possible, but no meaningful optimizations 28 | * Possible for more efficient impl, but it's a very big architecture change. 29 | * The pattern we've seen so far has been a separate analyzer 30 | * Lots of duplication between analyzer and generator 31 | * Analyzers can be disabled 32 | * These extensions could be written as a 3rd party without needing to be in Roslyn. 33 | * Could do it as extensions for now and collect info on how expensive these things are? 34 | 35 | Conclusion: We will start with 3rd party extension methods and see what data we get about how expensive these are. 36 | -------------------------------------------------------------------------------- /2023/05-11-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/11/2023 2 | 3 | ## [Lightbulb Perf] Expose FilterSpan/FilterTree public API on remaining analysis contexts 4 | 5 | **Approved** | [#roslyn/68033](https://github.com/dotnet/roslyn/issues/68033#issuecomment-1544649533) 6 | 7 | ### API Review 8 | 9 | * What if we did `SyntaxTree` everywhere? 10 | * Prefer `FilterTree` naming 11 | * We don't have enough info to make a decision on AdditionalTexts here, so that will need to be a followup. 12 | 13 | **Conclusion**: APIs 1 and 2 are approved (adding `FilterSpan` and `FilterTree`). We will add `FilterTree` even where it might be duplicative, for ease of API usage. 14 | ## Optimized symbol location collections 15 | 16 | **NeedsWork** | [#roslyn/68020](https://github.com/dotnet/roslyn/issues/68020#issuecomment-1544651494) 17 | 18 | ### API Review 19 | 20 | * Similar to OperationList in goal 21 | * Is it still necessary now that the compiler had better with the new representations? 22 | * Who is the consumer of this API. Compiler has already moved to a new internal pattern. 23 | * We're unsure at this point. Need examples. 24 | * What about other APIs that our other lists have? Reversed, LastOrDefault, etc? 25 | * API goal seems overall fine. 26 | 27 | **Conclusion**: We're generally ok with the idea of the API, but need to see examples of where this would help outside the compiler. 28 | -------------------------------------------------------------------------------- /2023/06-08-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/08/2023 2 | 3 | ## Expose internal API CodeAction.CodeActionPriority 4 | 5 | **Approved** | [#roslyn/42431](https://github.com/dotnet/roslyn/issues/42431#issuecomment-1583284978) 6 | 7 | ### API Review 8 | 9 | * Not exposing high pri for safety of the core system 10 | * Validating inputs, 3 is not an option 11 | * Is the validation necessary? 12 | * People who want to replace our high-pri refactorings with their own? 13 | * Ship as-is with validation, wait for use cases? 14 | * Clamp instead? Would allow future version to clamp higher without a breaking change. 15 | 16 | **Conclusion**: Approved, clamp higher values to highest public value. 17 | -------------------------------------------------------------------------------- /2023/06-22-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/22/2023 2 | 3 | ## Collection literals 4 | 5 | **NeedsWork** | [#roslyn/68687](https://github.com/dotnet/roslyn/issues/68687#issuecomment-1603314314) 6 | 7 | ### API Review 8 | 9 | * Should it be named CollectionLiteralExpressionSyntax? 10 | * Philosophically, do these things appear out of nowhere, or are they thought of as a series of operations? 11 | * Language feature is called collection literals, language grammar says collection literals 12 | * Are analyzer authors going to want to handle these in the same family as other literalexpression syntaxes? 13 | * What is the use case? 14 | * Can be added later if we find a use case, no for now. 15 | * What about just `CollectionExpression`s? Parallels with `TupleExpression`, which is a similar-feeling feature 16 | * We like CollectionExpressionSyntax. Separately, LDM may want to consider renaming the feature to get away from calling these literals, as that can evoke mutability concerns in users we've talked to. 17 | 18 | **Conclusion** Syntax nodes will be named `CollectionExpressionSyntax`, we will not ship dictionary elements for now. We will come back to conversions and ioperation in the next meeting. 19 | ## Public API changes for InlineArrays feature 20 | 21 | **Approved** | [#roslyn/68719](https://github.com/dotnet/roslyn/issues/68719#issuecomment-1603314949) 22 | 23 | ### API Review 24 | 25 | * Why not use `IArrayElementReferenceOperation`? 26 | * Different semantics, likely that users would have to filter them out because of how different they are. 27 | 28 | **Conclusion** API approved as proposed 29 | -------------------------------------------------------------------------------- /2023/08-08-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/08/2023 2 | 3 | ## Meter Configuration and Pipeline 4 | 5 | **Approved** | [#runtime/85684](https://github.com/dotnet/runtime/issues/85684) | [Video](https://www.youtube.com/watch?v=58aXHiinJOs&t=0h0m0s) 6 | 7 | ## Proposal: Add IdnMapping Span-based APIs 8 | 9 | **Approved** | [#runtime/32411](https://github.com/dotnet/runtime/issues/32411#issuecomment-1670060439) | [Video](https://www.youtube.com/watch?v=58aXHiinJOs&t=0h45m53s) 10 | 11 | * Looks good as proposed 12 | 13 | ```C# 14 | namespace System.Globalization; 15 | 16 | public sealed class IdnMapping 17 | { 18 | // Existing API 19 | // public string GetAscii(string unicode); 20 | // public string GetAscii(string unicode, int index); 21 | // public string GetAscii(string unicode, int index, int count); 22 | // 23 | // public string GetUnicode(string ascii); 24 | // public string GetUnicode(string ascii, int index); 25 | // public string GetUnicode(string ascii, int index, int count); 26 | 27 | // Proposed API 28 | public string GetAscii(ReadOnlySpan unicode); 29 | public bool TryGetAscii(ReadOnlySpan unicode, Span destination, out int charsWritten); 30 | 31 | public string GetUnicode(ReadOnlySpan ascii); 32 | public bool TryGetUnicode(ReadOnlySpan ascii, Span destination, out int charsWritten); 33 | } 34 | ``` 35 | -------------------------------------------------------------------------------- /2023/09-14-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/14/2023 2 | 3 | ## public API for roslyn features to expose the ability to report progress as they run. 4 | 5 | **NeedsWork** | [#roslyn/69111](https://github.com/dotnet/roslyn/issues/69111#issuecomment-1720148479) 6 | 7 | ### API Review 8 | 9 | * Simplified version after feedback from last time 10 | * `IncompleteItems` -> `AddIncompleteItems`? 11 | * Confusing as to whether you're adding new items or adjusting the existing incomplete count 12 | * Add description optional parameters to the other methods 13 | * Add optional count of items that were completed 14 | * Would be helpful to have usage examples of how a CodeAction would call the apis 15 | 16 | **Conclusion**: A few minor updates to make, but the general shape is looking good. 17 | ## Include implicit `MyBase.New()` calls in VB Constructors 18 | 19 | **Approved** | [#roslyn/64354](https://github.com/dotnet/roslyn/issues/64354#issuecomment-1720149119) 20 | 21 | ### API Review 22 | 23 | * Is this a bugfix? 24 | * Really more of an API betterness feature 25 | * Should we wait for 17.9 so that VB analyzers have more time to react? 26 | * 17.8 comes with a new major .NET version, and new analyzers. They may need more bake time? 27 | 28 | **Conclusion**: Change is approved, will implement for 17.9 29 | -------------------------------------------------------------------------------- /2023/10-10-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/10/2023 2 | 3 | ## More granular X.509 certificate loader 4 | 5 | **NeedsWork** | [#runtime/91763](https://github.com/dotnet/runtime/issues/91763#issuecomment-1756097064) | [Video](https://www.youtube.com/watch?v=5HgJIi2dqjs&t=0h0m0s) 6 | 7 | API Review comments: 8 | 9 | Pkcs12LoaderLimits: 10 | * Add MakeReadOnly, IsReadOnly and a copy constructor 11 | * Remove AllowMultipleEncryptedSegments 12 | * IgnoreEncryptedSegments => IgnoreEncryptedItems if it's all items, IgnoreEncryptedAuthSafes if it's auth safes. 13 | * MaxCerts => MaxCertificates 14 | 15 | X509CertificateLoader: 16 | * Remove SerializedCert, SerializedStore, AuthenticodeSigner, Pkcs7PrimarySigner, and Pkcs7EmbeddedCertificates 17 | * Rename LoadX509Certificate to LoadCertificate 18 | * LoadPkcs12 => LoadPkcs12Collection 19 | * LoadPkcs12SingleCertificate => LoadPkcs12 20 | 21 | To be continued... 22 | -------------------------------------------------------------------------------- /2023/10-12-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/12/2023 2 | 3 | ## Deprecate syntax serialization logic. 4 | 5 | **Approved** | [#roslyn/70275](https://github.com/dotnet/roslyn/issues/70275#issuecomment-1760354738) 6 | 7 | ### API Review 8 | 9 | * We're ok with this deprecation 10 | * We'll try to get an `Obsolete(warning: true)` and a NFW on usage into 17.8 so we can be more sure on whether this is in use or not. 11 | 12 | **Conclusion**: Approved 13 | ## IFieldSymbol.AssociatedSymbol should return the IParameterSymbol of the primary constructor parameter, if the field is a capture 14 | 15 | **Approved** | [#roslyn/70208](https://github.com/dotnet/roslyn/issues/70208#issuecomment-1760358078) 16 | 17 | ### API Review 18 | 19 | * Should we have `AssociatedPrimaryConstructorParameter`? 20 | * We've documented the existing API as possibly changing in the future for new features. 21 | * Would require polyfilling on analyzers that support more than just the current Roslyn level. 22 | 23 | **Conclusion**: Approved 24 | ## Add support for respecting custom configured severity settings in editorconfig 25 | 26 | **Approved** | [#roslyn/52991](https://github.com/dotnet/roslyn/issues/52991#issuecomment-1760359293) 27 | 28 | ### API Review 29 | 30 | * Generally looks good 31 | * Let's rename `CustomConfigurable` to `CustomSeverityConfigurable` to be more specific about what is configurable 32 | 33 | **Conclusion** : Approved 34 | -------------------------------------------------------------------------------- /2023/10-26-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/26/2023 2 | 3 | ## Add Compilation parameter to EmitBaseline.CreateInitialBaseline (breaking change) 4 | 5 | **Approved** | [#roslyn/70413](https://github.com/dotnet/roslyn/issues/70413#issuecomment-1781863582) 6 | 7 | ### API Review 8 | 9 | * Alternative could be to have the old method work, just throw when we need it? 10 | * Probably not worth the effort 11 | * Runtime at least is going to move to the new API 12 | * Should be able to at their convenience, it's not an in-VS scenario. 13 | * Why Obsolete with a warning if it's going to throw? 14 | * Obsolete with an error, mention the new overload 15 | 16 | Approved. Make the `Obsolete` an error instead of a warning. 17 | ## Obsolete PreserveLocalVariables, add RuntimeRudeEdits 18 | 19 | **NeedsWork** | [#roslyn/70450](https://github.com/dotnet/roslyn/issues/70450#issuecomment-1781864707) 20 | 21 | ### API Review 22 | 23 | * Should we put all the optional state into a struct so we don't have to keep obsoleting old things? 24 | * `preserveLocalVariables` wasn't being used 25 | * What happens when `runtimeRudeEdit` is `null`? 26 | * Can't work in a fallback with lambdas 27 | * Don't have a clear answer at the moment, need that to understand what we should do with both old constructors. 28 | * Should `runtimeRudeEdit` have more info in the callback? 29 | * It's already a struct, we can add more info in the future as needed 30 | 31 | Needs work to understand what the fallback behavior (if any) is and how that should affect the existing backcompat overloaded constructor. We'll try to do this over email. 32 | -------------------------------------------------------------------------------- /2023/11-09-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/09/2023 2 | 3 | ## Collection expressions: IOperation support 4 | 5 | **NeedsWork** | [#roslyn/70631](https://github.com/dotnet/roslyn/issues/70631#issuecomment-1804759092) 6 | 7 | ### API Review 8 | 9 | * What level do we want these to exist on? How much abstraction? 10 | * Do we even want to show the `Add` calls in this API? 11 | * It's in a weird middle ground: Not quite the specification representation, not quite the lowered form. 12 | * Span is a good example: we may not wrap an array, and the spec doesn't say we wrap an array. 13 | * Do we even want to have the `Add` calls? 14 | * We do for regular collection initializers 15 | * Should ISpreadOperation's element be named `Element`? 16 | * Or `Operand` 17 | * For the CFG, how far do we lower? 18 | * `await` doesn't lower at all 19 | * `foreach` lowers to gotos, collection initializers lower to the series of add calls 20 | * Perhaps this should just resurface the collection expression back? 21 | * We have looser specifications on when enumerations occur, for example, and it's a bit of a disservice if the CFG conveys an ordering 22 | 23 | **Conclusion**: We'll simplify the proposal to remove these implementation details and bring it back. 24 | ## Make CompilationOptions.DebugPlus public 25 | 26 | **Approved** | [#roslyn/70670](https://github.com/dotnet/roslyn/issues/70670#issuecomment-1804759506) 27 | 28 | ### API Review 29 | 30 | * API was originally internal because we weren't sure if we wanted it... 6 years ago. 31 | * Should it be a special value on OptimizationLevel? 32 | * `DebuggableRelease`? 33 | * `ReleaseWithDebugInfo` 34 | * Are people using `Optimization.Release` in a comparison that would be broken? 35 | * Not from what we can tell 36 | 37 | **Conclusion**: We'll go with an addition to `OptimizationLevel` instead of a separate flag for this, called `ReleaseWithDebugInfo`. 38 | -------------------------------------------------------------------------------- /2023/11-17-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/17/2023 2 | 3 | ## Nullability analysis perf investigation during razor semantic classification 4 | 5 | **NeedsWork** | [#roslyn/70609](https://github.com/dotnet/roslyn/issues/70609#issuecomment-1815536958) 6 | 7 | ### API Review 8 | 9 | * How complex will it be to implement with any amount of sharing? 10 | * Could it just be a wrapper around an internal version of the proposed APIs? 11 | * Today, we have an invariant that semantic models are independent. Should this be that relationship, or is closer to the speculative semantic model relationship? 12 | * It would mean that the nullable-disabled semantic model could affect the caches of the nullable enabled one. This could be undesirable from an API perspective? 13 | * Consumption side, having different results based on order of operations; ie, don't _maybe_ give nullable info from the disabled version 14 | * Likely to result in IDE bugs that will be hard to track down. 15 | * Compiler team needs to sit down and work through the feasibility of sharing, and whether we're ok with such a relationship, before we move forward with the API. 16 | ## Collection expressions: IOperation support 17 | 18 | **Approved** | [#roslyn/70631](https://github.com/dotnet/roslyn/issues/70631#issuecomment-1815538227) 19 | 20 | ### API Review 21 | 22 | * Is there always a conversion, even if it's Identity? 23 | * If it is true, perhaps we should doc it? Not sure if it is true. 24 | * We should probably remove the conversion phrasing, we don't doc it anywhere else and as it written, it could imply that there always is. 25 | * Or add "if necessary"? 26 | * Naming 27 | * `GetItemConversion`? Spread isn't really needed in the name. 28 | * Is `Item` the right name? 29 | * Use `Element` instead 30 | 31 | **Conclusion**: Approved. Remove `Spread` from `GetSpreadItemConversion`, and change `Item`->`Element` across the board for consistency with `ForEachStatementInfo`. 32 | -------------------------------------------------------------------------------- /2023/12-07-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 12/07/2023 2 | 3 | ## Add `GetDeclaredSymbol` overload for `LocalFunctionStatementSyntax` 4 | 5 | **Approved** | [#roslyn/71028](https://github.com/dotnet/roslyn/issues/71028#issuecomment-1846178102) 6 | 7 | ### API Review 8 | 9 | * Ship it. 10 | 11 | **Conclusion**: Approved. 12 | ## Make code action's nested actions publicly accessible 13 | 14 | **Approved** | [#roslyn/71050](https://github.com/dotnet/roslyn/issues/71050#issuecomment-1846178920) 15 | 16 | ### API Review 17 | 18 | * We'll want to remove the OmniSharp EA API for this now that it's public. 19 | * Let's make sure that the naming matches what we do for creation. 20 | 21 | **Conclusion**: Approved 22 | ## Consider an alternative representation for binary expressions in the syntax model 23 | 24 | **Rejected** | [#roslyn/70865](https://github.com/dotnet/roslyn/issues/70865#issuecomment-1846179632) 25 | 26 | ### API Review 27 | 28 | * Massive breaking change for basically every roslyn api user 29 | * Can we introduce a new API for helping doing the flattening? 30 | * Would mean that the shape of the syntax tree wouldn't match the language specification 31 | * What if I wanted to ask about the type of a nested binary expression? 32 | * Where would we report errors about specific operators? 33 | * This is most commonly seen on binary operators, but can also happen in other areas 34 | * Limited nested collection expressions to 64 nesting 35 | * Long fluent call chains 36 | * Could we provide a "this is all the C# syntax" file for users? 37 | * Include things like deeply nested binary expressions so users know about it 38 | 39 | **Conclusion**: Rejected. We would consider specific helpers for flattening these types if brought, or ways to help educate users that this can happen, but changing the shape of the tree is not a route we will pursue. 40 | -------------------------------------------------------------------------------- /2024/01-04-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/04/2024 2 | 3 | ## Update DocumentationCommentId.CreateDeclarationId to return null instead of throw. 4 | 5 | **Approved** | [#roslyn/71460](https://github.com/dotnet/roslyn/issues/71460#issuecomment-1877810818) 6 | 7 | ### API Review 8 | 9 | * Should we instead make a `TryCreate` version? 10 | * Can only impact cases that use exceptions for null arguments 11 | * Should a `Try` version throw on `null` input? 12 | * What would we decide if we were to make the API today? Return `null` or `Try` pattern? 13 | * We'll (narrowly) go with the pattern as proposed, altering the existing API. For new APIs, we'd probably prefer the `Try` pattern, but pragmatism drives us to modifying the existing API. 14 | 15 | **Conclusion**: API request is approved 16 | -------------------------------------------------------------------------------- /2024/01-18-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/18/2024 2 | 3 | ## Update roslyn syntax list constructs to support collection expressions. 4 | 5 | **Approved** | [#roslyn/71596](https://github.com/dotnet/roslyn/issues/71596#issuecomment-1899302795) 6 | 7 | ### API Review 8 | 9 | * We love it. 10 | * It will allow `params` usage for these types. 11 | * Let's make sure we get all of our constructible list types, not just `SyntaxList`. 12 | * We'll confirm with the runtime team about recommended naming conventions to make sure that we're naming this inline with the BCL. 13 | 14 | **Conclusion**: Approved. 15 | ## Nullability analysis perf investigation during razor semantic classification 16 | 17 | **Approved** | [#roslyn/70609](https://github.com/dotnet/roslyn/issues/70609#issuecomment-1899328965) 18 | 19 | ### API Review 20 | 21 | * If we don't intend to do sharing, the API design should probably not imply that sharing can occur, which is why it's structured as it is. 22 | * Do we have data demonstrating that we will benefit from sharing? 23 | * Should we instead investigate doing sharing across _all_ semantic models? 24 | * May be less brittle in the long term? 25 | * Can we lean on ExperimentalAttribute so we can do some A/B testing and see larger trends? 26 | * We prefer the `SemanticModelOptions` approach to avoid a continuously-evolving list of flags 27 | 28 | **Approved in experiment**: We'll approve the alternative version of this proposal in experiment for now, and revisit the final design when we have real-world A/B data. 29 | -------------------------------------------------------------------------------- /2024/02-01-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/01/2024 2 | 3 | ## Add `IParameterSymbol.IsParamCollection` property 4 | 5 | **Approved** | [#roslyn/71816](https://github.com/dotnet/roslyn/issues/71816#issuecomment-1922332863) 6 | 7 | ### API Review 8 | 9 | * Only C# will recognize these extra types as `params` parameters 10 | * Naming with an `s`? 11 | * We've gone with C# naming for these in the past 12 | * Could consider an enum option if we think there could be more `params` things in the future? 13 | * Considered for completeness, not particularly caring 14 | * IDE usage seems like it would be fine with option 3, and may be the easiest to absorb. 15 | * There's at least one case in the IDE codebase that does a hard cast 16 | * `params` can be put on bad things in source, would analyzers have to handle this already? 17 | * The cast will now break on _correct_ code, which it would not have before 18 | * Going through references in grep.app, nearly all would be better served by option 3. Only one example of obviously bad code in the presence of option 3. 19 | * Given this, we prefer option 3 20 | 21 | **Conclusion**: We will go with option 3, with `IsParamsArray` and `IsParamsCollection` as the property names. 22 | -------------------------------------------------------------------------------- /2024/02-27-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/27/2024 2 | 3 | ## Add support for converting the format of a Bitmap 4 | 5 | **Approved** | [#winforms/8827](https://github.com/dotnet/winforms/issues/8827#issuecomment-1967454163) | [Video](https://www.youtube.com/watch?v=LIXgbP4Qxh0&t=0h0m0s) 6 | 7 | ```C# 8 | namespace System.Drawing.Imaging 9 | { 10 | public enum PaletteType 11 | { 12 | Custom, 13 | FixedBlackAndWhite, 14 | FixedHalftone8, 15 | FixedHalftone27, 16 | FixedHalftone64, 17 | FixedHalftone125, 18 | FixedHalftone216, 19 | FixedHalftone252, 20 | FixedHalftone256 21 | } 22 | 23 | public enum DitherType 24 | { 25 | None, 26 | Solid, 27 | ErrorDiffusion, 28 | Ordered4x4, 29 | Ordered8x8, 30 | Ordered16x16, 31 | Spiral4x4, 32 | Spiral8x8, 33 | DualSpiral4x4, 34 | DualSpiral8x8 35 | } 36 | 37 | public sealed class ColorPalette 38 | { 39 | public ColorPalette(params Color[] customColors); 40 | public ColorPalette(PaletteType fixedPaletteType); 41 | public static ColorPalette CreateOptimalPalette(int colors, 42 | bool useTransparentColor, 43 | Bitmap bitmap); 44 | } 45 | } 46 | 47 | namespace System.Drawing 48 | { 49 | public sealed class Bitmap : System.Drawing.Image 50 | { 51 | public void ConvertFormat(PixelFormat format); 52 | public void ConvertFormat(PixelFormat format, 53 | DitherType ditherType, 54 | PaletteType paletteType = PaletteType.Custom, 55 | ColorPalette? palette = null, 56 | float alphaThresholdPercent = 0.0f); 57 | } 58 | } 59 | ``` 60 | -------------------------------------------------------------------------------- /2024/02-29-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 02/29/2024 2 | 3 | ## Add public API to obtain a location specifier for a call 4 | 5 | **NeedsWork** | [#roslyn/72133](https://github.com/dotnet/roslyn/issues/72133#issuecomment-1972075512) 6 | 7 | ### API Review 8 | 9 | * Do we need to put the API on the GeneratorSyntaxContext, or should it go in a more broad location? 10 | * What if the user doesn't know the `hintName` yet in this stage of the pipeline? 11 | * Important scenario for generators is that users can switch on `EmitGeneratedFiles`, then check 12 | in the files. That won't seem to work here? 13 | * Compiler provides an option to control where the generated source is emitted 14 | * Could we just specify from the root of the project? 15 | * This would potentially also allow us to not need the `hintName` of the generated file, which could simplify the API. 16 | * Could we have `GetInterceptsLocationSpecifier` return the _entire_ globally-qualified attribute? 17 | * Seems odd that we'd save the user typing and escaping the string, but then still require them to specify the attribute? 18 | * Users may be trying to make the attribute look prettier, handling imports and the like. 19 | * Perhaps we may want to have a general "give me a string literal that represents this string value" API 20 | * Can we have "handle" based approach that the compiler has more knowledge of? So that if only the location 21 | changes, the compiler can understand this, and not rerun everything? 22 | * Complex topic. Maybe possible, but pretty hard. 23 | * We may also want to look into a `ForMethodWithName` approach for interceptors which could further optimize this path. 24 | -------------------------------------------------------------------------------- /2024/03-14-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 03/14/2024 2 | 3 | ## Module cancellation and stack probing instrumentations 4 | 5 | **Approved** | [#roslyn/71961](https://github.com/dotnet/roslyn/issues/71961) 6 | 7 | -------------------------------------------------------------------------------- /2024/03-28-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 03/28/2024 2 | 3 | ## Add public API to obtain a location specifier for a call 4 | 5 | **Approved** | [#roslyn/72133](https://github.com/dotnet/roslyn/issues/72133#issuecomment-2026064540) 6 | 7 | ### API Review 8 | 9 | - Why do we need `Version` and `Data`? 10 | - Because we want to allow users to pretty-print the attribute 11 | - We should document the guarantees around `Data`: 12 | - Will need no escaping to use as string content 13 | - Specify the type of string (regular, verbatim, etc) 14 | - Should we make InterceptableLocation an abstract class now so that we can add new internal derived types later? 15 | - Likely not a breaking change given how roslyn emits method calls, but fine to do anyways. 16 | - Make the constructor internal or private protected so it can't be inherited publicly 17 | - Move GetInterceptsLocationAttributeSyntax to an extension? 18 | - Should be fine, it's essentially a helper. 19 | 20 | **Conclusion**: Modulo the move to an abstract type and GetInterceptsLocationAttributeSyntax, this is approved. 21 | -------------------------------------------------------------------------------- /2024/05-09-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/09/2024 2 | 3 | ## SyntaxTokenParser API Additions 4 | 5 | **Approved** | [#roslyn/73002](https://github.com/dotnet/roslyn/issues/73002#issuecomment-2103415731) 6 | 7 | ### API Review 8 | 9 | * Do we have a concern that SyntaxKind.None and IsMissing would cause code to misbehave? 10 | * This is a fairly specialized API, unlikely to be used in existing codepaths unintentionally. 11 | 12 | **Conclusion**: Approved 13 | ## New APIs to support "Ref Struct Interfaces" feature 14 | 15 | **Approved** | [#roslyn/73330](https://github.com/dotnet/roslyn/issues/73330#issuecomment-2103416395) 16 | 17 | ### API Review 18 | 19 | * Naming of `Allows` vs `Allow`? 20 | * English prefers allows here 21 | * Shakespeare's famous question: "To By or not to By?" 22 | * For consistency with `ITypeSymbol.IsRefLikeType`, we'll name it `ITypeParameterSymbol.AllowsRefLikeType` 23 | 24 | **Conclusion**: Approved, with the rename of to `ITypeParameterSymbol.AllowsRefLikeType`. The `RuntimeCapability` name is approved as-is. 25 | -------------------------------------------------------------------------------- /2024/05-23-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/23/2024 2 | 3 | ## Public API for partial properties 4 | 5 | **Approved** | [#roslyn/73411](https://github.com/dotnet/roslyn/issues/73411#issuecomment-2128000031) 6 | 7 | ### API Review 8 | 9 | - `IsPartialDefinition` 10 | - What about error scenarios where only the definition exists? 11 | - This will be particularly common for SG scenarios 12 | 13 | **Conclusion**: Approved, with the addition of `IsPartialDefinition`. 14 | ## New syntax related APIs to support "Ref Struct Interfaces" feature 15 | 16 | **Approved** | [#roslyn/73552](https://github.com/dotnet/roslyn/issues/73552#issuecomment-2128000873) 17 | 18 | ### API Review 19 | 20 | - Some discussion on whether to make the clause a single element, rather than a list of elements 21 | - Wouldn't keep the future-proofing if LDM ever wants `allows ref struct, pointer` 22 | 23 | **Conclusion**: Approved 24 | -------------------------------------------------------------------------------- /2024/06-20-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/20/2024 2 | 3 | ## .AsIncrementalGenerator extension method 4 | 5 | **Approved** | [#roslyn/74039](https://github.com/dotnet/roslyn/issues/74039#issuecomment-2181510827) 6 | 7 | ### API Review 8 | 9 | * Can the original creator not maintain a reference to the original? 10 | * The original creator is the analyzer runner itself, we don't have access to that in the tooling. 11 | 12 | **Conclusion**: Approved. 13 | ## Run a single generator at a time 14 | 15 | **Approved** | [#roslyn/74086](https://github.com/dotnet/roslyn/issues/74086#issuecomment-2181511065) 16 | 17 | ### API Review 18 | 19 | * We think a multiple-generator option is the better approach given balanced mode may want to run multiple generators in the future 20 | * We'll change the filter parameter to have a context future-proofing the signature 21 | * We'll also reorder the parameters to put the `Func` second and make it non-optional 22 | 23 | ```cs 24 | public GeneratorDriver RunGenerators(Compilation compilation, Func generatorFilter, CancellationToken cancellationToken = default); 25 | ``` 26 | 27 | **Conclusion**: Above API shape is approved. 28 | -------------------------------------------------------------------------------- /2024/08-01-aspnet-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/01/2024 2 | 3 | ## WebSocket keep-alive timeout API 4 | 5 | **Approved** | [#aspnetcore/57072](https://github.com/dotnet/aspnetcore/issues/57072#issuecomment-2264114693) 6 | 7 | - What are the default values? 8 | - We can, but don't have to, use the same ones as runtime 9 | - We also have KestrelServerLimits.KeepAliveTimeout 10 | - It doesn't accept 0 11 | - It defaults to 130 seconds 12 | - What value do we use to express that there is no timeout? 13 | - MaxValue? 14 | - 0? 15 | - Timeout.InfiniteTimeSpan? 16 | - Validate with a test that passing MaxValue doesn't break things (regardless of whether it means no timeout) 17 | - A comment on the runtime PR suggests it was Ping before it was Pong 18 | 19 | API Approved! 20 | -------------------------------------------------------------------------------- /2024/08-15-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/15/2024 2 | 3 | ## RegisterHostOutputs 4 | 5 | **Approved** | [#roslyn/74753](https://github.com/dotnet/roslyn/issues/74753#issuecomment-2292218955) 6 | 7 | ### API Review 8 | 9 | * What if we just used the existing named step tracking infrastructure? 10 | * This is a generator testing component, not a strong guarantee of a contract. 11 | * Better to have an API that intentionally defines an output component, rather than exposing internal generator details 12 | * Would this be related to supplemental file generation? 13 | * We don't think so. Those would be tied to semantics of being a file, and this should not be. 14 | * By switching to `object`, we are saying that we won't be serializing anything here. 15 | * Yup. People want to use host outputs in VS are going to have to come talk to us 16 | * Arguments to using a `ImmutableDictionary`: 17 | * Making it appear to be key/value without it actually being a dictionary is a bit odd. 18 | * What would the ordering be if we did `ImmutableArray<(string, object)>`? 19 | * Making it a dictionary will match behavior around file hint names 20 | 21 | **Conclusion**: API is approved. We will use an `ImmutableDictionary` for the host outputs, rather than an array. 22 | -------------------------------------------------------------------------------- /2024/08-20-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/20/2024 2 | 3 | ## ArrayRecord.TotalElementsCount 4 | 5 | **Approved** | [#runtime/106644](https://github.com/dotnet/runtime/issues/106644#issuecomment-2299397896) | [Video](https://www.youtube.com/watch?v=BWMC5Xh4piI&t=0h0m0s) 6 | 7 | * We renamed TotalElementsCount to FlattenedLength to match the same concept on TensorSpan 8 | * The hierarchy is closed, so virtual or not is author's discretion. 9 | 10 | ```C# 11 | namespace System.Formats.Nrbf; 12 | 13 | public abstract partial class ArrayRecord : SerializationRecord 14 | { 15 | public virtual long FlattenedLength { get; } 16 | } 17 | ``` 18 | ## AsnWriter Encode with callback 19 | 20 | **Approved** | [#runtime/75759](https://github.com/dotnet/runtime/issues/75759#issuecomment-2299433962) | [Video](https://www.youtube.com/watch?v=BWMC5Xh4piI&t=0h30m15s) 21 | 22 | 23 | * We talked about the consequences and future upgradability of TReturn not being `allows ref struct`, and are good with it as proposed. 24 | 25 | ```C# 26 | namespace System.Formats.Asn1; 27 | 28 | public partial class AsnWriter { 29 | #if NET9_0_OR_GREATER 30 | public TReturn Encode(Func, TReturn> encodeCallback); 31 | public TReturn Encode(TState state, Func, TReturn> encodeCallback) 32 | where TState : allows ref struct; 33 | #endif 34 | } 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /2024/08-29-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 08/29/2024 2 | 3 | ## Add ErrorCode to RuntimeRudeEdit 4 | 5 | **Approved** | [#roslyn/74666](https://github.com/dotnet/roslyn/issues/74666#issuecomment-2318909856) 6 | 7 | ### API Review 8 | 9 | * Add EditorDisplay(Never) 10 | 11 | **Approved** 12 | ## Add ProjectInfo.WithId 13 | 14 | **Approved** | [#roslyn/74665](https://github.com/dotnet/roslyn/issues/74665#issuecomment-2318910578) 15 | 16 | ### API Review 17 | 18 | * Should we add `Solution.WithId` for consistency? 19 | * No use cases 20 | 21 | **Approved** 22 | ## API: `Conversion.IsSpan` 23 | 24 | **Approved** | [#roslyn/74738](https://github.com/dotnet/roslyn/issues/74738#issuecomment-2318911627) 25 | 26 | ### API Review 27 | 28 | **Approved** 29 | ## Syntax changes for `field` keyword 30 | 31 | **Approved** | [#roslyn/74937](https://github.com/dotnet/roslyn/issues/74937#issuecomment-2318912849) 32 | 33 | ### API Review 34 | 35 | * Naming is consistent with previous examples like `ThisExpressionSyntax` and `BaseExpressionSyntax` 36 | 37 | **Approved** 38 | -------------------------------------------------------------------------------- /2024/09-06-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 09/06/2024 2 | 3 | ## API: Analyzer redirecting 4 | 5 | **NeedsWork** | [#roslyn/74989](https://github.com/dotnet/roslyn/issues/74989#issuecomment-2334871473) 6 | 7 | ### API Review 8 | 9 | * What assembly should this go in? 10 | * Workspaces may be nice? 11 | * Does the IDE need to be able to know the real paths involved? 12 | * Will VBCS compiler need to do the mapping as well? 13 | * We can't currently think of a reason 14 | * Seems like using in the compiler layer outside of VS might break MSBuild incremental builds? 15 | * If it goes in the workspaces layer, we can potentially make it internal, which seems like a nice benefit. 16 | * Should it be async? 17 | * Single, full paths aren't great. 18 | * Should we try to design something for multiple? 19 | * There is an implicit contract that everything in one folder needs to redirect to another folder. 20 | * The assembly load would already work fine if they end up in different ALCs, because of backcompat requirements. 21 | 22 | **Conclusion**: Investigate making the API internal in the workspaces layer. 23 | -------------------------------------------------------------------------------- /2024/10-01-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/01/2024 2 | 3 | ## It should be possible to specify `JsonIgnoreCondition`'s on the type level 4 | 5 | **Approved** | [#runtime/108231](https://github.com/dotnet/runtime/issues/108231#issuecomment-2386577955) | [Video](https://www.youtube.com/watch?v=pxItI3kOOJU&t=0h0m0s) 6 | 7 | * Looks good as proposed 8 | 9 | ```C# 10 | namespace System.Text.Json.Serialization; 11 | 12 | // Before: 13 | // 14 | // [AttributeUsage(AttributeTargets.Property | 15 | // AttributeTargets.Field, AllowMultiple = false)] 16 | // 17 | [AttributeUsage(AttributeTargets.Class | 18 | AttributeTargets.Struct | 19 | AttributeTargets.Interface | 20 | AttributeTargets.Property | 21 | AttributeTargets.Field, AllowMultiple = false)] 22 | public partial class JsonIgnoreAttribute; 23 | ``` 24 | ## STJ should allow setting naming policies on the member level. 25 | 26 | **Approved** | [#runtime/108232](https://github.com/dotnet/runtime/issues/108232#issuecomment-2386591306) | [Video](https://www.youtube.com/watch?v=pxItI3kOOJU&t=0h23m43s) 27 | 28 | * Looks good as proposed 29 | * @eiriktsarpalis should we update `JsonNumberHandlingAttribute` to support `AttributeTargets.Interface`? 30 | 31 | ```C# 32 | namespace System.Text.Json.Serialization; 33 | 34 | [AttributeUsage(AttributeTargets.Class | 35 | AttributeTargets.Struct | 36 | AttributeTargets.Interface | 37 | AttributeTargets.Property | 38 | AttributeTargets.Field, AllowMultiple = false)] 39 | public class JsonNamingPolicyAttribute : JsonAttribute 40 | { 41 | public JsonNamingPolicy(JsonKnownNamingPolicy namingPolicy); 42 | protected JsonNamingPolicy(JsonNamingPolicy namingPolicy); 43 | public JsonNamingPolicy NamingPolicy { get; } 44 | } 45 | ``` 46 | 47 | -------------------------------------------------------------------------------- /2024/10-10-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 10/10/2024 2 | 3 | ## Make GeneratorDriverOptions.BaseDirectory public 4 | 5 | **Approved** | [#roslyn/75387](https://github.com/dotnet/roslyn/issues/75387#issuecomment-2406014762) 6 | 7 | ### API Review 8 | 9 | - Are there hosts that don't are about the base path? Should we leave the existing driver options alone? 10 | - Let's not obsolete the existing constructors 11 | - Will this have impacts to users in the IDE? Will it cause the IDE to show things that don't exist? 12 | - Should the syntax tree have 2 paths, one relative and one absolute? 13 | - We already have cases in the IDE where have documents with paths, but those paths don't actually exist 14 | - Compiler paths aren't exposed anywhere else, why is this different? 15 | - Differing layers of the compiler: this is not the main compiler loop. Source generated files are 16 | an intermediate layer that then gets fed into the file compilation. 17 | - This argument is convincing 18 | - Esoteric hypothetical: what would the path be if the interactive window ran a generator? 19 | - Interactive would create some non-existant file paths based on the current submission 20 | - EmitOptions works on strings as well, so using strings for the path here works as well 21 | 22 | **Conclusion**: Original design is approved, minus obsoleting the existing constructors. 23 | ## Add GeneratedFilesOutputDirectory to Solution APIs 24 | 25 | **Approved** | [#roslyn/75389](https://github.com/dotnet/roslyn/issues/75389#issuecomment-2406015193) 26 | 27 | ### API Review 28 | 29 | - This reflects the compiler generated files path and comes from the project system, not the compiler 30 | 31 | **Conclusion**: API is approved 32 | -------------------------------------------------------------------------------- /2024/11-07-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 11/07/2024 2 | 3 | ## Preprocessing symbol APIs 4 | 5 | **Approved** | [#roslyn/66510](https://github.com/dotnet/roslyn/issues/66510#issuecomment-2463238232) 6 | 7 | ### API Review 8 | 9 | * No issues with the proposed API. 10 | 11 | **Conclusion**: Approved. 12 | -------------------------------------------------------------------------------- /2024/12-05-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 12/05/2024 2 | 3 | ## Add information to `IDeconstructionAssignmentOperation` about the conversions and methods involved when performing the operation. 4 | 5 | **Approved** | [#roslyn/74757](https://github.com/dotnet/roslyn/issues/74757#issuecomment-2521491844) 6 | 7 | ### API Review 8 | 9 | * Could we just have the extension method? 10 | * Wouldn't work well. The pain point is that we have to do language-specifics 11 | * Names look good and match up with existing public API for DeconstructionInfo. 12 | * If we need to, we'll look at calculating for CommonDeconstructionInfo lazily to avoid expensive work. 13 | 14 | **Conclusion**: Approved 15 | -------------------------------------------------------------------------------- /2025/01-16-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 01/16/2025 2 | 3 | ## `IncrementalGeneratorPostInitializationContext.AddEmbeddedAttributeDefinition` 4 | 5 | **Approved** | [#roslyn/76584](https://github.com/dotnet/roslyn/issues/76584#issuecomment-2596945826) 6 | 7 | ### API Review 8 | 9 | * We don't think that this should be used as a justification for other polyfills, such as nullability attributes downlevel. 10 | * If the BCL ever decides to add a public EmbeddedAttribute definition, there will need to be more work done in general to permit the definition and honor it, and we adjust the implementation of this method at that point. 11 | 12 | **Conclusion**: Approved. 13 | -------------------------------------------------------------------------------- /2025/04-01-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/01/2025 2 | 3 | ## API for IgnoredDirectiveTrivia 4 | 5 | **Approved** | [#roslyn/77697](https://github.com/dotnet/roslyn/issues/77697#issuecomment-2770195306) 6 | 7 | ### API Review 8 | 9 | * Does consistency win on the trivia aspect? 10 | * Could we make Shebang also consistent? 11 | * We could add a calculated property to Shebang that will do the digging for the user? 12 | * Would that also need a SyntaxFactory overload? 13 | * We like the idea of shimming Shebang for consistency. 14 | * We like the name Content, it matches with other comment field names. 15 | 16 | **Approved**: We will add an explicit `Content` token to `IgnoredDirective`. We will add a calculated property `Content` to `ShebangDirective`. We will add a `SyntaxFactory` method for `ShebangDirective` that matches the signature of the full factory method for `IgnoredDirective`. 17 | -------------------------------------------------------------------------------- /2025/04-10-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 04/10/2025 2 | 3 | ## Need an API to get the 'iteration type' of a type. 4 | 5 | **Approved** | [#roslyn/77926](https://github.com/dotnet/roslyn/issues/77926#issuecomment-2795109736) 6 | 7 | ### API Review 8 | 9 | * Haven't done a VB check 10 | * We don't really need it in VB 11 | * It is iteration type, which VB does have. Signature seems fine for VB, we can address further in code review. 12 | * If there is no iteration type, the desire would be `null` return 13 | 14 | **Conclusion**: Approved 15 | -------------------------------------------------------------------------------- /2025/05-06-quick-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 05/06/2025 2 | 3 | ## Expose Vector Dataype in SqlDbType 4 | 5 | **Approved** | [#runtime/115148](https://github.com/dotnet/runtime/issues/115148#issuecomment-2852839590) 6 | 7 | Looks good as proposed. Approved via email (trivial addition) 8 | 9 | ```C# 10 | namespace System.Data 11 | { 12 | // Specifies the SQL Server data type. 13 | public enum SqlDbType 14 | { 15 | Vector = 36, 16 | } 17 | } 18 | ``` 19 | -------------------------------------------------------------------------------- /2025/06-03-roslyn-reviews/README.md: -------------------------------------------------------------------------------- 1 | # API Review 06/03/2025 2 | 3 | ## New APIs for "User Defined Compound Assignment Operators" feature 4 | 5 | **Approved** | [#roslyn/78468](https://github.com/dotnet/roslyn/issues/78468#issuecomment-2936314258) 6 | 7 | ### API Review 8 | 9 | * Update from the feature around conflicts. 10 | 11 | **Conclusion**: Approved 12 | ## Add CommandLineResource API 13 | 14 | **Approved** | [#roslyn/78678](https://github.com/dotnet/roslyn/issues/78678#issuecomment-2936323757) 15 | 16 | ### API Review 17 | 18 | * Part of the issue is that `ResourceDescription` has callbacks that can read from a stream, which can be expensive. At the very least, creating one creates a `Func` callback for reading. 19 | * This is why we want a new property, not adding something on the existing one. Similar to other instances of adding a new property that is preferred for most scenarios over an existing property for perf reasons. 20 | * The change refactored the command line API to not construct `ResourceDescription`s until actually accessed, only creating the new `CommandLineResource` by default 21 | * We want to make `ToDescription` internal, not public. 22 | 23 | **Conclusion**: Approved with `ToDescription` being internal instead 24 | ## Extensions: public API for extension syntax in CREF 25 | 26 | **Approved** | [#roslyn/78738](https://github.com/dotnet/roslyn/issues/78738#issuecomment-2936391836) 27 | 28 | ### API Review 29 | 30 | * Based on the current proposed design, still needs to be looked at by LDM. 31 | * We're fine with it as currently proposed, but any changes from LDM will need to be ratified. Can likely be done over email. 32 | 33 | **Conclusion**: Tentatively approved 34 | -------------------------------------------------------------------------------- /CODE-OF-CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | This project has adopted the code of conduct defined by the Contributor Covenant 4 | to clarify expected behavior in our community. 5 | 6 | For more information, see the [.NET Foundation Code of Conduct](https://dotnetfoundation.org/code-of-conduct). 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Microsoft Corporation 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # API Review Notes 2 | 3 | This repository contains the notes and API differences that we reviewed. 4 | 5 | ## Contribution 6 | 7 | This repo is maintained by the API review team and serves as a way to contribute 8 | the notes after the reviews took place. 9 | 10 | The way you contribute to this is by proposing APIs to be added. To do this, 11 | you simply follow the contribution process as 12 | [described here](https://aka.ms/apireview). 13 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | The .NET Core and ASP.NET Core support policy, including supported versions can be found at the [.NET Core Support Policy Page](https://dotnet.microsoft.com/platform/support/policy/dotnet-core). 6 | 7 | ## Reporting a Vulnerability 8 | 9 | Security issues and bugs should be reported privately to the Microsoft Security Response Center (MSRC), either by emailing secure@microsoft.com or via the portal at https://msrc.microsoft.com. 10 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your 11 | original message. Further information, including the MSRC PGP key, can be found in the [MSRC Report an Issue FAQ](https://www.microsoft.com/en-us/msrc/faqs-report-an-issue). 12 | 13 | Reports via MSRC may qualify for the .NET Core Bug Bounty. Details of the .NET Core Bug Bounty including terms and conditions are at [https://aka.ms/corebounty](https://aka.ms/corebounty). 14 | 15 | Please do not open issues for anything you think might have a security implication. --------------------------------------------------------------------------------