csharplang/proposals
AlekseyTs b3490452ab
Update ref-struct-interfaces.md (#8024)
* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

* Update proposals/ref-struct-interfaces.md

Co-authored-by: Cyrus Najmabadi <cyrus.najmabadi@gmail.com>

* Apply suggestions from code review

Co-authored-by: Charles Stoner <10732005+cston@users.noreply.github.com>

* Update ref-struct-interfaces.md

* Update ref-struct-interfaces.md

---------

Co-authored-by: Cyrus Najmabadi <cyrus.najmabadi@gmail.com>
Co-authored-by: Charles Stoner <10732005+cston@users.noreply.github.com>
2024-04-08 05:39:34 -07:00
..
csharp-6.0 Create empty-params-array.md 2020-09-03 14:44:12 -07:00
csharp-7.0 Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00
csharp-7.1 Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00
csharp-7.2 `modreq(In)` is not applied to delegate `Invoke` (#7366) 2023-08-01 08:31:52 +02:00
csharp-7.3 Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00
csharp-8.0 Add include disclaimer for speclets (#7292) 2023-06-21 10:53:36 -04:00
csharp-9.0 Fix ECMA links 2023-09-26 16:09:19 -07:00
csharp-10.0 Fix broken links - wiwagn (#7979) 2024-03-01 08:15:15 -05:00
csharp-11.0 Clarify return-only behavior (#7692) 2023-11-15 14:38:53 -08:00
csharp-12.0 Collection expressions: require Add method callable with a single argument for class and struct types that do not use [CollectionBuilder] (#8022) 2024-03-29 11:09:57 -07:00
inactive Add folders and READMEs 2017-01-27 11:02:27 -08:00
rejected Create inline-arrays.md (#7064) 2023-04-14 13:09:29 -07:00
README.md Fix dead links (#4525) 2021-03-11 10:10:25 -08:00
breaking-change-warnings.md Update breaking-change-warnings.md 2024-02-08 15:48:45 -06:00
collection-expressions-next.md Collection expressions: limit proposal to C#12 only (#7450) 2023-08-11 13:34:58 -07:00
declaration-expressions.md markdown fixes 2019-03-06 22:28:47 -08:00
dictionary-expressions.md Create dictionary-expressions.md 2024-03-11 14:33:50 -07:00
discriminated-unions.md Updated records in proposal "discriminated-unions" (#4014) 2020-10-15 10:51:54 -07:00
expand-ref.md Expanding ref support (#7555) 2023-10-30 15:01:13 -07:00
extensions.md Add details to lookup rules for for extensions (#7179) 2024-03-05 10:50:52 -08:00
first-class-span-types.md Add first-class span types proposal (#7904) 2024-02-20 13:15:46 -08:00
format.md Remove redirect query param from link (#7557) 2023-09-26 15:57:42 -07:00
intptr-operators.md markdown fixes 2019-03-07 10:00:39 -08:00
intrinsics.md Fixed typos (#2167) 2019-02-12 13:45:25 -08:00
list-patterns-enumerables.md Split list patterns on enumerables (#4793) 2021-05-30 22:02:01 -07:00
lock-object.md Update `Lock` object speclet (#7989) 2024-03-13 10:13:30 +01:00
low-level-struct-improvements.md Add placeholder/link file 2022-10-10 11:34:22 -07:00
method-group-natural-type-improvements.md Rename proposal for method group natural type improvements (#7430) 2023-08-08 12:17:07 -07:00
null-conditional-assignment.md Address null-conditional-assignment proposal feedback (#6635) 2022-11-03 11:06:08 -07:00
null-conditional-await.md Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00
nullable-constructor-analysis.md Update nullable-constructor-analysis.md (#3794) 2020-08-13 16:29:11 -07:00
nullable-enhanced-common-type.md Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00
nullable-parameter-default-value-analysis.md Add nullable parameter default proposal (#4101) 2020-11-06 09:57:45 -08:00
params-collections.md Collection expressions: require Add method callable with a single argument for class and struct types that do not use [CollectionBuilder] (#8022) 2024-03-29 11:09:57 -07:00
params-span.md Update params-span.md following LDM 2022-11-30 (#6784) 2022-12-19 16:45:50 -08:00
pattern-variables.md Allow types to differ in terms of nullability (#6556) 2022-10-17 14:33:48 -07:00
pointer-null-coalescing.md Added mention ??= rules 2020-07-07 09:48:49 -04:00
proposal-template.md Remove abbreviations from the text (#68) 2017-02-13 14:59:12 -08:00
readonly-locals.md fix formatting 2019-03-07 10:03:08 -08:00
readonly-parameters.md Proposal for `readonly` parameters (#7322) 2023-07-19 10:02:27 -07:00
ref-out-lambda-params.md Update ref-out-lambda-params.md 2024-02-20 12:42:18 -08:00
ref-struct-interfaces.md Update ref-struct-interfaces.md (#8024) 2024-04-08 05:39:34 -07:00
ref-unsafe-in-iterators-async.md Add proposal for "ref and unsafe in iterators and async" (#7994) 2024-04-02 11:43:57 +02:00
repeated-attributes.md Fix dead links (#4525) 2021-03-11 10:10:25 -08:00
self-constraint.md Update proposals/self-constraint.md 2021-11-11 10:07:31 -08:00
semi-auto-properties.md Add link to LDM history (#6088) 2022-05-03 10:10:20 -07:00
speclet-disclaimer.md refine speclet disclaimer language (#7990) 2024-03-07 13:57:02 -05:00
variance-safety-for-static-interface-members.md Update links to the spec documents to point to the ECMA standard draft (#5739) 2022-02-18 12:11:35 -05:00

README.md

C# Language Proposals

Language proposals are living documents describing the current thinking about a given language feature.

Proposals can be either active, inactive, rejected or done. Active proposals are stored directly in the proposals folder, inactive and rejected proposals are stored in the inactive and rejected subfolders, and done proposals are archived in a folder corresponding to the language version they are part of.

Lifetime of a proposal

A proposal starts its life when the language design team decides that it might make a good addition to the language some day. Typically it will start out being active, but if we want to capture an idea without wanting to work on it right now, a proposal can also start out in the inactive subfolder. Proposals may even start out directly in the rejected state, if we want to make a record of something we don't intend to do. For instance, if a popular and recurring request is not possible to implement, we can capture that as a rejected proposal.

The proposal may start out as an idea in a discussion issue, or it may come from discussions in the Language Design Meeting, or arrive from many other fronts. The main thing is that the design team feels that it should be done, and that there's someone who is willing to write it up. Typically a member of the Language Design Team will assign themselves as a champion for the feature, tracked by a Champion issue. The champion is responsible for moving the proposal through the design process.

A proposal is active if it is moving forward through design and implementation toward an upcoming release. Once it is completely done, i.e. an implementation has been merged into a release and the feature has been specified, it is moved into a subdirectory corresponding to its release.

If a feature turns out not to be likely to make it into the language at all, e.g. because it proves unfeasible, does not seem to add enough value or just isn't right for the language, it will be rejected. If a feature has reasonable promise but is not currently being prioritized to work on, it may be declared inactive to avoid cluttering the main folder. It is perfectly fine for work to happen on inactive or rejected proposals, and for them to be resurrected later. The categories are there to reflect current design intent.

Nature of a proposal

A proposal should follow the proposal template. A good proposal should:

  • Fit with the general spirit and aesthetic of the language.
  • Not introduce subtly alternate syntax for existing features.
  • Add a lot of value for a clear set of users.
  • Not add significantly to the complexity of the language, especially for new users.

Discussion of proposals

Feedback and discussion happens in discussion issues. When a new proposal is added to the proposals folder, it should be announced in a discussion issue by the champion or proposal author.