2015-01-21 2 views
1

Если функции Clojure хранятся как vars, означает ли это, что есть дополнительный поиск для их выполнения по сравнению с, например, статические методы в Java?Функциональность вызова функции Clojure

Если да, есть ли способ определить функцию в Clojure, чтобы она вызывалась без штрафа за производительность? (Или, если нет, как избежать этого штрафа за производительность?)

ответ

2

Да, var необходимо разблокировать, чтобы получить связанную функцию, и поэтому есть дополнительные накладные расходы (deref, cast, invoke) по сравнению с прямым вызов статического метода.

Существует open enhancement ticket, в котором предлагается внести изменения в Clojure, чтобы улучшить производительность вызова, а также обходное предложение далее в комментариях.

+1

Конечно, это можно смягчить, связывая функцию локально, если она будет использоваться часто в определенном контексте '(let [bound-f f] ...)' – noisesmith

Смежные вопросы