Мне нравится F #; Я действительно, правда. Будучи укушенным "функциональным программированием", я заставляю себя использовать его, когда у меня есть возможность. Фактически, я недавно использовал его (в течение одной недели) для код хорошего алгоритма AI.
Однако мои попытки до сих пор (см. вопрос SO, связанный с моей первой попыткой здесь), как представляется, указывают на то, что, хотя, несомненно, красиво... F # имеет самый медленный скорость выполнения всех языков, которые я использовал.
Я делаю что-то не так в своем коде?
Я подробно объясню, что я сделал в своем сообщении в блоге, и в моих экспериментах я вижу OCaml и остальную группу, работающую где угодно от 5x до 35x быстрее, чем F #.
Я единственный, у кого такие переживания? Я нахожу это обескураживающим, что язык, который мне больше всего нравится, также самый медленный - иногда далеко...
EDIT: прямая ссылка GitHub, где код живет в разных языковых формах...
EDIT2: благодаря Томасу и Даниэлю скорость значительно улучшилась:
- Наибольшее ускорение скорости: переход от "ref" к "mutable" дал колоссальные 30%.
- Удаление исключений и использование while/flagChecks дали еще 16%.
- Переключение с дискриминированных объединений на перечисления дало еще 5%.
- "inline" дал 0.5-1%
EDIT3: Д-р Джон Харроп присоединился к бою: 60% ускорение, заставив ScoreBoard работать непосредственно с "перечислимой" версией данных. Настоящая версия F # теперь работает в 3-4 раза медленнее, чем С++, что является хорошим результатом для среды выполнения на базе VM. Я считаю, что проблема решена - спасибо, ребята!
EDIT4: после слияния всех оптимизаций это результаты (F # достиг С# в императивном стиле - теперь, если бы я мог что-то делать с функциональным стилем!)
- real 0m0.221s: Это был С++
- real 0m0.676s: Это был С# (императив, С++-зеркало)
- real 0m0.704s: Это F # (императив, зеркало С++)
- real 0m0.753s: Это был OCaml (императив, С++-зеркало)
- real 0m0.989s: это OCaml (функциональный)
- real 0m1.064s: Это была Java (императив)
- real 0m1.955s: Это был F # (функциональный)