2009-09-04 2 views
2

Начиная с F # 1.9.6.16 и Mono 2.4.2.3 Я не могу выполнить сборку F #, получив ошибку сегментации. fsi едва можно использовать (и иногда сбой), а fsc довольно болезненно медленный. В окнах F # не является самым быстрым компилятором. Есть ли что-нибудь, чтобы помочь ситуации?Возможно ли ускорить компилятор F #?

+0

Вы можете попробовать его под .NET с этой версией F # и посмотреть, если это F проблема # компилятор или моно вопрос? –

+1

Ах да, 'ngen.exe install" C: \ Program Files \ FSharp-1.9.6.16 \ bin \ fsc.exe "дает" Все цели компиляции обновлены ". Поэтому одна из причин, по которой компилятор F # 'fsc' работает быстрее в Windows, заключается в том, что его установщик предварительно скомпилировал его на собственный код, который Mono не делает. – t0yv0

ответ

3

Лучший способ помочь в этой ситуации - это файлы ошибок. Если у вас есть определенный проект или среда, которая значительно замедляется, я настоятельно рекомендую вам указать ошибку. Часто сценарии реального мира очень поучительны в отслеживании проблем производительности в продуктах.

F #, как и остальные языки в визуальной студии, обрабатывает клиентские ошибки, зарегистрированные через веб-сайт Microsoft.

(EDIT: В конкретном случае F #, вы также можете по электронной почте [email protected])

+0

Вы исправляете ошибки, которые могут быть взаимодействием между компилятором F # и моно?

+1

@James, я не работаю над F #, поэтому у меня нет точки отсчета. Вероятно, лучшее место, чтобы задать это, можно найти на [email protected] – JaredPar

+1

Насколько я знаю из-за отправки ошибок на [email protected], они не поддерживают Mono, но работают над общим ускорением компилятора для следующей версии. Было бы интересно узнать, можно ли что-нибудь сделать прямо сейчас, не дожидаясь нового F #. – t0yv0

4

Я только что нашел способ написания F # скрипты Linux, которые не полагаются на fsi, а автоматически перекомпилировать и поэтому достаточно быстро:

Учитывая /usr/local/bin/fsx:

#!/bin/bash 
src=$1 
tgt=$src.exe 
if [[ $src -nt $tgt ]] 
then 
    fsc $src -o $tgt >/dev/null && exec mono $tgt 
else 
    exec mono $tgt 
fi 

можно писать сценарии, которые опускают хижину, опираясь на оболочках по умолчанию:

#light (* 
    exec fsx $0 
*) 

printfn "Hello, world!" 

При запуске оболочка пропускает первую строку, думая, что это комментарий, и работает exec fsx $0, который компилирует скрипт с fsc, если исполняемый файл устарел, а затем запускает его. Для F # команда оболочки является просто комментарием.

+0

Это очень мило! – MichaelGG

1

В Mac OS X программа fsharpi.

hello.fs:

#light (* 
    exec fsharpi --exec $0 --quiet 
*) 

System.Console.WriteLine "Hello World" 
Смежные вопросы