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

Replace Map with Dictionary #13044

Merged
merged 10 commits into from
May 13, 2022
Merged

Replace Map with Dictionary #13044

merged 10 commits into from
May 13, 2022

Conversation

nojaf
Copy link
Contributor

@nojaf nojaf commented Apr 26, 2022

This is a naive attempt at addressing #13033.
I am most likely missing the point 🤔as I didn't notice much difference after changing the Map to a Dictionary.
There is probably something else I need to take into account, I'm all ears.

@kerams
Copy link
Contributor

kerams commented Apr 26, 2022

Have you benchmarked typechecking a decently sized file (thousands of lines)?

@nojaf
Copy link
Contributor Author

nojaf commented Apr 26, 2022

I did, it was a very insignificant gain.
My test was:

open System
open System.Collections.Generic
open System.IO
open FSharp.Compiler.CodeAnalysis
open FSharp.Compiler.Text
open BenchmarkDotNet.Attributes
open BenchmarkDotNet.Running

module rec Project =
    let private getTimeStamp () = DateTime.Now
    let private loader _ = None

    let memoization (f: string -> 'a) =
        let cache = Dictionary<_, _>()

        (fun x ->
            match cache.TryGetValue(x) with
            | true, cachedValue -> cachedValue
            | _ ->
                let result = f x
                cache.Add(x, result)
                result)

    let FSharpCompilerService _ =
        let projectOptions =
            { ProjectFileName =
                @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Compiler.Service\FSharp.Compiler.Service.fsproj"
              ProjectId = None
              SourceFiles =
                [| @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSComp.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSIstrings.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\UtilsStrings.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSharp.Compiler.Service.InternalsVisibleTo.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSharp.Compiler.Service.AssemblyInfo.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\sformat.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\sformat.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\sr.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\sr.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Logger.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Logger.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LanguageFeatures.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LanguageFeatures.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\ResizeArray.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\ResizeArray.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\HashMultiMap.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\HashMultiMap.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\EditDistance.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\EditDistance.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\TaggedCollections.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\TaggedCollections.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\illib.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\illib.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\FileSystem.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\FileSystem.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ildiag.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ildiag.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\zmap.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\zmap.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\zset.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\zset.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlAdapters.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlAdapters.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InternalCollections.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InternalCollections.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QueueList.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QueueList.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\lib.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\lib.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\block.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\block.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\rational.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\rational.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\PathMap.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\PathMap.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\RidHelpers.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\range.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\range.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Diagnostics.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Diagnostics.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TextLayoutRender.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TextLayoutRender.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ErrorLogger.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ErrorLogger.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ErrorResolutionHints.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ErrorResolutionHints.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\prim-lexing.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\prim-lexing.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\prim-parsing.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\prim-parsing.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\il.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\il.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilx.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilx.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilascii.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilascii.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\ilpars.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\illex.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilprint.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilprint.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilmorph.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilmorph.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilsign.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilsign.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilnativeres.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilnativeres.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilsupp.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilsupp.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilbinary.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilbinary.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilread.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilread.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilwritepdb.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilwritepdb.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilwrite.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilwrite.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilreflect.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\absil\ilreflect.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ReferenceResolver.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ReferenceResolver.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LegacyMSBuildReferenceResolver.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LegacyMSBuildReferenceResolver.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SimulatedMSBuildReferenceResolver.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SimulatedMSBuildReferenceResolver.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\CompilerLocationUtils.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\CompilerLocationUtils.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PrettyNaming.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PrettyNaming.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ilx\EraseClosures.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ilx\EraseClosures.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ilx\EraseUnions.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ilx\EraseUnions.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\UnicodeLexing.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\UnicodeLexing.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlDoc.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlDoc.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTrivia.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTrivia.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTree.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTree.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTreeOps.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SyntaxTreeOps.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ParseHelpers.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ParseHelpers.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\pppars.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\pars.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\lexhelp.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\lexhelp.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\pplex.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\lex.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LexFilter.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LexFilter.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\tainted.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\tainted.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ExtensionTyping.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ExtensionTyping.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QuotationPickler.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QuotationPickler.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerGlobalState.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerGlobalState.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTree.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreeBasics.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreeBasics.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TcGlobals.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreeOps.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreeOps.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreePickle.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypedTreePickle.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\import.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\import.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\infos.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\infos.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AccessibilityLogic.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AccessibilityLogic.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AttributeChecking.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AttributeChecking.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypeRelations.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\TypeRelations.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InfoReader.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InfoReader.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\NicePrint.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\NicePrint.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AugmentWithHashCompare.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\AugmentWithHashCompare.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\NameResolution.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\NameResolution.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SignatureConformance.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\SignatureConformance.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\MethodOverrides.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\MethodOverrides.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\MethodCalls.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\MethodCalls.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PatternMatchCompilation.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PatternMatchCompilation.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ConstraintSolver.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ConstraintSolver.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckFormatStrings.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckFormatStrings.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FindUnsolved.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FindUnsolved.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QuotationTranslator.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\QuotationTranslator.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PostInferenceChecks.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\PostInferenceChecks.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckExpressions.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckExpressions.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckComputationExpressions.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckComputationExpressions.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckDeclarations.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CheckDeclarations.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Optimizer.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\Optimizer.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DetupleArgs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DetupleArgs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InnerLambdasToTopLevelFuncs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\InnerLambdasToTopLevelFuncs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LowerCallsAndSeqs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LowerCallsAndSeqs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LowerStateMachines.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LowerStateMachines.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\autobox.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\autobox.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\IlxGen.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\IlxGen.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FxResolver.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\AssemblyResolveHandler.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\AssemblyResolveHandler.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\NativeDllResolveHandler.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\NativeDllResolveHandler.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\DependencyProvider.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\DependencyManager\DependencyProvider.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\BuildGraph.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\BuildGraph.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerConfig.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerConfig.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerImports.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerImports.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerDiagnostics.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerDiagnostics.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ParseAndCheckInputs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ParseAndCheckInputs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ScriptClosure.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\ScriptClosure.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerOptions.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CompilerOptions.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\OptimizeInputs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\OptimizeInputs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlDocFileWriter.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\XmlDocFileWriter.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\BinaryResourceFormats.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\BinaryResourceFormats.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\StaticLinking.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\StaticLinking.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CreateILModule.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\CreateILModule.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\fsc.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\fsc.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\SymbolHelpers.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\SymbolHelpers.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\Symbols.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\Symbols.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\Exprs.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\Exprs.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\SymbolPatterns.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\symbols\SymbolPatterns.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\SemanticClassification.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\SemanticClassification.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ItemKey.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ItemKey.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\SemanticClassificationKey.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\SemanticClassificationKey.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpSource.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpSource.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\IncrementalBuild.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\IncrementalBuild.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceCompilerDiagnostics.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceCompilerDiagnostics.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceConstants.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceDeclarationLists.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceDeclarationLists.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceLexing.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceLexing.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParseTreeWalk.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParseTreeWalk.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceNavigation.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceNavigation.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParamInfoLocations.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParamInfoLocations.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpParseFileResults.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpParseFileResults.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParsedInputOps.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceParsedInputOps.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceAssemblyContent.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceAssemblyContent.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceXmlDocParser.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceXmlDocParser.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ExternalSymbol.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ExternalSymbol.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\QuickParse.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\QuickParse.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpCheckerResults.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\FSharpCheckerResults.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\service.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\service.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceInterfaceStubGenerator.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceInterfaceStubGenerator.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceStructure.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceStructure.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceAnalysis.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\service\ServiceAnalysis.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\fsi\fsi.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\fsi\fsi.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\LegacyHostedCompilerForTesting.fs" |]
              OtherOptions =
                [| @"-o:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSharp.Compiler.Service.dll"
                   @"-g"
                   @"--debug:embedded"
                   @"--noframework"
                   @"--define:TRACE"
                   @"--define:COMPILER"
                   @"--define:ENABLE_MONO_SUPPORT"
                   @"--define:DEBUG"
                   @"--define:ENABLE_MONO_SUPPORT"
                   @"--define:NETFRAMEWORK"
                   @"--define:NET472"
                   @"--define:NET20_OR_GREATER"
                   @"--define:NET30_OR_GREATER"
                   @"--define:NET35_OR_GREATER"
                   @"--define:NET40_OR_GREATER"
                   @"--define:NET45_OR_GREATER"
                   @"--define:NET451_OR_GREATER"
                   @"--define:NET452_OR_GREATER"
                   @"--define:NET46_OR_GREATER"
                   @"--define:NET461_OR_GREATER"
                   @"--define:NET462_OR_GREATER"
                   @"--define:NET47_OR_GREATER"
                   @"--define:NET471_OR_GREATER"
                   @"--define:NET472_OR_GREATER"
                   @"--doc:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Compiler.Service\Debug\net472\FSharp.Compiler.Service.xml"
                   @"--publicsign+"
                   @"--optimize-"
                   @"-r:C:\Users\nojaf\Projects\fsharp\artifacts\bin\FSharp.Core\Debug\netstandard2.0\FSharp.Core.dll"
                   @"-r:C:\Users\nojaf\Projects\fsharp\artifacts\bin\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\microsoft.build.framework\17.0.0\lib\net472\Microsoft.Build.Framework.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\microsoft.build.tasks.core\17.0.0\lib\net472\Microsoft.Build.Tasks.Core.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\microsoft.build.utilities.core\17.0.0\lib\net472\Microsoft.Build.Utilities.Core.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\microsoft.net.stringtools\1.0.0\lib\net472\Microsoft.NET.StringTools.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\microsoft.visualstudio.setup.configuration.interop\1.16.30\lib\net35\Microsoft.VisualStudio.Setup.Configuration.Interop.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\mscorlib.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.buffers\4.5.1\ref\net45\System.Buffers.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.collections.immutable\5.0.0\lib\net461\System.Collections.Immutable.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.ComponentModel.Composition.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.configuration.configurationmanager\4.7.0\ref\net461\System.Configuration.ConfigurationManager.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Configuration.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Core.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.OracleClient.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Diagnostics.Process.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Diagnostics.TraceSource.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Drawing.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.IO.Compression.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.IO.Compression.FileSystem.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.IO.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Linq.Expressions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.memory\4.5.4\lib\net461\System.Memory.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Net.Security.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Numerics.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.numerics.vectors\4.5.0\ref\net46\System.Numerics.Vectors.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Reflection.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.metadata\5.0.0\lib\net461\System.Reflection.Metadata.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.typeextensions\4.3.0\ref\net462\System.Reflection.TypeExtensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.resources.extensions\4.6.0\ref\netstandard2.0\System.Resources.Extensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.runtime.compilerservices.unsafe\5.0.0\ref\net461\System.Runtime.CompilerServices.Unsafe.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Runtime.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Runtime.InteropServices.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.runtime.loader\4.3.0\ref\netstandard1.5\System.Runtime.Loader.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Runtime.Serialization.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.security.accesscontrol\4.7.0\ref\net461\System.Security.AccessControl.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Security.Claims.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Security.Cryptography.Algorithms.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Security.Cryptography.Encoding.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Security.Cryptography.Primitives.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Security.Cryptography.X509Certificates.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Security.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.security.permissions\4.7.0\ref\net461\System.Security.Permissions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.security.principal.windows\4.7.0\ref\net461\System.Security.Principal.Windows.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.ServiceProcess.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.threading.tasks.dataflow\4.9.0\lib\netstandard2.0\System.Threading.Tasks.Dataflow.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Threading.Thread.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.Threading.ThreadPool.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Transactions.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Windows.Forms.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xaml.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xml.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xml.Linq.dll"
                   @"-r:C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\WindowsBase.dll"
                   @"--target:library"
                   @"--nowarn:FS2003,44,57,75,1204,NU5125,NU5105"
                   @"--warn:3"
                   @"--warnaserror:3239,1182,0025"
                   @"--fullpaths"
                   @"--flaterrors"
                   @"--subsystemversion:6.00"
                   @"--highentropyva+"
                   @"--targetprofile:mscorlib"
                   @"--nocopyfsharpcore"
                   @"--deterministic+"
                   @"--simpleresolution"
                   @"--nowarn:3384"
                   @"--extraoptimizationloops:1"
                   @"--times"
                   @"--warnon:1182"
                   @"--warnon:3218"
                   @"--warnon:3390" |]
              ReferencedProjects =
                [| memoFSharpDependencyManagerNuget "FSharpDependencyManagerNuget"
                   memoFSharpCore "FSharpCore" |]
              IsIncompleteTypeCheckEnvironment = false
              UseScriptResolutionRules = false
              LoadTime = DateTime.Now
              UnresolvedReferences = None
              OriginalLoadReferences = []
              Stamp = None }

        projectOptions

    let FSharpDependencyManagerNuget _ =
        let projectOptions =
            { ProjectFileName =
                @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Nuget.fsproj"
              ProjectId = None
              SourceFiles =
                [| @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSDependencyManager.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\UtilsStrings.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.InternalsVisibleTo.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.AssemblyInfo.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\CompilerLocationUtils.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\CompilerLocationUtils.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.ProjectFile.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.Utilities.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.DependencyManager.Nuget\FSharp.DependencyManager.fs" |]
              OtherOptions =
                [| @"-o:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.dll"
                   @"-g"
                   @"--debug:embedded"
                   @"--noframework"
                   @"--define:TRACE"
                   @"--define:COMPILER"
                   @"--define:DEBUG"
                   @"--define:NETSTANDARD"
                   @"--define:FX_NO_APP_DOMAINS"
                   @"--define:FX_NO_CORHOST_SIGNER"
                   @"--define:FX_NO_PDB_READER"
                   @"--define:FX_NO_PDB_WRITER"
                   @"--define:FX_NO_SYMBOLSTORE"
                   @"--define:FX_NO_SYSTEM_CONFIGURATION"
                   @"--define:FX_NO_WIN_REGISTRY"
                   @"--define:FX_NO_WINFORMS"
                   @"--define:FX_RESHAPED_REFEMIT"
                   @"--define:NETSTANDARD"
                   @"--define:NETSTANDARD2_0"
                   @"--define:NETSTANDARD1_0_OR_GREATER"
                   @"--define:NETSTANDARD1_1_OR_GREATER"
                   @"--define:NETSTANDARD1_2_OR_GREATER"
                   @"--define:NETSTANDARD1_3_OR_GREATER"
                   @"--define:NETSTANDARD1_4_OR_GREATER"
                   @"--define:NETSTANDARD1_5_OR_GREATER"
                   @"--define:NETSTANDARD1_6_OR_GREATER"
                   @"--define:NETSTANDARD2_0_OR_GREATER"
                   @"--doc:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.xml"
                   @"--publicsign+"
                   @"--optimize-"
                   @"-r:C:\Users\nojaf\Projects\fsharp\artifacts\bin\FSharp.Core\Debug\netstandard2.0\FSharp.Core.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\Microsoft.Win32.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\mscorlib.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\netstandard.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.AppContext.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.buffers\4.5.1\ref\netstandard2.0\System.Buffers.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.Concurrent.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.collections.immutable\5.0.0\lib\netstandard2.0\System.Collections.Immutable.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.NonGeneric.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Collections.Specialized.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.Composition.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.EventBasedAsync.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ComponentModel.TypeConverter.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Console.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Core.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Data.Common.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Data.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Contracts.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Debug.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.FileVersionInfo.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Process.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.StackTrace.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.TextWriterTraceListener.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Tools.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.TraceSource.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Diagnostics.Tracing.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Drawing.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Drawing.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Dynamic.Runtime.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.Calendars.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Globalization.Extensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.FileSystem.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.ZipFile.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.DriveInfo.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.FileSystem.Watcher.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.IsolatedStorage.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.MemoryMappedFiles.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Pipes.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.UnmanagedMemoryStream.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Expressions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Parallel.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Linq.Queryable.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.memory\4.5.4\lib\netstandard2.0\System.Memory.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Http.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.NameResolution.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.NetworkInformation.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Ping.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Requests.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Security.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.Sockets.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebHeaderCollection.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebSockets.Client.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Net.WebSockets.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Numerics.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.numerics.vectors\4.4.0\ref\netstandard2.0\System.Numerics.Vectors.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ObjectModel.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.emit\4.3.0\ref\netstandard1.1\System.Reflection.Emit.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.emit.ilgeneration\4.3.0\ref\netstandard1.0\System.Reflection.Emit.ILGeneration.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.Extensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.metadata\5.0.0\lib\netstandard2.0\System.Reflection.Metadata.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Reflection.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.reflection.typeextensions\4.3.0\ref\netstandard1.5\System.Reflection.TypeExtensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.Reader.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.ResourceManager.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Resources.Writer.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.runtime.compilerservices.unsafe\4.5.3\ref\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.CompilerServices.VisualC.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Extensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Handles.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.InteropServices.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.InteropServices.RuntimeInformation.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\system.runtime.loader\4.3.0\ref\netstandard1.5\System.Runtime.Loader.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Numerics.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Formatters.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Json.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Runtime.Serialization.Xml.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Claims.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Algorithms.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Csp.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Encoding.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.Primitives.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Cryptography.X509Certificates.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.Principal.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Security.SecureString.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ServiceModel.Web.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.Encoding.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.Encoding.Extensions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Text.RegularExpressions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Overlapped.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Tasks.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Tasks.Parallel.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Thread.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.ThreadPool.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Threading.Timer.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Transactions.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.ValueTuple.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Web.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Windows.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.Linq.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.ReaderWriter.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.Serialization.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XDocument.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XmlDocument.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XmlSerializer.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XPath.dll"
                   @"-r:C:\Users\nojaf\.nuget\packages\netstandard.library\2.0.3\build\netstandard2.0\ref\System.Xml.XPath.XDocument.dll"
                   @"--target:library"
                   @"--nowarn:FS2003,NU5105"
                   @"--warn:3"
                   @"--warnaserror:3239,1182,0025"
                   @"--fullpaths"
                   @"--flaterrors"
                   @"--highentropyva+"
                   @"--targetprofile:netstandard"
                   @"--nocopyfsharpcore"
                   @"--deterministic+"
                   @"--simpleresolution"
                   @"--nowarn:3384"
                   @"--warnon:1182"
                   @"--simpleresolution" |]
              ReferencedProjects = [| memoFSharpCore "FSharpCore" |]
              IsIncompleteTypeCheckEnvironment = false
              UseScriptResolutionRules = false
              LoadTime = DateTime.Now
              UnresolvedReferences = None
              OriginalLoadReferences = []
              Stamp = None }

        FSharpReferencedProject.CreateFSharp(
            @"C:\Users\nojaf\Projects\fsharp\artifacts\bin\FSharp.DependencyManager.Nuget\Debug\netstandard2.0\FSharp.DependencyManager.Nuget.dll",
            projectOptions
        )

    let memoFSharpDependencyManagerNuget = memoization FSharpDependencyManagerNuget

    let FSharpCore _ =
        let projectOptions =
            { ProjectFileName = @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\FSharp.Core.fsproj"
              ProjectId = None
              SourceFiles =
                [| @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\prim-types-prelude.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\prim-types-prelude.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Core\Debug\netstandard2.1\FSCore.fs"
                   @"C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Core\Debug\netstandard2.1\FSharp.Core.AssemblyInfo.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\prim-types.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\prim-types.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\local.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\local.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array2.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array2.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\option.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\option.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\result.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\result.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\collections.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\collections.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\seqcore.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\seqcore.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\seq.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\seq.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\string.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\string.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\list.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\list.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array3.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\array3.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\map.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\map.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\set.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\set.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\reflect.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\reflect.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\math\z.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\math\z.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\sformat.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\utils\sformat.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\printf.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\printf.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\quotations.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\quotations.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\nativeptr.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\nativeptr.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\event.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\event.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\resumable.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\resumable.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\async.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\async.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\tasks.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\tasks.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\eventmodule.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\eventmodule.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\observable.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\observable.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\mailbox.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\mailbox.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Nullable.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Nullable.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Linq.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Linq.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\MutableTuple.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\QueryExtensions.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Query.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\Query.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\SI.fs"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\fslib-extra-pervasives.fsi"
                   @"C:\Users\nojaf\Projects\fsharp\src\fsharp\FSharp.Core\fslib-extra-pervasives.fs" |]
              OtherOptions =
                [| @"-o:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Core\Debug\netstandard2.1\FSharp.Core.dll"
                   @"-g"
                   @"--debug:embedded"
                   @"--langversion:preview"
                   @"--noframework"
                   @"--define:TRACE"
                   @"--define:FSHARP_CORE"
                   @"--define:DEBUG"
                   @"--define:NETSTANDARD"
                   @"--define:FX_NO_APP_DOMAINS"
                   @"--define:FX_NO_CORHOST_SIGNER"
                   @"--define:FX_NO_PDB_READER"
                   @"--define:FX_NO_PDB_WRITER"
                   @"--define:FX_NO_SYMBOLSTORE"
                   @"--define:FX_NO_SYSTEM_CONFIGURATION"
                   @"--define:FX_NO_WIN_REGISTRY"
                   @"--define:FX_NO_WINFORMS"
                   @"--define:FX_RESHAPED_REFEMIT"
                   @"--define:NETSTANDARD"
                   @"--define:NETSTANDARD2_1"
                   @"--define:NETSTANDARD1_0_OR_GREATER"
                   @"--define:NETSTANDARD1_1_OR_GREATER"
                   @"--define:NETSTANDARD1_2_OR_GREATER"
                   @"--define:NETSTANDARD1_3_OR_GREATER"
                   @"--define:NETSTANDARD1_4_OR_GREATER"
                   @"--define:NETSTANDARD1_5_OR_GREATER"
                   @"--define:NETSTANDARD1_6_OR_GREATER"
                   @"--define:NETSTANDARD2_0_OR_GREATER"
                   @"--define:NETSTANDARD2_1_OR_GREATER"
                   @"--doc:C:\Users\nojaf\Projects\fsharp\artifacts\obj\FSharp.Core\Debug\netstandard2.1\FSharp.Core.xml"
                   @"--publicsign+"
                   @"--optimize-"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\Microsoft.Win32.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\mscorlib.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\netstandard.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.AppContext.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Buffers.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Collections.Concurrent.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Collections.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Collections.NonGeneric.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Collections.Specialized.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ComponentModel.Composition.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ComponentModel.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ComponentModel.EventBasedAsync.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ComponentModel.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ComponentModel.TypeConverter.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Console.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Core.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Data.Common.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Data.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.Contracts.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.Debug.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.FileVersionInfo.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.Process.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.StackTrace.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.TextWriterTraceListener.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.Tools.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.TraceSource.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Diagnostics.Tracing.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Drawing.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Drawing.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Dynamic.Runtime.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Globalization.Calendars.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Globalization.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Globalization.Extensions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.Compression.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.Compression.FileSystem.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.Compression.ZipFile.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.FileSystem.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.FileSystem.DriveInfo.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.FileSystem.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.FileSystem.Watcher.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.IsolatedStorage.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.MemoryMappedFiles.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.Pipes.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.IO.UnmanagedMemoryStream.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Linq.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Linq.Expressions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Linq.Parallel.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Linq.Queryable.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Memory.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Http.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.NameResolution.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.NetworkInformation.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Ping.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Requests.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Security.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.Sockets.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.WebHeaderCollection.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.WebSockets.Client.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Net.WebSockets.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Numerics.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Numerics.Vectors.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ObjectModel.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.DispatchProxy.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.Emit.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.Emit.ILGeneration.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.Emit.Lightweight.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.Extensions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Reflection.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Resources.Reader.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Resources.ResourceManager.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Resources.Writer.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.CompilerServices.VisualC.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Extensions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Handles.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.InteropServices.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.InteropServices.RuntimeInformation.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Numerics.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Serialization.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Serialization.Formatters.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Serialization.Json.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Serialization.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Runtime.Serialization.Xml.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Claims.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Cryptography.Algorithms.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Cryptography.Csp.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Cryptography.Encoding.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Cryptography.Primitives.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Cryptography.X509Certificates.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.Principal.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Security.SecureString.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ServiceModel.Web.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Text.Encoding.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Text.Encoding.Extensions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Text.RegularExpressions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Overlapped.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Tasks.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Tasks.Extensions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Tasks.Parallel.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Thread.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.ThreadPool.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Threading.Timer.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Transactions.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.ValueTuple.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Web.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Windows.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.Linq.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.ReaderWriter.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.Serialization.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.XDocument.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.XmlDocument.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.XmlSerializer.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.XPath.dll"
                   @"-r:C:\Program Files\dotnet\packs\NETStandard.Library.Ref\2.1.0\ref\netstandard2.1\System.Xml.XPath.XDocument.dll"
                   @"--target:library"
                   @"--nowarn:FS2003,62,75,1204,NU5105"
                   @"--warn:3"
                   @"--warnaserror:3239,1182,0025"
                   @"--fullpaths"
                   @"--flaterrors"
                   @"--highentropyva+"
                   @"--targetprofile:netstandard"
                   @"--nocopyfsharpcore"
                   @"--deterministic+"
                   @"--simpleresolution"
                   @"--nowarn:3384"
                   @"--warnon:3218"
                   @"--warnon:1182"
                   @"--warnon:3390"
                   @"--warnon:3520"
                   @"--warnon:1182"
                   @"--warnon:3390"
                   @"--nowarn:57"
                   @"--nowarn:3511"
                   @"--nowarn:3513"
                   @"--compiling-fslib"
                   @"--compiling-fslib-40"
                   @"--maxerrors:100"
                   @"--extraoptimizationloops:1"
                   @"--simpleresolution" |]
              ReferencedProjects = [||]
              IsIncompleteTypeCheckEnvironment = false
              UseScriptResolutionRules = false
              LoadTime = DateTime.Now
              UnresolvedReferences = None
              OriginalLoadReferences = []
              Stamp = None }

        FSharpReferencedProject.CreateFSharp(
            @"C:\Users\nojaf\Projects\fsharp\artifacts\bin\FSharp.Core\Debug\netstandard2.1\FSharp.Core.dll",
            projectOptions
        )

    let memoFSharpCore = memoization FSharpCore


[<MemoryDiagnoser>]
type CompilerService() =
    let mutable checkerOpt = None
    let mutable sourceOpt : (string * ISourceText) array option = None

    let projectOptions : FSharpProjectOptions = Project.FSharpCompilerService ()

    [<GlobalSetup>]
    member _.Setup() =
        match checkerOpt with
        | None -> checkerOpt <- Some(FSharpChecker.Create(projectCacheSize = 200))
        | _ -> ()

        match sourceOpt with
        | None -> 
            sourceOpt <- 
                projectOptions.SourceFiles
                |> Array.filter (fun filePath -> filePath.EndsWith("CheckDeclarations.fs")) // || filePath.EndsWith("CheckExpressions.fs"))
                                                 // || filePath.EndsWith("lex.fs") || filePath.EndsWith("pars.fs"))
                |> Array.map (fun filePath -> filePath, SourceText.ofString (File.ReadAllText(filePath)))
                |> Some
        | _ -> ()

    [<Benchmark>]
    member _.ParseAndCheckFileInProject() =
        match checkerOpt, sourceOpt with
        | None, _ -> failwith "no checker"
        | _, None -> failwith "no source"
        | Some checker, Some sourceFiles ->
            checker.InvalidateAll()
            sourceFiles
            |> Array.iter (fun (filePath, sourceText) ->
                let fileResult, checkResult =
                    checker.ParseAndCheckFileInProject(filePath, 0, sourceText, projectOptions)
                    |> Async.RunSynchronously

                ()
//                if fileResult.Diagnostics.Length > 0 then
//                    failwith ($"Got parsing errors, {fileResult.Diagnostics}")
//
//                match checkResult with
//                | FSharpCheckFileAnswer.Succeeded checkFileResults ->
//                    if checkFileResults.Diagnostics.Length > 0 then
//                        failwith ($"Got checking errors, {checkFileResults.Diagnostics}")
//                | FSharpCheckFileAnswer.Aborted _ -> ()
            )

[<EntryPoint>]
let main _ =
    BenchmarkRunner.Run<CompilerService>() |> ignore
    0

Maybe my test to benchmark didn't hit the mark. I'm open to suggestions.

@kerams
Copy link
Contributor

kerams commented Apr 26, 2022

Hm, perhaps there's something very particular about the project from the original issue.

@@ -583,7 +583,7 @@ let ImportILAssemblyTypeForwarders (amap, m, exportedTypes: ILExportedTypesAndFo
yield (Array.ofList enc, exportedType.Name), tcref
yield! nested net.Nested (enc @ [ net.Name ]) ]
yield! nested exportedType.Nested (ns@[n])
] |> Map.ofList
] |> dict

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only non-empty dictionary, and I don't know which Equality dict uses, but I suspect it's not Structural.
I've sent you a suggestion via DM, as my security software seems to be blocking the code snippet in this comment :(

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typeof<string[] * string>.IsValueType is indeed false, so dict didn't do what I thought it would. source

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Having profiled this for the big project I raised #13033 for, I see a reduction in time in CcuThunk.TryForward using just dict, and no further improvement for the updated version that explicitly uses the HashComparer.

I'll do some benchmarking of the different versions and put them in a comment.

@nojaf
Copy link
Contributor Author

nojaf commented Apr 26, 2022

This still didn't do all that much in my test.

main branch:

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
12th Gen Intel Core i7-12700K, 1 CPU, 20 logical and 12 physical cores
.NET SDK=6.0.202
  [Host]     : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT DEBUG
  DefaultJob : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT
Method Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
ParseAndCheckFileInProject 12.11 s 0.047 s 0.044 s 712000.0000 180000.0000 5000.0000 9 GB

This pr:


BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000 12th Gen Intel Core i7-12700K, 1 CPU, 20 logical and 12 physical cores .NET SDK=6.0.202 [Host] : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT DEBUG DefaultJob : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT
Method Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
ParseAndCheckFileInProject 11.84 s 0.035 s 0.030 s 711000.0000 173000.0000 5000.0000 9 GB

@kerams
Copy link
Contributor

kerams commented Apr 26, 2022

If the results are reliable, 2-3% is nothing to scoff at, I'd be happy with that. By the way, can you also submit the benchmark please (with relative paths where possible)? FSharp.Core parsing and typechecking is a great scenario to track over time and I'd definitely use it too.

@nojaf
Copy link
Contributor Author

nojaf commented Apr 26, 2022

Benchmark sample added, it probably won't work on anything else than Windows though.

@ChrisCanCompute
Copy link

ChrisCanCompute commented Apr 26, 2022

Summary: This PR is 2.4s (or 4.6%) faster to compile on the project I raised the issue for.

Notes about these values:

  • I'm using hyperfine to run the below command (in WSL2).
  • I'm using 7.0.100-preview.2.22153.17 to compile the compiler (because I don't have access to 6.0.200)

