1
УДК 004.415.53
Построение срезов для программ
на динамических языках
© А.О. Крючков, В.А. Крищенко
МГТУ им. Н.Э. Баумана, Москва, 105005, Россия
Предложен метод построения срезов, учитывающий особенности динамических
языков программирования и основанный на построении траектории в ходе интер-
претации программы и последующем формировании на ее основе графа программ-
ных зависимостей. Метод реализован для построения срезов программ на языке
Lua путем модификации его интерпретатора.
Ключевые слова:
срезы программ, анализ программ, динамические языки.
Срез программы — это подмножество ее операторов, влияющее
на результат, вычисляемый в заданной точке программы [1]. Постро-
ение срезов применяется в отладке, сопровождении и тестировании
программ, а также при оптимизации и распараллеливании программ
[2].
Существующие методы построения срезов опираются на статиче-
ский анализ зависимостей по данным и управлению, т. е. предпола-
гают, что все возможные зависимости заранее известны. Методы по-
строения динамических срезов [3], учитывающих зависимости, воз-
никающие в программе на конкретных исходных данных, также
предполагают, что множество всех зависимостей в программе из-
вестно заранее, и выбирают подмножество задействованных зависи-
мостей на основании траектории выполнения программы.
Таким образом, существующие методы построения срезов при-
менимы только для программ, не меняющих структуру межопера-
торных зависимостей во время выполнения. В последние годы воз-
росла популярность так называемых динамических языков, характе-
ризующихся, среди прочего, динамической типизацией, возможно-
стью модификации типов данных и объектов и встроенными высоко-
уровневыми средствами кодогенерации «на лету». Для программ на
этих языках статический анализ зависимостей затруднен или невоз-
можен. Работы [4, 5] показывают, что многие реальные программы
на таких динамических языках опираются на их динамические воз-
можности, и, следовательно, существующие методы построения сре-
зов к ним не применимы. Таким образом, актуальна проблема по-
строения срезов для программ на динамических языках.