FSharp.Compiler.Service 43.12.201 #850
Conversation
| | SynExpr.LetOrUse(_, _, bindings, body, _, _) -> | ||
| let instanceNames = extraFromBindings bindings List.Empty |> Set.ofList | ||
| processLetBinding instanceNames body returnEmptyArray | ||
| | SynExpr.LetOrUse letOrUse when not letOrUse.IsBang -> |
There was a problem hiding this comment.
This one is using when because when I tried the active pattern I got error FS3569: The member or function 'processLetBinding' has the 'TailCallAttribute' attribute, but is not being used in a tail recursive way.
There was a problem hiding this comment.
That's what the TailCall attrib is for: so that the compiler makes sure you're using a tail call recursive algorithm. If you mark a func as TailCall without changing the algorithm to be a tail-call-recursive, compilation will fail.
|
Looks like the performance is still bad without #845 |
|
Ok, this version of FCS should contain the fix we need (dotnet/fsharp@89d7886), can you please include a commit to remove this workaround: 755f4d1 ? |
…eing too long" This reverts commit de27b1b.
Most of the changes are down to the LetOrUse changes in dotnet/fsharp#19090. The ExpressionUtilities.LetOrUse active pattern was taken from an implementation detail of that change as well as it avoids using when clauses in lots of places.
Remove the workaround for dotnet/fsharp#19118 now that FCS has been updated to a version containing the fix
Done |
This contains the whole of #770, plus an extra commit to update to FCS 43.12.201 (I'm not clear what's going on with the version numbers here)
Needs a review to see if the 'ExpressionUtilities.LetOrUse' helper is the right approach.