Here's the command I'm running:

hyperfine '/mnt/e/dotnet--fsharp/artifacts/bin/fsc/Debug/net6.0/fsc.exe -o:bin/Test.dll -g --debug:full --noframework --define:DEBUG --define:TRACE --optimize+ --platform:x64 @refs6.txt --target:library --warn:4 --warnaserror --warnaserror:3239 --fullpaths --flaterrors --highentropyva+ --targetprofile:netcore --nocopyfsharpcore --deterministic+ --simpleresolution --warnaserror-:44 --crossoptimize+ --nooptimizationdata @files.txt' --warmup 2

My refs file looks like this:

refs6.txt
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\Microsoft.CSharp.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\Microsoft.VisualBasic.Core.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\Microsoft.VisualBasic.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\Microsoft.Win32.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\mscorlib.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\netstandard.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.AppContext.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Buffers.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Collections.Concurrent.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Collections.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Collections.Immutable.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Collections.NonGeneric.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Collections.Specialized.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.Annotations.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.DataAnnotations.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.EventBasedAsync.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ComponentModel.TypeConverter.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Configuration.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Console.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Core.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Data.Common.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Data.DataSetExtensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Data.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.Contracts.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.Debug.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.DiagnosticSource.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.FileVersionInfo.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.Process.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.StackTrace.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.TextWriterTraceListener.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.Tools.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.TraceSource.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Diagnostics.Tracing.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Drawing.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Drawing.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Dynamic.Runtime.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Formats.Asn1.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Globalization.Calendars.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Globalization.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Globalization.Extensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.Compression.Brotli.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.Compression.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.Compression.FileSystem.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.Compression.ZipFile.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.FileSystem.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.FileSystem.DriveInfo.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.FileSystem.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.FileSystem.Watcher.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.IsolatedStorage.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.MemoryMappedFiles.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.Pipes.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.IO.UnmanagedMemoryStream.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Linq.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Linq.Expressions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Linq.Parallel.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Linq.Queryable.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Memory.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Http.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Http.Json.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.HttpListener.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Mail.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.NameResolution.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.NetworkInformation.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Ping.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Requests.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Security.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.ServicePoint.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.Sockets.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.WebClient.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.WebHeaderCollection.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.WebProxy.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.WebSockets.Client.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Net.WebSockets.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Numerics.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Numerics.Vectors.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ObjectModel.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.DispatchProxy.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Emit.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Emit.ILGeneration.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Emit.Lightweight.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Extensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Metadata.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Reflection.TypeExtensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Resources.Reader.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Resources.ResourceManager.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Resources.Writer.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.CompilerServices.Unsafe.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.CompilerServices.VisualC.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Extensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Handles.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.InteropServices.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.InteropServices.RuntimeInformation.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Intrinsics.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Loader.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Numerics.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Serialization.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Serialization.Formatters.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Serialization.Json.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Serialization.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Runtime.Serialization.Xml.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Claims.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Cryptography.Algorithms.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Cryptography.Csp.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Cryptography.Encoding.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Cryptography.Primitives.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Cryptography.X509Certificates.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.Principal.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Security.SecureString.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ServiceModel.Web.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ServiceProcess.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Text.Encoding.CodePages.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Text.Encoding.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Text.Encoding.Extensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Text.RegularExpressions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Channels.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Overlapped.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Tasks.Dataflow.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Tasks.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Tasks.Extensions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Tasks.Parallel.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Thread.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.ThreadPool.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Threading.Timer.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Transactions.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Transactions.Local.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.ValueTuple.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Web.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Web.HttpUtility.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Windows.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.Linq.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.ReaderWriter.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.Serialization.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.XDocument.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.XmlDocument.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.XmlSerializer.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.XPath.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\System.Xml.XPath.XDocument.dll
-r:C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.0\ref\net6.0\WindowsBase.dll
<83 project refs>
<399 nuget refs>

