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

Will's Transition Work List #12363

Closed
TIHan opened this issue Nov 10, 2021 · 0 comments
Closed

Will's Transition Work List #12363

TIHan opened this issue Nov 10, 2021 · 0 comments
Labels

Comments

@TIHan
Copy link
Member

TIHan commented Nov 10, 2021

The following are the remaining WIP PRs that I have:

  • Re-Implemented ILBinaryReader with System.Reflection.Metadata #8081 (Large)
    • Info
      • Largest PR that remains and has been around for a while.
      • Entirely re-implements F#'s IL binary reader using System.Reflection.Metadata (SRM) and can be used as a drop-in replacement with the current IL binary reader.
    • Benefits
      • Less GC allocations. (There is a benchmark for stress testing the IL reading, see here)
      • Implementation is roughly less than half that of the current implementation for IL binary reading and is more readable.
      • Future proof; if .NET metadata format is changed, SRM will be updated reflecting those changes.
    • Remaining work
      • The major piece of work left is the IL reader having the ability to properly read field data as a byte array when the field has a RVA.
        • We have to do this because the F# compiler has the ability to do static linking of assemblies - which means it has to merge all the read field data from across multiple assemblies and put them into one assembly. See here - a comment describes why the current implementation is incorrect
      • The rest of the work is testing, testing, testing and what is mentioned in the Acceptance Criteria part of the PR description.
      • There is risk of immediately replacing the IL binary reader; so as an idea, you could keep both implementations and only use the old one as a fallback if the newer one failed - all the while raising a watson if this occurs. If at some point there are no more watsons being raised, then you can delete the old implementation.
  • [WIP] Parallel type checking for impl files with backing sig files - fsc.exe #11152 (Medium)
    • Info
      • Parallelizes type-checking of implementation files if those files have a backing signature file
    • Benefits
      • Compile times of large projects that make use of signature files for the majority of their implementation files can receive a substantial performance benefit. FSharp.Compiler.Service is a great example of this, where the perf gain was around ~23% on an i7-10700k.
    • Remaining work
  • [WIP] Parallel ILX Codegen #11531 (Medium)
    • Info
      • Parallelizes generating IL per file for method bodies
    • Benefits
      • Compile time performance boost of projects with multiple files; performance gains are similar to that of parallel parsing, see here
    • Remaining work
  • Add Reference Assembly support - 'refonly' and 'refout' compiler options #12334 (Medium-Large)
    • Info
      • Allows the compiler to emit reference assemblies using the compiler options, --refonly and --refout:<file>.
    • Benefits
      • Faster solution build times when a small change has been made to a source file in a project that doesn't impact the overall signature.
    • Remaining work
  • Added CI job for deterministic builds #12335 (Medium)
    • Info
      • Adds a CI job that will run a determinism test on FSharp.Compiler.Service and FSharp.Core by building the projects twice and comparing the DLL outputs.
      • Is necessary before merging other PRs that can impact and/or are critical for determinism.
    • Benefits
      • A test the verify the compiler is deterministic when the --deterministic compiler option is used.
    • Remaining work
      • Get CI to pass, then verify the outputs of FSharp.Compiler.Service and FSharp.Core DLLs manually.
  • VS Navigation consolidation #12105 (Small)
    • This is a straight-forward PR that does some refactoring for the navigation mechanisms in Visual Studio. The current issue that needs to be resolved is getting the WorkspaceTests to pass - it is currently failing because MEF is unable to resolve the interface IWorkspaceProjectContextFactory for FSharpMetadataAsSourceService, as the interface is only implemented in Visual Studio. We may have to re-think exactly how we can do this, but the PR itself isn't critical; it is just much nicer to have one place where the navigation logic lives.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Archived in project
Development

No branches or pull requests

3 participants