Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Автоматическое распознавание циклов в коде

773  
Poiser местный житель17.11.11 14:53
Poiser
NEW 17.11.11 14:53 
Кто нибудь сталкивался с задачей автоматического распознавания циклов на уровне CLI в .NET?
Интересует методика выявления циклов и зависимостей переменных в них (глобальные, локальные и т.п).
По накидайте почитать. Или аналогичное для Java.
Создание сайтов, онлайн-магазинов в Германии
#1 
Murr патриот17.11.11 18:50
Murr
NEW 17.11.11 18:50 
в ответ Poiser 17.11.11 14:53
Декомпилируй сборку. Если она не обфускована - циклы будут на месте. Если обфускована - будут команды (детали надо смотреть) условного перехода.
То же самое для Жабы.
#2 
Poiser местный житель17.11.11 19:20
Poiser
17.11.11 19:20 
в ответ Murr 17.11.11 18:50
Это не проблема, я использую CCI (Common Compiler Infrastructure - http://ccimetadata.codeplex.com/) для анализа сборки. Проблема в другом. В IL-коде нет циклов :) там есть только условные оператор перехода и отличить например if от while не совсем просто. Кроме того меня интересуют методы определения области видимости переменных, которые используются внутри цикла. Конечная цель всего этого (курсовая) научиться находить циклы, выявлять зависимости и если возможно, то автоматически распараллеливать найденные циклы и собирать сборку обратно.
Создание сайтов, онлайн-магазинов в Германии
#3 
Murr патриот17.11.11 21:33
Murr
NEW 17.11.11 21:33 
в ответ Poiser 17.11.11 19:20
отличить например if от while не совсем просто.
------
Легко. Просто нарисуй диаграмку переходов для каждого цикла. Там их не много.
И смотри что подходит под минимальный вариант.
Ах, да... в цикле - всегда есть переход на более ранний код. У ИФа его не будет.
меня интересуют методы определения области видимости переменных
------
Никак. Этой информации нет (нет смысла ее там иметь и она не всегда она соответствует написанному) в коде. Только зная применяемую технику трансляции можно пытаться что-то найти. Но даже при этом не всегда можно выяснить нюансы различия.
автоматически распараллеливать найденные циклы
------
Не забудь, что циклы это не только do-while-for, но if+goto (c ограничениями) и foreach с итераторами...
#4 
  digital.pilot патриот17.11.11 22:10
digital.pilot
NEW 17.11.11 22:10 
в ответ Murr 17.11.11 21:33
В ответ на:
в цикле - всегда есть переход на более ранний код. У ИФа его не будет.

В ответ на:
что циклы это не только do-while-for, но if+goto

o_O
#5 
Murr патриот17.11.11 22:26
Murr
NEW 17.11.11 22:26 
в ответ digital.pilot 17.11.11 22:10
А что делать?
#6 
Victor! знакомое лицо19.11.11 10:20
Victor!
NEW 19.11.11 10:20 
в ответ Poiser 17.11.11 19:20
В ответ на:
В IL-коде нет циклов :) там есть только условные оператор перехода и отличить например if от while не совсем просто

там же можно наверное отследить точку возврата? если больше 10 раз куда то вернулись, значит цикл тип того
#7 
Poiser местный житель19.11.11 11:02
Poiser
NEW 19.11.11 11:02 
в ответ Victor! 19.11.11 10:20
Ну в общем-то я так и делаю, строю граф и его анализирую. Просто думал может быть кто-то уже сталкивался с похожими задачами и поделится литературой. Пока самая большая проблема это второй граф - зависимостей. Мне нужно определять например где декларируются переменные, которые используются внутри цикла и являются ли они локальными (следовательно каждый поток может потом такие переменные сам для себя генерировать и использовать) или же они являются глобальными по отношению к телу цикла, и тогда ещё возможно использовать оператор редуцирования (не знаю как правильно по-русски).
Создание сайтов, онлайн-магазинов в Германии
#8 
Maikop коренной житель20.11.11 00:47
Maikop
NEW 20.11.11 00:47 
в ответ Poiser 17.11.11 14:53
В ответ на:
Или аналогичное для Java.

sonargraph hello2morrow
Не сочтите меня параноиком, но мне кажется, что кто-то постоянно читает то, что я здесь пишу.
#9 
AlexOtt местный житель20.11.11 15:36
AlexOtt
NEW 20.11.11 15:36 
в ответ Poiser 19.11.11 11:02
я бы посмотрел документацию и ссылки, которые доступны на http://llvm.org/ - они там выполняют много разных видов анализа. Книжки тоже есть, типа "Path-Oriented Program Analysis", но они стоят как паравоз...
#10 
Poiser местный житель20.11.11 15:52
Poiser
NEW 20.11.11 15:52 
в ответ AlexOtt 20.11.11 15:36
Ок, спасибо посмотрю. У нас библиотека большая, возможно там что найду.
Создание сайтов, онлайн-магазинов в Германии
#11 
Nucleas прохожий01.12.11 16:00
NEW 01.12.11 16:00 
в ответ Poiser 17.11.11 19:20
Совсем непонятно зачем отличать if while for goto. Если есть переход на более ранний адрес это цикл. Если на более поздний это ветвление.
#12