krlz ([info]krlz) wrote,
@ 2008-04-08 22:50:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Анализ потока данных в MPS

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



Advertisement


(Read 4 comments)

Post a comment in response:

From:
Help
Identity URL: 
Username:
Password:
Don't have an account? Create one now.
Subject:
No HTML allowed in subject
   Help
Message:
 
Notice! This user has turned on the option that logs your IP address when posting. Help
Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…