Производительность мультиметодов

Каков хит производительности использования много методов? Если у меня есть 2 функции с тем же именем и тем же количеством аргументов, которые отличаются только типом (список по сравнению с интервалом), моя производительность собирается пострадать очень?

Другими словами, это это лучше для именования моей функции добавления вектора: "добавлять-вектор" или отпуск это, как "добавляют" или возможно "+"?

(Ради простоты позволяют нам проигнорировать проблемы, у меня могут быть встроенные функции переопределения как "+").

6
задан Timothy Baldridge 16 June 2010 в 12:15
поделиться

2 ответа

Использование мультиметодов сопряжено с издержками производительности, но если нет крайней необходимости, вы должны продолжать использовать их, если они являются лучшей абстракцией.

Тем не менее, протоколы в Clojure 1.2 обеспечивают "родную" скоростную альтернативу мультиметодам для некоторых случаев использования, и особенно подходят для случаев, когда раньше можно было использовать мультиметод с диспетчеризацией на основе типов.

9
ответ дан 10 December 2019 в 00:33
поделиться

Так как Clojure может использовать произвольные диспетчерские функции, дополнительные затраты на мультиметод - это стоимость диспетчерской функции + поиск по карте.

Или, как выразился cemerick:

(defmulti can-your-dispatch-do-that?
  (fn [& _]
    (if (= (phase-of-moon) :full)
      :do-this
      :do-that)))
1
ответ дан 10 December 2019 в 00:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: