You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Merge all features related to C# 7 ref features (#795)
* Add rules for `ref` safety (#742)
* first pass at safety rules
This mostly incorporates the feature spec language.
* Add rule for `out` parameters
Out parameters have a ref safe to escape scope of the current method, not the calling method.
* Add readonly rule.
* fix headers
no code fences in headers
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* updates from reviews
Updates from code review
* style fix
* respond to feedback
Ref like fields do have storage, but that storage may refer to a variable that is a struct parameter or varialbe.
* respond to feedback
Respond to existing feedback.
* Introduce definitions
Introduce better definitions for the "lifetime" of reference variables. I avoided the term "lifetime' because of its runtime connotation. Instead, I used the "scope" where a "variable declaration" is valid.
From there, next define the safe scopes and the ref safe scopes for different variable classifications.
Finally, I shortened the terms *safe-to-escape-scope* and *ref-safe-to-escape-scope* to "*safe-scope* and *ref-safe-scope*. The text doesn't make it clear why the "escape" term is used, and it doesn't seem to add clarity.
* add examples
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* address review comments
This addresses most of the comments in the most recent reviews.
The next commit will make an attempt to use a single term for *ref_safe_scope*.
* Remove *safe_scope* rules
Once I push these, I'll add notes about which rules must be added to #601
* Update standard/variables.md
Co-authored-by: Nigel-Ecma <[email protected]>
* Update standard/variables.md
* Respond to review comments.
* Feedback from April meeting
This include comments, and fixing the formatting after consulting with Rex.
* remove ref struct descriptions
These belong in the PR for ref structs, and in the section on ref structs.
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Nigel-Ecma <[email protected]>
* remove missing xref
This needs to be added to #213 once this PR is merged.
* Updates from 5/17 meeting.
Updates from the 5/17 meeting.
* fix build warning
---------
Co-authored-by: Jon Skeet <[email protected]>
Co-authored-by: Nigel-Ecma <[email protected]>
* C# 7.x: ref struct (#601)
* Split out `ref struct` from #33.
* Add ref safety rules as they apply to ref structs
Declare that `ref structs` have a *ref_safe_scope* that matches their initializing expressions. Restrict copying of a `ref struct` (by value) to its *ref_safe_scope*. Then, define what the *ref_safe_scope* is depending on the initializing expression.
* forgot to finish one sentence.
* Add note on iterators and async methods
The previous normative language was
* respond to review feedback.
* Respond to meeting feedback, part 1
Respond to all meeting feedback *except* updating the rules on *safe_to_escape*.
That's coming in the next commit.
* incorporate safe rules.
Pull all safety rules related to safe-scope from PR on ref variables
into the section on ref structs.
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Nigel-Ecma <[email protected]>
* respond to feedback.
* Update per 5/17 committee meeting.
* update definition
* found one more comment to address
---------
Co-authored-by: Neal Gafter <[email protected]>
Co-authored-by: Bill Wagner <[email protected]>
Co-authored-by: Jon Skeet <[email protected]>
Co-authored-by: Nigel-Ecma <[email protected]>
* C# 7.x: ref locals and returns (#213)
* Update expressions.md
* Update statements.md
* Update classes.md
* Update delegates.md
* Relocate ('ref' 'readonly'?)? to local_variable_declaration
I had this grammar extension in the wrong place
* Add support for ref readonly iteration variables to foreach
* Minor tweak to v7 spec for ? ref : ref
* build fixes
* fix merge error
* one more build issue
* light editing
* fix section references
* fix link errors
* edit to address feedback, link to ref safety rules.
* fix markdown lint error
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* respond to feedback
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* Update per April meeting feedback.
* formatting while checking grammar
* updates from 5/17 committee meeting.
* remove blank line.
* fix warnings
---------
Co-authored-by: Bill Wagner <[email protected]>
Co-authored-by: Jon Skeet <[email protected]>
* C# 7.x: in parameter mode (#219)
* Update basic-concepts.md
* Update variables.md
* Update conversions.md
* Update structs.md
* Update interfaces.md
* Update delegates.md
* Update unsafe-code.md
* Update documentation-comments.md
* Update classes.md
* Update expressions.md
* include support for local functions
* fix merge tag
* fix build warnings
* build fixes
* build fixes, round 1
* build fixes, part 2
* one last link fix
* light edits based on earlier feedback.
* respond to remaining feedbac,.
* one final edit....
* clarification on `ref` extension methods
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* respond to feedback
* Update standard/expressions.md
Co-authored-by: Jon Skeet <[email protected]>
* Update standard/expressions.md
* Apply suggestions from code review
Co-authored-by: Jon Skeet <[email protected]>
* Update per April meeting notes.
* respond to feedback.
* Exclude dynamic implicit conversions
A dynamic expression can't be passed as an `in` parameter if an implicit conversion is required.
* Clarify restrictions on `in` parameters
Dynamically bound expressions can't use the `in` modifier.
* Apply suggestions from code review
Co-authored-by: Neal Gafter <[email protected]>
* Updates from 5/17 committee meeting.
* fix warning
---------
Co-authored-by: Bill Wagner <[email protected]>
Co-authored-by: Jon Skeet <[email protected]>
Co-authored-by: Neal Gafter <[email protected]>
* C# 7.x: Add initializer list to `stackalloc` (#238)
* Update unsafe-code.md
* Update unsafe-code.md
* Move most of stackalloc spec from unsafe to here
* Impact of moving most of stackalloc spec from unsafe to expressions
* Moved most of stackalloc spec to expressions
* Fix links to new stackalloc spec location
* Add Span & ReadOnlySpan types
* fix build issues
* address feedback
* Stack initializers are only allowed as local variable initializers
This clarifies and simplifies some of the language for this PR.
* fix markdown lint issue
* respond to feedback.
* fix build issues
* one more round of build issues
* respond to feedback.
* decisions from 5/17 meeting.
* add safe context rules.
---------
Co-authored-by: Bill Wagner <[email protected]>
* fix build warnings
* Apply suggestions from code review
Co-authored-by: Nigel-Ecma <[email protected]>
* fix references
* add closing backticks
One grammar rule was missing the closing backticks.
This caused several build errors.
* respond to feedback through clause 15 (classes)
This commit responds to feedback with the 👍 emoji through clause 15.
* respond to feedback.
* Apply suggestions from code review
Co-authored-by: Nigel-Ecma <[email protected]>
* rearrange conditional specification
* Update standard/expressions.md
Co-authored-by: Nigel-Ecma <[email protected]>
* Update standard/variables.md
Co-authored-by: Nigel-Ecma <[email protected]>
* edits based on feedback.
* Update standard/expressions.md
Co-authored-by: Jon Skeet <[email protected]>
* respond to feedback comments
* Apply suggestions from code review
Co-authored-by: Nigel-Ecma <[email protected]>
* more feedback
* Update standard/classes.md
Co-authored-by: Nigel-Ecma <[email protected]>
* Update standard/classes.md
Co-authored-by: Nigel-Ecma <[email protected]>
* Update standard/expressions.md
* Update standard/expressions.md
* Update standard/expressions.md
Co-authored-by: Bill Wagner <[email protected]>
* Update standard/variables.md
* edits during the meeting.
* Update standard/expressions.md
Co-authored-by: KalleOlaviNiemitalo <[email protected]>
* edits, part 1
* respond to meeting discussion and feedback
Address all remaining conversations for this PR.
Addresses feedback from 06/05/2023 ECMA committee meeting.
---------
Co-authored-by: Jon Skeet <[email protected]>
Co-authored-by: Nigel-Ecma <[email protected]>
Co-authored-by: Neal Gafter <[email protected]>
Co-authored-by: Neal Gafter <[email protected]>
Co-authored-by: Jon Skeet <[email protected]>
Co-authored-by: Rex Jaeschke <[email protected]>
Co-authored-by: KalleOlaviNiemitalo <[email protected]>
Although `out` and `ref` parametermodifiersareconsideredpartofasignature, membersdeclaredinasingletypecannotdifferinsignaturesolelyby `ref` and `out`. Acompile-timeerroroccursiftwomembersaredeclaredinthesametypewithsignaturesthatwouldbethesameifallparametersinbothmethodswith `out` modifierswerechangedto `ref` modifiers. Forotherpurposesofsignaturematching (e.g., hidingoroverriding), `ref` and `out` areconsideredpartofthesignatureanddonotmatcheachother.
539
+
Although `in`, `out`,and `ref` parametermodifiersareconsideredpartofasignature, membersdeclaredinasingletypecannotdifferinsignaturesolelyby `in`, `out`, and `ref`. Acompile-timeerroroccursiftwomembersaredeclaredinthesametypewithsignaturesthatwouldbethesameifallparametersinbothmethodswith `out` or `in` modifierswerechangedto `ref` modifiers. Forotherpurposesofsignaturematching (e.g., hidingoroverriding), `in`, `out`, and `ref` areconsideredpartofthesignatureanddonotmatcheachother.
541
540
542
-
>*Note*:ThisrestrictionistoallowC# programstobeeasilytranslatedtorunontheCommonLanguageInfrastructure (CLI), whichdoesnotprovideawaytodefinemethodsthatdiffersolelyin `ref` and `out`. *endnote*
541
+
>*Note*:ThisrestrictionistoallowC# programstobeeasilytranslatedtorunontheCommonLanguageInfrastructure (CLI), whichdoesnotprovideawaytodefinemethodsthatdiffersolelyin `in`, `out`, and `ref`. *endnote*
543
542
544
543
Thetypes `object` and `dynamic` arenotdistinguishedwhencomparingsignatures. Thereforemembersdeclaredinasingletypewhosesignaturesdifferonlybyreplacing `object` with `dynamic` arenotallowed.
545
544
@@ -567,9 +566,7 @@ The types `object` and `dynamic` are not distinguished when comparing signatures
567
566
> }
568
567
> ```
569
568
>
570
-
>Notethatany `ref` and `out` parametermodifiers ([§15.6.2](classes.md#1562-method-parameters)) arepartofasignature. Thus, `F(int)`, `F(refint)`, and `F(outint)` arealluniquesignatures. However, `F(refint)` and `F(outint)` cannotbedeclaredwithinthesameinterfacebecausetheirsignaturesdiffersolelyby `ref` and `out`. Also, notethatthereturntypeandthe `params` modifierarenotpartofasignature, soitisnotpossibletooverloadsolelybasedonreturntypeorontheinclusionorexclusionofthe `params` modifier. Assuch, thedeclarationsofthemethods `F(int)` and `F(paramsstring[])` identifiedabove, resultinacompile-timeerror.
571
-
>
572
-
>*endexample*
569
+
>Notethatany `in`, `out`, and `ref` parametermodifiers ([§15.6.2](classes.md#1562-method-parameters)) arepartofasignature. Thus, `F(int)`, `F(inint)`, `F(outint)` , and `F(refint)` arealluniquesignatures. However, `F(inint)`, `F(outint)` , and `F(refint)` cannotbedeclaredwithinthesameinterfacebecausetheirsignaturesdiffersolelyby `in`, `out`, and `ref`. Also, notethatthereturntypeandthe `params` modifierarenotpartofasignature, soitisnotpossibletooverloadsolelybasedonreturntypeorontheinclusionorexclusionofthe `params` modifier. Assuch, thedeclarationsofthemethods `F(int)` and `F(paramsstring[])` identifiedabove, resultinacompile-timeerror. *endexample*
0 commit comments