Живой диапазон против достижения определений
-
23-08-2019 - |
Вопрос
В чем разница между текущим диапазоном переменной и ее определением при анализе потока данных компилятора?Оба, кажется, относятся к одному и тому же...
Решение
Это очень разные вещи, и я предлагаю вам вернуться и перечитать те определения, которые вас смутили.Достигающее определение переменной для точки, использующей данную переменную, должно быть, среди прочего, определением этой переменной.Время жизни переменной — это часть программы, в которой она может использоваться, включая и другие действия, помимо определений, например, ее чтение.
См., например, «Книгу Дракона» 1986 года, страницы 534 (возможно, слишком общие, чтобы быть полезными) и 610.
Другие советы
Достигаемые определения определяются относительно конкретного места в программе.Например, в строке 10 с кодом «a = b + c» компилятору полезно знать, каково достигающее определение «c», или, другими словами, ответить на вопрос «в каком операторе переменная c приобрела значение значение, которое может достигать строки 10?".
Живой диапазон определяется относительно переменной.Действующий диапазон переменной c начинается с определения переменной c и продолжается до следующего определения переменной (в этом месте переменная уничтожается или определяется как другая переменная, если вы используете SSA) или до конца область действия (блок, функция или программа), в которой существует переменная c.
Эти два понятия схожи, но это не одно и то же.