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

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

15
задан Michiel Borkent 2 April 2010 в 20:55
поделиться

2 ответа

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

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

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

15
ответ дан 1 December 2019 в 03:14
поделиться

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

8
ответ дан 1 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

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