Visual Studio 2012

Привет всем.

Вчера вечером решил не добивать последний две недели из 90-дневного тестового режима и приобрести этот шедевр для создания программного обеспечения. О VS2012 не писал только ленивый, чиркну и я пару строчек о своих впечатлениях.

IDE
После года программирования в VS2010 на C#, поддержка C++ в 2010 студии начала наводить некоторое уныние. К хорошему быстро привыкаешь. В 2012 студии, в плане плюсов, стало гораздо лучше. Позабавили расширенные возможности в плане раскраски исходного текста. Чем я незамедлительно воспользовался, раскрасив в рыжий цвет аргументы функций 🙂


Подсветка аргументов функций в редакторе VS2012

Общее положительное впечатление немного портит обнаруженный баг в редакторе кода. Будем надеяться, что в Update #2 это исправят.

Компилятор C++
Хотя в студии я «живу» больше пяти лет, все равно никак не могу привыкнуть, что её компилятор C++ работает стабильно и полученные бинарники содержат только мои баги. Меня может понять только тот, кто достаточно долго и более чем плотно использовал компиляторы Borland и его потомков. Линейка BC5.x, BCB1-BCB3 прошлись по моей хрупкой натуре кованными дырявыми сапогами и способствовали появлению более чем циничного отношения к программированию как таковому.

Если сравнивать компилятор из VS2012 с компилятором из VS2010 на примере сборки (из командной строки) релизной 64-битной DLL IBProvider-a с полной оптимизацией кода, то получаются такие цифры:

Компилятор Компиляция Линковка Размер бинарника
VS2010 90 сек 90 сек 6 235 648 байт
VS2012 150 сек 70 сек 5 963 264 байт

Судя по моим записям, исходные тексты провайдера выдержали перекомпиляцию без каких либо дополнительных изменений. Что не может не радовать. При переходе на VS2010, некоторые вещи пришлось доработать.

Анализатор кода.
Это, пожалуй главный элемент новой студии, который полностью окупает затраты на её приобретение уже в первые дни часы эксплуатации. Я был реально впечатлен работой статического анализатора кода. И теперь страшно думать о том, что существуют отдельные продукты связанные с этой темой.

Общее число проблем, которые обнаружил анализатор, было в районе 250 штук. Для моего объема кода — это не так и много. Из них две сотни — однотипные, связанные с моим детским увлечением писать «оптимизированный» код вида:

if(HRESULT const hr=<вызов>)
{
 assert(FAILED(hr));

 //... обработка ошибок
}//if

Я, вообщем-то, понимал, что так писать не стоит. Но, в глубине души радовался — «вот какой я молодец, пишу клевую проверку для S_OK и FAILED-кодов». Получив «по морде» от анализатора, я привел такие проверки к нормальному виду:

HRESULT const hr=<вызов>;

if(FAILED(hr))
{
 //... обработка ошибок
}//if

assert(hr==S_OK);

После этого число предупреждений резко уменьшилось и я вдумчиво их проанализировал. Среди всего прочего, этот черт нашел:

  1. ошибки в логических выражениях
  2. ошибку в работе с массивами (потенциально возможный доступ к следующему за последним элементом)

Во всех случаях, проблемы могли привести к AV. А связанный код был написан так давно, что анализатор (по ходу) был первым кто в него заглянул за последние пять лет.

Так что, самоуверенности он немного уменьшил. Хотя, опять же. Если сравнивать с тем, что я вижу при компиляции того же Firebird (там даже анализатором сканировать не надо — предупреждений компилятора вполне достаточно) — IBProvider находится просто в отличной форме. И, наверное, любая другая форма для него неприемлема.

Единственное неудобство — очень медленная работа анализатора. Он работает в один поток, и компилирует по одному файлу за раз. Сканирование всего исходного кода провайдера занимает около часа на i7-2670. Хочется надеяться, что в будущем его работу распараллелят.

Вывод
За смешные деньги (а через Microsoft Store — еще дешевле) можно сходу радикально улучшить процесс программирования на C++. И если с 2010 студией уже было классно, то с VS2012 вполне можно получить допаминовый резонанс 🙂

6 комментариев

dimitr  on 18 марта, 2013

Меня после VC8 тормозная компиляция в VC10 бесит, а этот еще медленнее? Куда катится мир…

Kovalenko  on 18 марта, 2013

Релизные бинарники 64-битного провайдера (сборка 14739)

VC10: 6 235 136
VC9: 7 380 480
VC8: 7 737 344

бинарника от VC11 нет, но думаю будет ~5 963 264

Плюс на VC10+ можно мутить интересные плюсовые штуки. Я юзаю «rvalue reference» и «override». В одном месте, по злобе душевной, заюзал sealed (надо будет на final попробовать заменить)


По поводу скорости.

«Многопоточную» компиляцию включать не пробовал? 🙂

Еще помогает переход на современный процессор. У меня на i7 бинарники в два раза быстрее собираются, по сравнению с Q6600 — два с половиной часа против 5 часов (100 штук — разные компиляторы/конфигурации/редакции/платформы) 🙂


А в целом, я поставил VS2012 чисто «посмотреть». Но так там и завис. 2010 теперь запускаю только чтобы обновить проектные файлы 🙂 Как в прочем и VS2008. На VS2005 я забил — юзаю только его компилятор из mak-файлов.

Кстати, у меня IDE VS2008 на Win7 зависает. Так что — хочешь не хочешь, а двигаться вперед приходится.

dimitr  on 19 марта, 2013

компиляция есс-но многопоточная, не дурак 🙂 С новым камнем все понятно, но спич был несколько о другом. Ну да ладно.

Kovalenko  on 20 марта, 2013

У вас молоко убежало ICU компилируется без ключика «/MT» 😉

dimitr  on 20 марта, 2013

если так, то поправим. Но оно не жмет, ибо раз в квартал компилируется. Я про наш собственный код говорил.

Kovalenko  on 4 апреля, 2013

Моя жаба негодует.

Сегодня стукнуло ровно три месяца (с 4 января 2013) как я поставил 2012 студию. Ровно(?) 90 дней — как раз максимальный тестовый период. И вот мне, третью неделю как счастливому обладателю купленной лицензии, сегодня пришло письмо с предложением купить студию на 15% дешевле.

Вот … … ёлкин дрын.

Leave a Comment