f # медленная компиляция - PullRequest
       25

f # медленная компиляция

4 голосов
/ 20 августа 2011

Могу ли я что-нибудь сделать, чтобы код f # компилировался быстрее, кроме (или, что еще лучше, вместо) запуска ngen?

И каково приблизительное время компиляции "hello world" (или лучше сказать, при запуске компиляторавремя + время компиляции) для, скажем, машины Pentium 4?

Edit Как выясняется, есть нюансы:)

Итак, во-первых, кто-нибудь может объяснить, что такое запусквремя компилятора?И почему это медленно.Также приветствуются ссылки на информацию по всему процессу компиляции f #.

Контекст: компилятор f # неоднократно вызывается для небольших фрагментов кода через

using (CodeDomProvider provider = new Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider())
{
  //start time
  cr = provider.CompileAssemblyFromSource(cp, new string[] { data.Program });
  //end time
}

Разница во времени составляет ~ 6 сек.Таким образом, вопрос в основном заключается в том, что можно сделать, кроме ngen?Вы можете увидеть здесь: rundotnet

1 Ответ

5 голосов
/ 21 августа 2011

Это займет 0,9 с на моем компьютере (AMD Athlon 64 X2 4600):

#r "FSharp.Compiler.CodeDom"

open System.Reflection
open System.CodeDom.Compiler
open Microsoft.FSharp.Compiler.CodeDom

let comp() =
    use provider = new FSharpCodeProvider() 
    let code = "module pp\n printfn \"Hello world\""
    let cp = new CompilerParameters() 
    cp.GenerateInMemory <- true 
    provider.CompileAssemblyFromSource(cp, [|code|]) |> ignore
#time
comp()
...