Одним из требований к clang новому компилятору Си++ было предоставить пользователю подробную информацию об ошибках. Рассмотрим небольшой пример.
double UniversalGravitation(double G, double mass1, double mass2, double distance)
{
double F = G * ((mass1 * mass2)/(distance * dsitance));
return F;
}
Здесь допущена описка в идентификаторе. Что же покажет нам clang?
Во-первых, он заботливо подчеркивает место в длинном выражении, какой именно идентификатор он считает незнакомым. Во-вторых, он учтиво подсказывает возможное исправление. Вспомним, как выглядит похожие сообщения в Microsoft Visual Studio 2010. (Хотя Визуал Студию 2010 можно и похвалить: такой тип ошибок оно подсвечивает ещё при редактировании.)
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. Очень интересны случаи, когда оно находит ошибки в неразвёрнутых макросах или в тайпдефах.
Уже жду, когда компиляторы в будущем будут сами исправлять ошибки. А потом и сами писать код.
Круто, ага. Но я хотел бы посмотреть на сообщения об ошибках в чём-нибудь посложнее и желательно с шаблонами (а ещё лучше с ошибками в параметрах шаблонов шаблонных параметров шаблонов или что-то в этом духе :)).
ОтветитьУдалитьА еще интересно, что он скажет на рекурсию в шаблоне.
ОтветитьУдалитьСтудия ж имеет вкладку егорс, там все красиво. Или это камень в огород именно компилятора?
ОтветитьУдалитьВова, в окне "Errors" оно показывает то же самое, но в виде таблицы и с иконками. Там нет ни позиции в строке, ни предложения по исправлению.
ОтветитьУдалитьСогласен.
ОтветитьУдалить