Summary
Three internal classes in src/Compiler/Utilities/FileSystem.fs carry [<Experimental("This FCS API/Type is experimental and subject to change.")>] but are not exposed in the matching .fsi:
ByteArrayMemory (line 65)
SafeUnmanagedMemoryStream (line 154)
RawByteMemory (line 210)
These attributes are dead — consumers never see them (the .fsi hides the types entirely), and the new signature-conformance check (FS3888) skips them because they have no signature counterpart, so they don't surface as a diagnostic either.
Why open this
While dogfooding FS3888 in #19880 the four other public types in the same file (ByteMemory, IAssemblyLoader, DefaultAssemblyLoader, IFileSystem, DefaultFileSystem) had the same dead [<Experimental>] on the .fs only. They were cleaned up there because they did fire FS3888. These three impl-internal types were left alone to keep that PR minimal.
Suggested fix
Delete the three [<Experimental(...)>] attributes. One-line PR, no behavior change.
Refs
Summary
Three internal classes in
src/Compiler/Utilities/FileSystem.fscarry[<Experimental("This FCS API/Type is experimental and subject to change.")>]but are not exposed in the matching.fsi:ByteArrayMemory(line 65)SafeUnmanagedMemoryStream(line 154)RawByteMemory(line 210)These attributes are dead — consumers never see them (the .fsi hides the types entirely), and the new signature-conformance check (
FS3888) skips them because they have no signature counterpart, so they don't surface as a diagnostic either.Why open this
While dogfooding FS3888 in #19880 the four other public types in the same file (
ByteMemory,IAssemblyLoader,DefaultAssemblyLoader,IFileSystem,DefaultFileSystem) had the same dead[<Experimental>]on the.fsonly. They were cleaned up there because they did fire FS3888. These three impl-internal types were left alone to keep that PR minimal.Suggested fix
Delete the three
[<Experimental(...)>]attributes. One-line PR, no behavior change.Refs