Анализирует ли программа проверки заимствований Rust локально или глобально? - PullRequest
1 голос
/ 07 августа 2020

Анализирует ли программа проверки заимствований Rust локально или глобально?

Другими словами, проверке заимствований требуется информация обо всей программе или она работает локально в рамках функции?

Я спрашиваю, потому что я хочу количественно оценить его алгоритмическую c сложность. Мне интересно, является ли проблема проверки заимствования всей программой только функции.

Ответы [ 2 ]

3 голосов
/ 07 августа 2020

Одним из принципов Rust является Local Reasoning , как для анализа c (компилятор), так и для человеческого читателя.

Вот почему сигнатуры функций так специфичны c , и потенциально подробный, с:

  • Типы для каждого аргумента и тип возвращаемого значения, явно прописанные.
  • Ограничения явно прописаны (в общем c коде).
  • Время жизни аннотации.

Последнее подчиняется правилам Lifetime Elision , как синтаксис c сахара, но эти правила сами по себе строго ограничивается сигнатурой функции.

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

Примечание: с другой стороны, с -> impl Trait генерация кода должна заглядывать внутрь функции, чтобы узнать точный тип; дело не в рассуждениях, так что это проходит.

2 голосов
/ 07 августа 2020

Средство проверки займов одновременно работает только над одной функцией.

...