My files.txt file contains:

  • 118 files (8 are fsi, 110 fs)
  • 38,986 lines of code
Commit Mean / s σ / s
master(5a8e5) 51.314 0.282
b910ad 49.055 0.312
3c1ffd 48.947 0.445

@nojaf
Copy link
Contributor Author

nojaf commented May 4, 2022

Hello @dsyme, what are your thoughts on this?
Does this look reasonable?

let forwarders = Dictionary<_, _>(HashIdentity.Structural)

let rec visit (exportedType: ILExportedTypeOrForwarder) (nets: ILNestedExportedTypes) (enc: string list) : unit =
nets.AsList()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just use for net in nets.AsList() do ...

yield! nested net.Nested (enc @ [ net.Name ]) ]
yield! nested exportedType.Nested (ns@[n])
] |> Map.ofList
exportedTypes.AsList()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just use a for loop

@@ -5291,7 +5291,7 @@ type CcuData =
override x.ToString() = sprintf "CcuData(%A)" x.FileName

/// Represents a table of .NET CLI type forwarders for an assembly
type CcuTypeForwarderTable = Map<string[] * string, Lazy<EntityRef>>
type CcuTypeForwarderTable = IDictionary<string[] * string, Lazy<EntityRef>>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you try using the ImmutableDictionary type? We should begin to be more disciplined about this.

