FSharp выполняет мой алгоритм медленнее, чем Python

Несколько лет назад я решил проблему с помощью динамического программирования:

https://www.thanassis.space/fillupDVD.html

Решение было написан на Python.

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

Результаты этого первого прямого переноса ... сбивают с толку:

Под Python:

  bash$ time python fitToSize.py
  ....
  real    0m1.482s
  user    0m1.413s
  sys     0m0.067s

В FSharp:

  bash$ time mono ./fitToSize.exe
  ....
  real    0m2.235s
  user    0m2.427s
  sys     0m0.063s

(на случай, если вы заметили «моно» выше: я тестировал и под Windows, с Visual Studio - такая же скорость).

Я ... озадачен, мягко говоря. Python запускает код быстрее, чем F #? Скомпилированный двоичный файл, использующий среду выполнения .NET, работает МЕДЛЕЕ, чем интерпретируемый код Python?!?!

Я знаю о затратах на запуск виртуальных машин (в данном случае моно) и о том, как JIT улучшают работу таких языков, как Python, но все же ... . Я ожидал ускорения, а не замедления!

Возможно, я сделал что-то не так?

Я загрузил код сюда:

https://www.thanassis.space/fsharp.slower.than. python.tar.gz

Обратите внимание, что код F # является более или менее прямым, построчным переводом кода Python.

PS Конечно, есть и другие преимущества, например безопасность статических типов, предлагаемая F #, но если результирующая скорость императивного алгоритма хуже в F # ... Я, мягко говоря, разочарован.

РЕДАКТИРОВАТЬ : Прямой доступ, как указано в комментариях:

код Python: https://gist.github.com/950697

код FSharp: https://gist.github.com/950699

40
задан ttsiodras 1 June 2016 в 16:25
поделиться