Информация об изменениях

Сообщение Re[11]: MS забило на дотнет. Питону - да, сишарпу - нет? от 28.07.2021 12:09

Изменено 28.07.2021 12:10 vdimas

Re[11]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Ночной Смотрящий, Вы писали:

V>>Давно последний раз на Resharper C++ смотрел?

НС>Никакой чудо решарпер не поможет сделать С++ столь же пригодным к рефакторингу, как C# или Java.

Вдогонку, немного технических подробностей.

Сложность автокомплита, навигации и рефакторинга С++ в сравнении с C# или Java возражений никогда не вызывала.

Сложность эта заключается в системе препроцессора, который подключает файлы через include и раскрывает макроопределения.
В итоге возможна ситуация, когда в зависимости от определений символов, "смысл" одного и того же подключаемого из разных мест файла может изменяться.
Эта сложность объективная, но не преодолимая.

Напомню, что в C# тоже есть возможность подключать одни и те же физические файлы в разные проекты и тоже можно воссоздать ситуацию, когда одни и те же символы имеют в таком многократно подключенном файле разный смысл. Чтобы корректно разбираться со "смыслом" такихй файлов, Решарперу необходима информация из файлов проектов C#.

Аналогично он поступает с проектами С++ — разбирает файлы проектов и в точности знает значения всех символов во всех версиях одного и того же файла.
Разумеется, подхватывает так же настройки самой среды разработки и переменные среды, т.к. и там и там обычно содержится информация (или часть её) о внешних зависимостях.
Еще рядом упоминал, что Решарпер С++ и CLion отлично "вынюхивает" Make и CMake-файлы, теперь не хуже чем формат MSBuild для C#/C++, т.е. теперь он способен построить точную модель кода для различных видов проектов, что и требуется для точной навигации/автокомплита/рефакторинга.

Рзумеется, задача эта оказалось более сложной, чем для C# или Java, но они её решили, респект.

Да, в процессе рефакторинга такие подключаемые из разных мест файлы, "меняющие свой смысл", могут утрачивать валидность.

Происходящее в этом случае аналогично кейзу для C#, когда один и тот же файл подключается из разных проектов, т.е. поведение Решарпера для двух этих языков аналогично — на этапе предпросмотра изменений он сигнализирует о будущих ошибках в коде в результате рефакторинга, давая возможность отметить или нет те места, которые можно скипнуть в процессе рефакторинга и/или вообще согласиться или нет с происходящим.
Re[11]: MS забило на дотнет. Питону - да, сишарпу - нет?
Здравствуйте, Ночной Смотрящий, Вы писали:

V>>Давно последний раз на Resharper C++ смотрел?

НС>Никакой чудо решарпер не поможет сделать С++ столь же пригодным к рефакторингу, как C# или Java.

Вдогонку, немного технических подробностей.

Сложность автокомплита, навигации и рефакторинга С++ в сравнении с C# или Java возражений никогда не вызывала.

Сложность эта заключается в системе препроцессора, который подключает файлы через include и раскрывает макроопределения.
В итоге возможна ситуация, когда в зависимости от определений символов, "смысл" одного и того же подключаемого из разных мест файла может изменяться.
Эта сложность объективная, но не преодолимая.

Напомню, что в C# тоже есть возможность подключать одни и те же физические файлы в разные проекты и тоже можно воссоздать ситуацию, когда одни и те же символы имеют в таком многократно подключенном файле разный смысл. Чтобы корректно разбираться со "смыслом" таких файлов, Решарперу необходима информация из файлов проектов C#.

Аналогично он поступает с проектами С++ — разбирает файлы проектов и в точности знает значения всех символов во всех версиях одного и того же файла.
Разумеется, подхватывает так же настройки самой среды разработки и переменные среды, т.к. и там и там обычно содержится информация (или часть её) о внешних зависимостях.
Еще рядом упоминал, что Решарпер С++ и CLion отлично "вынюхивает" Make и CMake-файлы, теперь не хуже чем формат MSBuild для C#/C++, т.е. теперь он способен построить точную модель кода для различных видов проектов, что и требуется для точной навигации/автокомплита/рефакторинга.

Рзумеется, задача эта оказалось более сложной, чем для C# или Java, но они её решили, респект.

Да, в процессе рефакторинга такие подключаемые из разных мест файлы, "меняющие свой смысл", могут утрачивать валидность.

Происходящее в этом случае аналогично кейзу для C#, когда один и тот же файл подключается из разных проектов, т.е. поведение Решарпера для двух этих языков аналогично — на этапе предпросмотра изменений он сигнализирует о будущих ошибках в коде в результате рефакторинга, давая возможность отметить или нет те места, которые можно скипнуть в процессе рефакторинга и/или вообще согласиться или нет с происходящим.