| krlz ( @ 2008-04-08 22:50:00 |
Data Flow анализ позволяет делать много полезных проверок: находить присваивания переменных, значения которых не используются, обнаруживать места, где к переменным обращаются до их присваивания, пользуясь результатами этого анализа можно сделать рефакторинг Extract Method. Вобщем, это очень полезный анализ, позволяющий улучшить экспиринс от работы с IDE. Не удивительно, что в MPS мы сделали его поддержку, и конечно для этого был сделан свой язык.
Чтобы реализовать поддержку Data Flow в языке, необходимо представить коснтрукцию языка в виде последовательности виртуальных инструкций. Среди них есть такие:
- read x, - где x переменная. инструкция представляет обращение к переменной
- write x, - где x переменная. инструкция представляет запись в переменную
- jump position - безусловных переход
- ifjump position - условный переход
- ret - возврат из текущей программы
Рассмотрим пример. Вот так выглядит Data Flow для цикла do...while.
Сначала при помощи конcтрукции code for мы вставляем код для тела цикла, потом проверяем условие, и возможно переходим на начало цикла. Серые скобки означают код, который легально может быть unreachable (мы ищем unreachable код по тому же графу инструций, на котором делаем анализ). Как видно код прост, понятен и очень Domain specific.
Рассмотрим более сложный пример: switch statement
В начале мы вычисляем выражение, по которому делаем свитч. Потом добавляем переходы на варианты, и в конце добавляем дефолтный блок.
P.S. Все это доступно в последнем билде, который вы можете скачать Отсюда Также мы ищем стажеров, для работы в проекте MPS. Для того, чтобы попасть к нам, нужно решить тестовое задание. Если вас это интересует, пишите на Konstantin.Solomatov@jetbrains.com