Когда и где вы помещаете аннотации типа в код Clojure?

Когда и где вы помещаете аннотации типа в код Clojure? Очевидно, когда производительность подсчитывается. Но существуют ли правила, которыми вы можете жить когда (только при выполнении Java Interop?) И где их добавлять (аргументы определения функции)?

Ответы

Ответ 1

Исключительная причина, о которой я знаю, - это производительность. Тип подсказки в clojure удаляет отражение, что может замедлить производительность. Поэтому я бы поставил типы подсказок в функции, которые, как я оценил, были критичными по производительности.

В разделе java interop в clojure.org есть описание ,. Среди замечаний:

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

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

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

EDIT:

Относительно вашего вопроса "Только для java interop?" --no. Тип подсказок будет полезен даже в чистом приложении clojure. Проблема замедления производительности отражения - это факт жизни на JVM, и это проблема, с которой приходится сталкиваться с динамическими языками в целом.

Относительно того, где могут быть размещены подсказки типов, от clojure.org:

Они могут быть помещены на функциональные параметры, имена с привязкой, имена переменных (если они определены) и выражения:

Ответ 2

Я знаю, что вы уже приняли ответ, и это не прямой ответ на ваш вопрос, но Лау только что опубликовал действительно хорошую статью о Функциональная динамика жидкости в Clojure, который является довольно образовательным, когда дело доходит до типа-намекания по соображениям производительности.