metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-11-21 01:44 pm

diff и смысл сравниваемых файлов

А вот скажите, есть ли какая-нибудь вариация diff, умеющая не только сравнивать текст, а кроме того, еще и пользоваться информацией о структуре или смысле этого текста?
Например, сравнение двух исходников было бы намного гуманнее, если сначала их оба отпарсить в AST, а потом только сравнивать - сразу прекратились бы всевозможные заморочки типа "поменяли порядок расположения методов, переформатировали код - diff показывает хрень".
Если сравнивать что-то вроде таблиц БД, то очевидно, что сначала надо сравнить их метаданные, построить (возможно, при помощи человекопользователя) трансформацию одной таблицы в другую, а потом уже с ее учетом сравнивать, "что изменилось в записях".
В принципе, наверно можно такое сделать, прикрутив между diff и файлами какие-то промежуточные фильтры.

[identity profile] permea-kra.livejournal.com 2010-11-21 12:08 pm (UTC)(link)
есть для xml

[identity profile] denisioru.livejournal.com 2010-11-21 12:42 pm (UTC)(link)
XML несравненно проще AST-дерева

[identity profile] permea-kra.livejournal.com 2010-11-21 01:00 pm (UTC)(link)
Любую древовидную структуру можно отразить в XML. Так что неправда ваша.

[identity profile] denisioru.livejournal.com 2010-11-21 01:02 pm (UTC)(link)
Я с этим не спорю, просто тогда надо будет писать свой компилятор на каждый язык, исходники которого будешь сравнивать. Или брать исходники компилера и точить свой инструмент из него. А чуть сложнее "сравнить XML".

[identity profile] permea-kra.livejournal.com 2010-11-21 01:43 pm (UTC)(link)
Ну, есть gcc-xml, как минимум. Для F# нужно потроха компилятора смотреть, это да.