Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[hot reload] Validate / Implement support for adding static extern methods #102080

Open
2 tasks
lambdageek opened this issue May 10, 2024 · 2 comments
Open
2 tasks
Labels
area-Diagnostics-coreclr area-EnC-mono Hot Reload for WebAssembly, iOS/Android, etc enhancement Product code improvement that does NOT require public API changes/additions
Milestone

Comments

@lambdageek
Copy link
Member

Related Roslyn issue: dotnet/roslyn#73421

The [UnsafeAccessorAttribute] (API Proposal) is used on static extern functions to instruct the .NET runtime to generate an accessor method to a type member that bypass the normal .NET visibility checks.

   public class MyClass
   {
      private int _hidden;
      ...
    }

    public static partial class AccessHelpers
    {
        [UnsafeAccessor(UnsafeAccessorKind.Field, Name="_hidden")]
        public static extern ref int GetHiddenField(MyClass c);    // runtime generated implementation
    }

    ...

    public static MyClass DeserializeMyClass(string s)
    {
        MyClass x = new MyClass();
        ref int hiddenFieldRef = ref AccessHelpers.GetHiddenField(x);
        hiddenFieldRef = int.Parse(s);
        return x;
     }    
}

With [UnsafeAccessor] it becomes possible to use source-generated reflection-free serializers that can serialize and deserialize fields of user-defined classes. For example, a user may add a new field _hidden to MyClass and the source generator will add a new accessor method to AccessHelpers and generate a method DeserializeMyClass that uses the access method to populate the hidden field.

Currently if the user adds a second private field _hidden2 and the generator adds a new static extern method, EnC will report a rude edit:

error ENC0025: Adding an extern method requires restarting the application.

Note that it should work with generics, too

After Roslyn adds support for EnC deltas to include static extern methods, we need to validate that such deltas are processed appropriately by the .NET runtimes:

  • Validate/implement CoreCLR hot reload support for static extern methods
  • Validate/implement Mono hot reload support for static extern methods
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label May 10, 2024
@dotnet-policy-service dotnet-policy-service bot added the untriaged New issue has not been triaged by the area owner label May 10, 2024
@lambdageek lambdageek added area-EnC-mono Hot Reload for WebAssembly, iOS/Android, etc area-Diagnostics-coreclr and removed untriaged New issue has not been triaged by the area owner needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels May 10, 2024
Copy link
Contributor

Tagging subscribers to this area: @tommcdon
See info in area-owners.md if you want to be subscribed.

@AaronRobinsonMSFT
Copy link
Member

Is this a .NET 9 ask?

@tommcdon tommcdon added the enhancement Product code improvement that does NOT require public API changes/additions label May 13, 2024
@tommcdon tommcdon added this to the 9.0.0 milestone May 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-Diagnostics-coreclr area-EnC-mono Hot Reload for WebAssembly, iOS/Android, etc enhancement Product code improvement that does NOT require public API changes/additions
Projects
None yet
Development

No branches or pull requests

3 participants