Когда и где вы помещаете аннотации типов в код Clojure? - PullRequest
15 голосов
/ 03 апреля 2010

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

Ответы [ 2 ]

15 голосов
/ 03 апреля 2010

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

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

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

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

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

EDIT:

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

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

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

8 голосов
/ 03 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...