Copy link
Contributor

@dsyme dsyme left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left three comments - but basically this is great. If we could try using ImmutableDictionary that would be great

@nojaf
Copy link
Contributor Author

nojaf commented May 5, 2022

@ChrisCanCompute could you please verify that changing the IDictionary to IImmutableDictionary didn't regress things on your end.

I had the same results here:

BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
12th Gen Intel Core i7-12700K, 1 CPU, 20 logical and 12 physical cores
.NET SDK=6.0.202
  [Host]     : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT DEBUG
  DefaultJob : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT


|                     Method |    Mean |   Error |  StdDev |       Gen 0 |       Gen 1 |     Gen 2 | Allocated |
|--------------------------- |--------:|--------:|--------:|------------:|------------:|----------:|----------:|
| ParseAndCheckFileInProject | 11.73 s | 0.027 s | 0.021 s | 716000.0000 | 184000.0000 | 5000.0000 |      9 GB |

@En3Tho
Copy link
Contributor

En3Tho commented May 5, 2022

Isn't the main point to change the comparer itself and not the collection? If I'm not wrong the main culprit was not the collection itself e.g. bucket finding/treewalking etc. Maybe we can do better here and write custom comparer that can check the most important/fast to check bits first and then check other things? The problem of generic hash comparer is that it 1) doesn't know what we really should check first 2) it can easily box stuff right and left.

