При попытке написать типостабильный код, исследуя использование @code_warntype
, должен ли я беспокоиться только о том, чтобы не иметь никаких Any
или Union
в разделе переменных, или я должен также проверить раздел тела?
Использование @code_warntype в Джулии
Ответы:
В зависимости от вашей версии julia, @code_warntype
иногда может помечать определенные выражения как безобидные. Немного потренировавшись, вы сможете легко распознавать эти выражения (например, они часто имеют отношение к поиску модуля/имени).
Самый простой путь, как говорит Реза, состоит в том, чтобы посмотреть на раздел переменных и возвращаемый тип функции; если вы не видите каких-либо количеств неопределенного типа (либо Any
, либо Union
s), вам, вероятно, не о чем беспокоиться. Если вы хотите копнуть глубже, начните пытаться понять выражения тела, которые он помечает. Для обучения полезно сравнить результаты с результатами, полученными с помощью track-allocation
, поскольку истинная нестабильность типов связана с выделением памяти.
Тем не менее, я думаю, что проблемы с @code_warntype
были исправлены на текущем мастере, поэтому в любом случае следующий выпуск julia должен упростить интерпретацию.
Обычно нет необходимости искать в части body так называемые нелистовые типы, потому что code_warntype
основная задача состоит в том, чтобы сделать эту работу за вас (проверьте источник). Но часть тела содержит больше информации о том, где и как эти нелистовые использовались.
Использованная литература:
code_warntype(f, types)
в документации.- Источник
code_warntype(f, types)
.
Any
в теле? 26.11.2015 @code_warntype также сообщает об объектах Core.NewVarNode относительно некоторых переменных. Я считаю, что без каких-либо мер эти сообщения о дополнительных выделениях памяти не приветствуются во внутренних циклах, где могут возникать частые выделения памяти. Я обычно проверяю код только в том случае, если переменная отображается как Union{} в списке переменных в выводе вывода типа. Это означает, что ошибка произойдет при выполнении до того, как переменная достигнет значения.
track-allocation
мне пришлось бы переключиться на REPL... 26.11.2015