Компилятор как сервис: как собрать инструменты для рефакторинга? - PullRequest
9 голосов
/ 16 мая 2011

Лиза Фейгенбаум из Microsoft говорит здесь о "Компиляторе как сервисе". Я читал, что это облегчит создание инструментов рефакторинга. Как? CAAS Mono отлично, но если версия Microsoft похожа, я не вижу, как этот конкретный вариант использования.

Ответы [ 3 ]

6 голосов
/ 16 мая 2011

«Компилятор как сервис» означает разбиение компилятора на отдельные части.

Вместо того, чтобы иметь один большой монолитный черный ящик, где исходный код входит в один конец, а скомпилированные сборки выходят в другой, вы получаете многоменьших (черных) ящиков с напечатанным выводом.

Таким образом, вы можете, например, передать исходный код в одно поле и получить абстрактное синтаксическое дерево (AST) из другого.Затем этим деревом можно манипулировать, прежде чем оно будет передано в оптимизатор, из которого поступает какое-то другое представление кода, которое может быть передано в компилятор, который затем выводит исполняемый код.

Так как я неЯ не знаю много о точных планах будущей .NET части «компилятор как сервис». Вышесказанное - просто дикая догадка, но вот как я вижу возможности.

Рефакторинг может затем работатьAST, и я бы предположил, что есть способ вернуться из AST обратно к исходному исходному коду, как с помощью отображения, так и преобразования (отображение означает, что вы можете взять узел в AST и спросить «какая часть исходного кода делает это»узел соответствует ", и преобразование будет означать" не могли бы вы дать мне исходный код, который теперь представляет этот AST, после того, как я его изменил ".)

Например, я бы увидел и JetBrains, и DevExpress, обасоздание инструментов рефакторинга для Microsoft, чтобы оценить свои усилия по написанию кода, который читает иОтличает код для рефакторинга от кода, предоставленного CAAS.

4 голосов
/ 20 октября 2011

Roslyn CTP включает пошаговое руководство для построения «Code Action», которое является нашей терминологией для чего-то, что может быть «быстрым исправлением», если оно связано с чем-то неправильным в коде, илирефакторинг, если он предлагается контекстуально.

Также взгляните на шаблон проекта CodeRefactoring, который вы увидите в Visual Studio при установке Roslyn CTP.

1 голос
/ 17 мая 2011

Моя компания (Semantic Designs) предлагает «компилятор как сервис»: Набор инструментов для реинжиниринга программного обеспечения DMS .

DMS является общим для компьютерных (любых формальных) языков. Учитывая описания языков (DMS имеет надежные версии для C ++, C #, Java, PHP, COBOL и многих других языков), DMS может анализировать источник в AST и восстанавливать действительный источник из этих AST, включая оригинальные комментарии.

DMS предоставляет различные механизмы анализатора, как настраиваемые оценки атрибутов, анализ потока, итерационные решатели, анализ использования по умолчанию, построение графа локальных и глобальных вызовов, так и глобальный анализ точек. AST могут быть модифицированы процедурным кодом (классический взлом дерева компиляторов) или преобразованиями от источника к источнику. Преобразования могут отображать AST на одном языке на тот же язык («оптимизация») или на другие языки («уточнение / перевод»). Это очень развитая инфраструктура, за которой стоит 15+ лет непрерывного проектирования.

Вы используете DMS, выбирая / определяя набор языков ввода / вывода, который вам нужен, и создавая собственный код, написанный на DSL-файлах, ориентированных на компилятор (скомпилированных DMS для создания нужного вам инструмента!), Для вызова различных частей механизма DMS, выполнить вашу цель.

DMS использовалась для создания инструментов языковой миграции (см. B-2 миграция программного обеспечения миссии Stealth Bomber ), крупномасштабных инструментов архитектуры C ++ re , запускаемых инструментов генерации кода сборочные ячейки автомобильного завода и многие классические инструменты разработки программного обеспечения (тестирование, профилировщики, обнаружение клонов, интеллектуальные разностные устройства). Это естественная основа для инструментов рефакторинга; мы работаем над этим: -}

...