Однією з вимог до clang — нового компілятора C++ — було надати користувачеві докладну інформацію про помилки. Розгляньмо невеликий приклад.

[]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. (Хоча Visual Studio 2010 можна й похвалити: такий тип помилок вона підсвічує ще під час редагування.)

consoleoutputvs2010

gcc показує щось на кшталт такого:

<font size="2" face="Consolas">/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</font>

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

Уже чекаю, коли компілятори в майбутньому самі виправлятимуть помилки. А потім і самі писатимуть код.