Найти в Дзене
Science News

Будущее компилятора C++ в MSVC и Visual Studio

Мотивация и принципы Новые функции C++, такие как концепции и диапазоны, открывают возможность для более выразительного кода и более четко определенных API. Однако, чтобы максимально использовать их, от инструментария требуется более качественная диагностика, чтобы можно было точно определить и устранить сбои ограничений. Сай Брэнд представил на WG21 документ , в котором обсуждаются ключевые принципы диагностики компилятора и способы улучшения современного состояния компиляторов C++ и который использует этот документ в качестве руководства при разработке будущего продукта. В качестве первого шага производятся работы над компилятором, чтобы убедиться в том, что он собирает всю доступную информацию и может выводить ее в удобном для инструментов виде для последующего использования человеком. Также будет добавлены новые возможности диагностической визуализации в Visual Studio, чтобы упростить навигацию и понимание больших ошибок. Изменения компилятора Изменения компилятора часто генерирую
Оглавление

Мотивация и принципы

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

Сай Брэнд представил на WG21 документ , в котором обсуждаются ключевые принципы диагностики компилятора и способы улучшения современного состояния компиляторов C++ и который использует этот документ в качестве руководства при разработке будущего продукта.

В качестве первого шага производятся работы над компилятором, чтобы убедиться в том, что он собирает всю доступную информацию и может выводить ее в удобном для инструментов виде для последующего использования человеком. Также будет добавлены новые возможности диагностической визуализации в Visual Studio, чтобы упростить навигацию и понимание больших ошибок.

Изменения компилятора

  1. В последнем сообщении для контекстов инстанцирования шаблона теперь отображается текстовая колонка, в которой произошла ошибка.
  2. Теперь компилятор перечисляет всех кандидатов на вызов функции и объясняет, почему каждый кандидат не работает.
  3. Сообщение об ошибке для неудовлетворенных связанных ограничений расширено, чтобы указать, какие базовые ограничения не были удовлетворены.
Изменения IDE Опыт работы с IDE в версии 17.4 (встроенная программа просмотра)
Изменения IDE Опыт работы с IDE в версии 17.4 (встроенная программа просмотра)
Опыт работы с IDE в версии 17.4 (расширение средства просмотра SARIF).
Опыт работы с IDE в версии 17.4 (расширение средства просмотра SARIF).

Изменения компилятора часто генерируют больше текста, что иногда затрудняет их понимание. Разработчики экспериментируют с новой опцией компилятора для вывода диагностики в формат обмена результатами статического анализа (SARIF). Выходные данные будут загружены Visual Studio для визуализации иерархии сообщений, чтобы упростить навигацию.

В настоящее время при нажатии ошибки, связанной с выводом SARIF в списке ошибок Visual Studio, открывается всплывающее окно со сворачиваемой диагностической информацией. Также производятся работы над расширением SARIF Viewer, чтобы обеспечить более обширные возможности.

Технические подробности

Приведем три основные области, на которых сейчас сосредоточен компилятор.

Общая инфраструктура (источник)

Информация столбца в сообщениях об ошибках была добавлена ​​в Visual Studio 2017. Однако иногда она отсутствует или неверна.

  • Отсутствие информации о столбце часто связано с тем, что компилятор не всегда распространяет информацию о столбце между функциями.
  • Иногда создается неверная информация о столбцах, потому что компилятор не поддерживает необходимую информацию во вложенных контекстах (например, создание экземпляра специализации шаблона) и ее значение неверно изменено.

Продолжается проверка API-интерфейсы, которые манипулируют исходным местоположением, чтобы убедиться, что они распространяют и поддерживают информацию столбца.

По-прежнему бывают случаи, когда информация в столбце изначально неверна (что часто встречается в функциях, сгенерированных компилятором), поэтому, если вы столкнулись с какой-либо из них, сообщите нам об этом!

Разрешение перегрузки

Сообщения об ошибках для разрешения перегрузки различаются в зависимости от того, является ли функция глобальной функцией или функцией-членом, является ли она оператором или нет, и зависит от количества доступных кандидатов. Это вызывает такие несоответствия, как:

  • Компилятор часто перечисляет только последнего кандидата, который он пробовал.
  • Компилятор иногда перечисляет всех кандидатов, но не объясняет, почему каждый из них не работает.
  • Компилятор часто игнорирует кандидатов в шаблоны.

Концепция (неудовлетворенные связанные ограничения)

Раньше компилятор выдавал только одно сообщение общего назначения для неудовлетворенных связанных ограничений.

Теперь компилятор выдаст все связанные ограничения, которые способствуют данному сбою. Некоторые из них будут иметь объяснение, а другие нет.

Однако, все еще производятся работы над последним, потому что большая часть логики семантического анализа еще не передает причины вызывающей стороне — логика проверки ограничений знает только, что что-то не удалось.

#наука #ПРОГРАММИРОВАНИЕ #C++ #РАЗРАБОТКА #ПРОГРАММИСТ #ОБРАЗОВАНИЕ #НОВОЕ