f # компилируется слишком медленно - PullRequest
19 голосов
/ 15 января 2011

Я новичок в f #. Я скачал оболочку Visual Studio 2010 и F # ctp и написал небольшой сценарий hello world со следующим кодом

printfn "Hello World"
let _ = System.Console.ReadLine()

Это занимает от 13 до 15 секунд для компиляции, что очень медленно по сравнению с запуском подобного скрипта C # (который занимает около 2 секунд). Мне бы хотелось, чтобы скрипт F # компилировался быстрее, чтобы сократить время разработки (т. Е. Экспериментирования), а мне не важна производительность во время выполнения.

Есть ли способ ускорить компиляцию скрипта F #, может быть, включить / выключить некоторые настройки сборки в Visual Studio или что-то в этом роде?

К вашему сведению, я использую 4-летний процессор Pentium 4, 1,5 ГБ ОЗУ, если это поможет.

Ответы [ 3 ]

39 голосов
/ 15 января 2011

Я понятия не имею, как быстро Pentium 4 должен скомпилировать эту программу "hello world", но 15 секунд кажутся мне довольно медленными.Однажды у меня были похожие проблемы со скоростью в бета-версии VS 2010, и проблема заключалась в том, что Visual Studio и компилятор F # еще не были должным образом NGENed.

Обычно при установке Visual Studio все должно быть NGENed, но, возможно, что-то пошло не так.Вы можете проверить, был ли компилятор F # NGENed следующей командой в окне консоли с правами администратора:

cd "C:\Program Files\FSharp-2.0.0.0\bin"
c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe display fsc.exe

Если результат этого показывает, что собственное изображение fsc.exe все еще ожидает рассмотрения, вы можетефорсировать компиляцию с помощью:

c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

Примечание: Я не уверен, какую именно версию компилятора F # вы используете.При полной установке VS2010 используется тот, который используется в C:\Program Files\Microsoft F#\v4.0 (или C:\Program Files (x86)\Microsoft F#\v4.0 на 64-битных машинах).Таким образом, если вы используете его, вам нужно cd в эту папку вместо папки C:\Program Files\FSharp-2.0.0.0\bin.

6 голосов
/ 15 января 2011

К сожалению, вы ничего не можете сделать - компилятор F # просто медленнее компилятора C #.Но позвольте мне объяснить, почему:

Почему компилятор F # работает медленнее, чем компилятор C #

Во-первых, компилятор F # написан на .NET, компилятор C # написанв C ++.Хотя это само по себе не является смертным приговором для исполнения, оно действительно имеет значение.Во-вторых, компилятору C # более 10 лет.Было много времени, чтобы настроить и оптимизировать его - и сам компилятор, и среду выполнения .NET.Движок .NET JIT был точно настроен для C # / VB.NET, а не для F #.Функциональное программирование требует много недолговечных объектов, что приводит к различному типу поведения GC.

Но настоящая причина, по которой компилятор F # заметно медленнее, чем компилятор C #, заключается в том, что он выполняет большеработать , чем компилятор C #.В C # вы предоставляете всю информацию о типах, которая в некотором смысле выполняет работу для компилятора.F #, с другой стороны, делает вывод типов для вас, что, избавляя вас от бремени аннотаций, требует дополнительного времени процессора.

Что вы можете сделать

Я рекомендуювы загружаете оболочку Visual Studio 2008 и используете F # для .NET Framework 2.0.Если вам не нужно что-то, что есть только в Visual Studio 2010 или CLR 4.0, у вас все будет хорошо в Visual Studio 2008. Язык F # функционирует точно так же.Единственное отличие, IIRC, заключается в том, к каким типам относятся определенные вещи.Например, в CLR 4.0 встроен тип Tuple <_>, но при нацеливании на CLR 2.0 используется тип кортежа, определенный в FSharp.Core.dll.

Visual Studio 2010 предлагает множество удобных звонков исвистки, такие как редактор кода на основе WPF.Однако эти тонкости потребляют много оперативной памяти, и в вашем случае кажется, что вы можете жить без них.

5 голосов
/ 15 января 2011

Обратите внимание, что вы можете использовать F # Interactive для оценки фрагментов кода или сценариев, и, поскольку окно FSI в VS остается открытым, оно намного быстрее (время запуска fsc.exe плохое).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...