Дорого ли объявление анонимных функций в Clojure?

#clojure #functional-programming #lisp #clojurescript

#clojure #функциональное программирование #lisp #clojurescript

Вопрос:

Как программисты Clojure, мы используем множество анонимных функций, не думая о стоимости.

Каковы относительные затраты на создание и использование анонимных функций в clojure?

Комментарии:

1. Я немного отредактировал вопрос, чтобы избежать его закрытия как основанного на мнениях. Надеюсь, я не изменил ваших намерений.

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

3. Я бы удалил тег clojurescript. ClojureScript переносится в Javascript, а анонимные функции в js широко используются, для этого в браузерах есть оптимизация. Также принятый ответ касается Clojure.

Ответ №1:

Clojure компилирует все функции, анонимные или именованные, одинаково. Затем он сохраняет указатель на эту функцию в пространстве имен (содержащемся в переменной), чтобы другие могли найти его позже.

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

Когда анонимные функции используются во время выполнения, большую часть времени (возможно, всегда) они создаются путем создания замыканий (объектов), поэтому стоимость их создания составляет некоторую память и немного времени.

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