14 авг. 2010 г.

Сообщения об ошибках в clang

Одним из требований к clang — новому компилятору Си++ — было предоставить пользователю подробную информацию об ошибках. Рассмотрим небольшой пример.

double UniversalGravitation(double G, double mass1, double mass2, double distance)
{
    double F = G * ((mass1 * mass2)/(distance * dsitance));
    return F;
}

Здесь допущена описка в идентификаторе. Что же покажет нам clang?

consoleoutput

Во-первых, он заботливо подчеркивает место в длинном выражении, какой именно идентификатор он считает незнакомым. Во-вторых, он учтиво подсказывает возможное исправление. Вспомним, как выглядит похожие сообщения в Microsoft Visual Studio 2010. (Хотя Визуал Студию 2010 можно и похвалить: такой тип ошибок оно подсвечивает ещё при редактировании.)

consoleoutputvs2010

gcc показывает что-то вроде такого:

/tmp/webcompile/_13952_0.cc: In function 'double UniversalGravitation(double, double, double, double)':
/tmp/webcompile/_13952_0.cc:3: error: 'dsitance' was not declared in this scope

Почитать о других возможностях диагностического механизма компилятора clang можно в справке: Expressive Diagnostics. Очень интересны случаи, когда оно находит ошибки в неразвёрнутых макросах или в тайпдефах.

Уже жду, когда компиляторы в будущем будут сами исправлять ошибки. А потом и сами писать код.

5 комментариев:

  1. Круто, ага. Но я хотел бы посмотреть на сообщения об ошибках в чём-нибудь посложнее и желательно с шаблонами (а ещё лучше с ошибками в параметрах шаблонов шаблонных параметров шаблонов или что-то в этом духе :)).

    ОтветитьУдалить
  2. А еще интересно, что он скажет на рекурсию в шаблоне.

    ОтветитьУдалить
  3. Анонимный20.08.2010, 00:15

    Студия ж имеет вкладку егорс, там все красиво. Или это камень в огород именно компилятора?

    ОтветитьУдалить
  4. Вова, в окне "Errors" оно показывает то же самое, но в виде таблицы и с иконками. Там нет ни позиции в строке, ни предложения по исправлению.

    ОтветитьУдалить
  5. Анонимный09.09.2010, 14:52

    Согласен.

    ОтветитьУдалить

Темы

2012 (2) амазон (1) анпакинг (1) артемий лебедев (4) атн (1) аудио (1) аэропорт (1) безопасность (3) бизнес (1) билайн (1) блог (2) будущее (2) видео (11) википедия (5) вымысел (16) гагарин (1) герман (1) гитхаб (1) гугл (3) дед мороз (1) декабрь (1) демотиватор (2) дети (2) дизайн (13) диссертация (2) документация (1) друзья (5) евпатория (1) евро-2012 (1) жадность (1) заяц (1) идея (1) имейл (1) инстаграм (1) интервью (5) интересное (20) интерфейс (13) история (7) как_выжить (4) календарь (1) капитализм (1) картина (1) кмб (6) книга (6) коллекция (4) компилятор (2) конкурс (5) космос (1) лаборатория (1) либералы (1) лингво (1) лузер (6) макаренко (2) макдональдс (2) математика (1) медиапорт (1) ментор (1) металлика (1) металлист (2) метро (7) микрософт (6) миргород (1) москва (2) музыка (3) наркомания (1) новости (17) образование (3) оптимизация (5) основы (14) открытки (3) ошибка (11) памятник (1) патриотизм (3) плагиат (1) плата (1) погода (3) поиск (1) политика (2) полтава (2) праздник (1) программирование (15) прошлое (2) путешествия (8) рейтинг (1) рендер (1) рисунок (2) русские (1) русский язык (1) сайт (4) санкт-петербург (1) сапр (7) сеть (1) си++ (1) синтез (1) системси (1) скриншот (40) социализм (1) соцопрос (3) спектрум (2) спорт (2) срач (2) статистика (1) такси (1) тбб (3) твитер (9) тимошенко (1) украина (5) униан (1) фан (30) фокус (1) фото (39) фотошоп (1) фурсенко (1) футбол (2) хабр (1) харьков (21) хнурэ (19) хобби (4) цитата (2) чехия (1) школа (1) эпл (1) эхостар (1) юмор (1) яндекс (1) clang (2) doxygen (1) english (3) ios (1) llvm (1) msdn (1) outlook (1) PHP (1) stackoverflow (1)

Поиск

Читатели