#clojure #functional-programming #lisp #clojurescript
#clojure #функциональное программирование #lisp #clojurescript
Вопрос:
Как программисты Clojure, мы используем множество анонимных функций, не думая о стоимости.
Каковы относительные затраты на создание и использование анонимных функций в clojure?
Комментарии:
1. Я немного отредактировал вопрос, чтобы избежать его закрытия как основанного на мнениях. Надеюсь, я не изменил ваших намерений.
2. И альтернативой было бы…. сохранение ссылки на именованную функцию? Если вы не копируете одну и ту же лямбду по всему своему коду, я не вижу, как это могло бы стать значительным улучшением.
3. Я бы удалил тег clojurescript. ClojureScript переносится в Javascript, а анонимные функции в js широко используются, для этого в браузерах есть оптимизация. Также принятый ответ касается Clojure.
Ответ №1:
Clojure компилирует все функции, анонимные или именованные, одинаково. Затем он сохраняет указатель на эту функцию в пространстве имен (содержащемся в переменной), чтобы другие могли найти его позже.
Нет никакой разницы во времени компиляции между функциями, которые компилируются и используются как анонимные функции, и функциями, которые компилируются, а затем имеют указатель на них, хранящийся в переменной, которая является частью пространства имен.
Когда анонимные функции используются во время выполнения, большую часть времени (возможно, всегда) они создаются путем создания замыканий (объектов), поэтому стоимость их создания составляет некоторую память и немного времени.
Если вы вызываете eval в критических по времени циклах, конечно, вы можете создать в Clojure те же проблемы, что и на любом другом языке.