For example, for these kinds of tuples we can first check string and array lengths and then check string part and only then array part. I don't think that generic comparer is optimized like that.

Also, for some reason it is slow when comparing arrays. Manual for loop is quite faster. Also, same with lists comparsion.

I guess it could be good to start making steps towards internal faster implementations of comparsion/equality etc. and gradually moving towards making them public.

Personally I've made an analyzer which is checking for boxing on generic equality / generic comparsion (called via operators) and on out solution it fires a lot. You want to compare TimeSpans?, okay, here's some boxing for you.

@nojaf
Copy link
Contributor Author

nojaf commented May 5, 2022

Hello @En3Tho, that is some good feedback there.
I can experiment a bit with a customer comparer indeed.

@En3Tho
Copy link
Contributor

En3Tho commented May 5, 2022

@nojaf Also, thank you for your work. I think the tests you did should be added to FSharpBenchmarking (if it exists) repo so people can just clone, tweak compiler and just run benchmarks. It is a good step towards making better perf infrastructure.

@vzarytovskii
Copy link
Member

@nojaf Also, thank you for your work. I think the tests you did should be added to FSharpBenchmarking (if it exists) repo so people can just clone, tweak compiler and just run benchmarks. It is a good step towards making better perf infrastructure.

We have benchmarks directory here, additional benchmark projects can be added there.

@ChrisCanCompute
Copy link

Isn't the main point to change the comparer itself and not the collection?

Yes. We're achieving this by changing the collection, which results in reference equality rather than a hash comparison

@ChrisCanCompute
Copy link

@ChrisCanCompute could you please verify that changing the IDictionary to IImmutableDictionary didn't regress things on your end.

Using immutable dictionaries, I get:

Mean / s σ / s
49.110 0.838

So looks equivalent to the regular dictionaries to me.

@nojaf nojaf force-pushed the fix-13033 branch 3 times, most recently from 99f66a7 to cc85845 Compare May 10, 2022 11:33
@nojaf
Copy link
Contributor Author

nojaf commented May 11, 2022

Hello @dsyme and @vzarytovskii. We changed the dictionary to a tree-like structure to try and further improve the lookup. The improvement is probably around 5%, although we lack the proper infrastructure to make accurate claims.
Could you please re-review this PR? Thank you.

type CcuTypeForwarderTree<'TKey, 'TValue> =
{
Value : 'TValue option
Children : Dictionary<'TKey, CcuTypeForwarderTree<'TKey, 'TValue>>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be at least IReadOnlyDictionary? It might introduce virtual interface call but it's more "correct" I believe

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd just prefer ImmutableDictionary tbh but it's ok as is, as long as a comment is added that it's immutable

| [] -> CcuTypeForwarderTable.Empty
| rootTypes ->
rootTypes
|> List.collect (fun exportedType ->
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please check perf of List.collect vs Seq.collect in this case. Seq might be slower a little bit but it will certainly allocate less.
Using list or seq is up to debate of course.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not worth checking, there is code all over the compiler like this and it should be treated as orthogonal

Copy link
Contributor

@En3Tho En3Tho May 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

True, but with all those we end up with 30-35% of compiler time taken by gc..

I've written custom array pool based builders. Do you think this approach might help here?

@dsyme
Copy link
Contributor

dsyme commented May 11, 2022

The code looks ok and given the huge number of type forwarders we now have in .NET it is to be expected that we need to improve this.

@ChrisCanCompute @nojaf The benchmark here seems to be running the Debug version of the compiler. It would be much better to test the release version?

I left a couple of other comments but I'll mark as approved.

@nojaf
Copy link
Contributor Author

nojaf commented May 12, 2022

Hello @dsyme, thank you for the review.
I've made the requested changes and optimized the creation of the tree.
This is good to go I think.

@ChrisCanCompute
Copy link

ChrisCanCompute commented May 12, 2022

Running a93e0e7 in release mode (vs master in release mode):

Commit Time / s σ / s
master 27.218 0.509
a93e0e7 25.805 0.452

Which is ~5% improvement

@vzarytovskii
Copy link
Member

I'm curious to see GC stats before and after.

@vzarytovskii vzarytovskii merged commit c11ccaa into dotnet:main May 13, 2022
@@ -5294,13 +5295,13 @@ type CcuData =
type CcuTypeForwarderTree<'TKey, 'TValue> =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a comment that either

  1. Make this a generally-named thing in Utilities ("LookupTree") OR
  2. Key and Value should be specialized to their specific types string and Lazy<EntityRef>>.

At the moment the name is specific but the code is generic (and only ever instantiated at one type), which doesn't sit quite right

@dsyme
Copy link
Contributor

dsyme commented May 16, 2022

I'm curious to see GC stats before and after.

I would expect these to be much the same, since these data structures are not being reallocated (hopefully!). They were just being slow to lookup

@nojaf nojaf deleted the fix-13033 branch May 18, 2022 11:19
charlesroddie pushed a commit to charlesroddie/fsharp that referenced this pull request May 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants