dotnet / fsharp

The F# compiler, F# core library, F# language service, and F# tooling integration for Visual Studio
https://dotnet.microsoft.com/languages/fsharp
MIT License
3.84k stars 777 forks source link

The F# Build should cache the generated lexer/parser instead of recreating them all of the time #17006

Open baronfel opened 3 months ago

baronfel commented 3 months ago

Is your feature request related to a problem? Please describe.

If the generated lexer and parser were checked in then they wouldn't need to be re-built quite so often. The files are almost perfectly cache-able (the only inputs are the lex/yacc binaries and the fsl/fsy file inputs) and this generation would mean that we don't have to

Running this is a cost that every proto build has to pay, for no good reason. Generating the lexer and parser on my machine takes ~12s: image

However, it also takes ~35s to build fslex and fsyacc projects - costs that could be avoided if the files don't need to be generated.

vzarytovskii commented 3 months ago

It will require a. Changes to fslexyacc to generate relative paths inside generated files instead of absolute b. Custom msbuild task which will be hashing both sources and dependant fs files to figure out whether re-generating is needed. OR changes to fslexyacc to handle it properly.

I tried to do that couple of years ago but hit some issues with above