Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
4767c60
Add Roslyn-format EnC CustomDebugInformation codec and portable PDB m…
NatElkins Jul 1, 2026
e9e88a7
Use ProcessStartInfo.Arguments for net472 compatibility
NatElkins Jul 1, 2026
6976a6b
Make the EnC CDI test module public for xunit v3 discovery
NatElkins Jul 2, 2026
c96f5da
Add ECMA-335 EnC metadata delta writer
NatElkins Jul 1, 2026
c3ed355
Fix EnC CDI cross-validation test process launch on Desktop and bare …
NatElkins Jul 3, 2026
16962d4
Remove extra EOF blank line in delta metadata tests
NatElkins Jul 8, 2026
22b5a3e
Extract stable synthesized-name replay layer
NatElkins Jul 2, 2026
42d793f
Fix generated-name scope test in stable names slice
NatElkins Jul 8, 2026
09bbef5
Add typed-tree diff slice for hot reload
NatElkins Jul 2, 2026
aebb67a
Merge branch 'hotreload-stable-names' into hotreload-baseline-reader
NatElkins Jul 9, 2026
ebbf20b
Add hot reload baseline reader state
NatElkins Jul 3, 2026
9727c67
Fix synthesized-name snapshot assertions to use the array equality ov…
NatElkins Jul 3, 2026
e8bdb01
Merge branch 'hotreload-typedtree-diff' into hotreload-delta-emitter
NatElkins Jul 9, 2026
7365d30
Merge branch 'enc-metadata-delta-writer' into hotreload-delta-emitter
NatElkins Jul 9, 2026
ab53d0f
Extract hot reload delta emitter
NatElkins Jul 3, 2026
55ca844
Align the signature-change diff test with the evolved differ classifi…
NatElkins Jul 3, 2026
c2028e6
Extract hot reload session slice
NatElkins Jul 3, 2026
c1982e6
Fix CI compile breaks and extraction debris in the session slice tests
NatElkins Jul 3, 2026
ba39bcb
Fix net472 and CI-image portability breaks in session slice tests
NatElkins Jul 3, 2026
66232df
Drop the netcore-only Contains overload from delta builder tests
NatElkins Jul 3, 2026
44e96ae
Gate the Roslyn baseline comparison tests to .NET Core
NatElkins Jul 3, 2026
60b5336
Normalize fixture line endings before update-source splicing
NatElkins Jul 3, 2026
51eb5ec
Update ilxgen name-path architecture guard
NatElkins Jul 8, 2026
b4d5b23
Remove duplicate delta metadata test copies
NatElkins Jul 8, 2026
d4d0bde
Remove duplicate compiler global reset member
NatElkins Jul 8, 2026
884759d
Remove duplicate compiler global reset signature
NatElkins Jul 8, 2026
13d72bd
Extract the flag-gated in-process compile perf slice
NatElkins Jul 3, 2026
22cdf0d
Apply post-main hot reload perf cleanup
NatElkins Jul 7, 2026
eec9fa2
Remove trailing EOF whitespace in hot reload tests
NatElkins Jul 8, 2026
3356e70
Fix synthesized type alias reuse in in-process hot reload
NatElkins Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions FSharp.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@
<BuildType Solution="Proto|*" Project="Release" />
</Project>
</Folder>
<Folder Name="/Tests/HotReloadDemo/">
<Project Path="tests/projects/HotReloadDemo/HotReloadDemoApp/HotReloadDemoApp.fsproj">
<BuildType Solution="Proto|*" Project="Debug" />
</Project>
</Folder>
<Folder Name="/Tests/FSharp.Compiler.Service.Tests support/">
<Project Path="tests/service/data/CSharp_Analysis/CSharp_Analysis.csproj">
<BuildType Solution="Proto|*" Project="Debug" />
Expand Down
12 changes: 10 additions & 2 deletions docs/release-notes/.FSharp.Compiler.Service/11.0.100.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* Fix internal error (FS0193) when calling an indexed property setter with a named argument that matches an indexer parameter. ([Issue #16034](https://github.com/dotnet/fsharp/issues/16034), [PR #19851](https://github.com/dotnet/fsharp/pull/19851))
* Fix missing FS1182 ("unused binding") warning for unused `let` function bindings inside class types. ([Issue #13849](https://github.com/dotnet/fsharp/issues/13849), [PR #19805](https://github.com/dotnet/fsharp/pull/19805))
* Fix internal compiler error FS1110 in `task { let! }` (and other computation expressions) when a generic IL extension method whose `this`-parameter is a method-level type variable is in scope (e.g. `open ReactiveUI`). Regression from PR #19536. ([Issue #19936](https://github.com/dotnet/fsharp/issues/19936))
* Fix inner mutually-recursive `let rec ... and ...` functions under `--realsig+` not being lifted to top-level static methods (TLR), causing `FSharpFunc` closure allocations and loss of `tail.` opcodes the large struct-mutual-recursion perf regression reported in [Issue #17607](https://github.com/dotnet/fsharp/issues/17607). ([PR #19882](https://github.com/dotnet/fsharp/pull/19882))
* Fix inner mutually-recursive `let rec ... and ...` functions under `--realsig+` not being lifted to top-level static methods (TLR), causing `FSharpFunc` closure allocations and loss of `tail.` opcodes - the large struct-mutual-recursion perf regression reported in [Issue #17607](https://github.com/dotnet/fsharp/issues/17607). ([PR #19882](https://github.com/dotnet/fsharp/pull/19882))
* Fix `TypeLoadException` ("Specialize tried to implicitly override a method with weaker type parameter constraints") and the related CLR crash with constrained inline calls by stripping constraints from closure-class typars in `EraseClosures.convIlxClosureDef`. ([Issue #14492](https://github.com/dotnet/fsharp/issues/14492), [Issue #19075](https://github.com/dotnet/fsharp/issues/19075), [PR #19882](https://github.com/dotnet/fsharp/pull/19882))
* Fix `FieldAccessException` at runtime when the optimizer relocates a read of a `protected` (family) base-class field into a method outside the field's family (e.g. a trivial member inlined into module/startup code under `--optimize+`). Protected (family) IL field access is no longer hoisted out of its declaring family by inlining or method-splitting. ([Issue #19963](https://github.com/dotnet/fsharp/issues/19963), [PR #19964](https://github.com/dotnet/fsharp/pull/19964))

Expand Down Expand Up @@ -128,6 +128,10 @@

### Added

* Added internal synthesized-name replay infrastructure for compiler-generated names, preserving normal compilation output while enabling future hot reload name stability work.
* Add an internal typed-tree diff utility for future F# hot reload edit classification. It is not called by normal compilation. ([PR #19941](https://github.com/dotnet/fsharp/pull/19941))
* Added internal F# hot reload delta emitter and symbol matcher infrastructure with direct emitter test coverage.
* Added an experimental, internal, flag-gated in-process compile path for hot reload sessions. `FSHARP_HOTRELOAD_INPROCESS_COMPILE` refreshes the output assembly and PDB from the latest checked project before delta emission, while `FSHARP_HOTRELOAD_INCREMENTAL_EMIT` enables a nested per-file optimized-tree cache.
* Added `FSharpMemberOrFunctionOrValue.IsPropertyAccessor` convenience property that returns true for compiler-generated property accessors (`get_X` / `set_X`). ([Issue #18157](https://github.com/dotnet/fsharp/issues/18157), [PR #19883](https://github.com/dotnet/fsharp/pull/19883))
* Added warning FS3884 when a function or delegate value is used as an interpolated string argument. ([PR #19289](https://github.com/dotnet/fsharp/pull/19289))
* Symbols: add ObsoleteDiagnosticInfo ([PR #19359](https://github.com/dotnet/fsharp/pull/19359))
Expand All @@ -140,6 +144,10 @@
* Checker: recover on checking language version ([PR ##19970](https://github.com/dotnet/fsharp/pull/19970))
* Implied argument names for function-to-delegate coercions now fall back to the delegate's `Invoke` parameter names when the function has no recoverable names (e.g. a partial application like `System.Func<int, int>((+) 1)`), instead of synthetic `delegateArg0`, `delegateArg1`, … names. ([PR #20001](https://github.com/dotnet/fsharp/pull/20001))
* Add internal `ResetCompilerGeneratedNameState` to `CompilerGlobalState` name generators so warm-checker re-compilation can produce fresh-process-identical generated names. ([PR #20017](https://github.com/dotnet/fsharp/pull/20017))
* Add Roslyn-format EnC CustomDebugInformation codec and portable PDB method CDI emission support to AbstractIL. ([PR #20018](https://github.com/dotnet/fsharp/pull/20018))
* Add internal ECMA-335 Edit-and-Continue metadata delta writer to AbstractIL. ([PR #20019](https://github.com/dotnet/fsharp/pull/20019))
* Add internal `ResetCompilerGeneratedNameState` to `CompilerGlobalState` name generators so warm-checker re-compilation can produce fresh-process-identical generated names. ([PR #20017](https://github.com/dotnet/fsharp/pull/20017))
* Add experimental hot reload support: `--test:HotReloadDeltas` baseline capture in fsc, EnC metadata/IL/PDB delta emission, rude-edit detection, and an `FSharpChecker` session API (`CreateHotReloadSession`, with `AddProject`/`EmitDelta`/`Commit`/`Discard`). Off by default; flag-off compilation is unchanged. ([Issue #11636](https://github.com/dotnet/fsharp/issues/11636), [PR #19941](https://github.com/dotnet/fsharp/pull/19941))

### Improved

Expand All @@ -151,4 +159,4 @@
* Exception field serialization (`GetObjectData` and field-restoring constructor) is now gated behind `langversion:11` (`LanguageFeature.ExceptionFieldSerializationSupport`). With langversion ≤10, exception codegen is unchanged from pre-#19342 behavior. ([PR #19746](https://github.com/dotnet/fsharp/pull/19746))

### Breaking Changes
* Optimizer: don't inline named functions in debug builds ([PR #19548](https://github.com/dotnet/fsharp/pull/19548)
* Optimizer: don't inline named functions in debug builds ([PR #19548](https://github.com/dotnet/fsharp/pull/19548)
1 change: 1 addition & 0 deletions release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ These release notes track our current efforts to document changes to the F# proj

### FSharp Compiler Service (main)

* Added internal hot reload baseline reading for recorded EnC state and synthesized-name snapshot PDB data.
* In FSharpParsingOptions, rename ConditionalCompilationDefines --> ConditionalDefines
* Some syntax tree nodes have changed, e.g. introduction of SyntaxTree trivia
* Resolved expressions (FSharpExpr) now reveal debug points, you must match them explicitly using `DebugPoint(dp, expr)`
Expand Down
Loading
Loading