Обратная связь: C ++ разработчики, которые перешли на VS2010? - PullRequest
2 голосов
/ 03 января 2011

Я подумываю перенести наш магазин на VS2010 с VS2008sp1. Я был очень доволен 2008 годом, но хотел бы использовать TR1 в нашем коде.


Мне действительно интересны коллеги-программисты Гештальт 2010 v. 2008, а не решение какого-либо из следующих элементов!


Тем не менее, я нахожусь в процессе преобразования наших проектов и решений, и я обнаружил, что отношение «шум к сигналу» довольно слабое, ИМО. Пока я смотрю на перемонтирование каждого отдельного проекта, который нам нужен, чтобы избавиться от различных, по-видимому, ложных предупреждений Microsoft Build, таких как $ (TargetExt) ... не совпадает со значением свойства OutputFile в Linker's ...

Существует несколько вариантов этого сообщения, по несколько на проект, и у нас около 75 проектов. У меня мало или нет желания тратить свое время на переделку всех выходных целей всех этих проектов (по-видимому, MSBuild настаивает на том, чтобы цель компоновщика и цель компилятора были идентичными, что не является ни необходимым, ни желательным для нас).

Кроме того, [смущение], мы все еще используем VSS. И только в моих первых попытках согласовать проекты с MSBuild, я обнаружил, что интерфейс VSS в VS2010 примерно на 1/4 быстрее, чем в 2008 году. Это ужасно (и я привык к довольно неудачному производительность VSS в целом).

Вздох ... Я знаю, что около 1/2 или более "ответов" будут "Прекратить использование VSS". Да, это отличная идея, и мы можем перейти к подрывной деятельности в не слишком отдаленном будущем. Но по одному за раз. Это только решает проблему скорости VSS, но не проблемы MSBuild и не новые проблемы C ++.

Кажется, что новые стандартные библиотеки и TR1 испортили часть нашего кода. Это само по себе не шокирует - я бы удивился, если бы это было не так. Но как бы там ни было, сообщения об ошибках - LOOOONNNNNGGGG - это напоминает мне о моих ранних днях попыток использовать STL и необходимости загружать вспомогательный анализатор строк ошибок, который выводил для меня имена более высокого уровня, чтобы сообщения об ошибках могли стать несколько полезно. Теперь, 10 лет спустя, я вернулся к диагностике, настолько глубокой и запутанной, что она не имеет смысла, и я понятия не имею, в чем реальная проблема. В одном случае я пытаюсь вставить новый элемент в мультикарту:

typedef CCimexDataSource::CategoryID                        CategoryID;
typedef std::multimap<CString, CCimexDataSource *>          description_sources_multimap;
typedef std::map<CategoryID, description_sources_multimap>  category_sources_map;
// attempt to insert a new description->CCimexDataSource* keyed by CategoryID (an unsigned)
m_category_sources_map[it->GetCategory()].insert(std::make_pair(it->GetDescription(), &(*it)));

И я получаю:

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2440: 'initializing' : cannot convert from 'const CCimexDataSource *' to 'CCimexDataSource *'
1>          Conversion loses qualifiers
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(255) : see reference to function template instantiation 'std::_Pair_base<_Ty1,_Ty2>::_Pair_base<_Ty,const CCimexDataSource>(_Other1 &&,_Other2 &&)' being compiled
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *,
1>              _Ty=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Other1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Other2=const CCimexDataSource *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(208) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2>::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource*>(std::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource *> &&)' being compiled
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *,
1>              BaseType=char,
1>              StringTraits=StrTraitMFC<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(280) : see reference to function template instantiation 'void std::allocator<_Ty>::construct<std::pair<_Ty1,_Ty2>>(std::pair<const _Kty,CCimexDataSource> *,_Other &&)' being compiled
1>          with
1>          [
1>              _Ty=std::pair<const CString,CCimexDataSource *>,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Kty=CString,
1>              _Other=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(592) : see reference to function template instantiation 'void std::_Cons_val<std::allocator<_Ty>,_Ty,std::pair<_Ty1,_Ty2>>(_Alloc &,std::pair<const _Kty,CCimexDataSource> *,std::pair<_Ty1,_Ty2> &&)' being compiled
1>          with
1>          [
1>              _Ty=std::pair<const CString,CCimexDataSource *>,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Alloc=std::allocator<std::pair<const CString,CCimexDataSource *>>,
1>              _Kty=CString
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(755) : see reference to function template instantiation 'std::_Tree_nod<_Traits>::_Node *std::_Tree_val<_Traits>::_Buynode<_Ty>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1>              _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(364) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::insert<_Ty>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>>,
1>              _Ty2=bool,
1>              _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1>              _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\users\steve\projects\cimex cad-cam\14.0\cimex application\cimcad\formaddautomaticpage.h(17) : see reference to function template instantiation 'std::_Tree_iterator<_Mytree> std::multimap<_Kty,_Ty>::insert<std::pair<_Ty1,_Ty2>>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Mytree=std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>,
1>              _Kty=CString,
1>              _Ty=CCimexDataSource *,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::second' : member could not be initialized
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(167) : see declaration of 'std::_Pair_base<_Ty1,_Ty2>::second'
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *
1>          ]

Примечание: вышеприведенное выглядит как изменение работы std :: set <>, так что они всегда возвращают const_iterators вместо итераторов (1). Но дело только в том, чтобы иметь пример того, насколько более запутанна диагностика компилятора по сравнению с 2008 годом.


Итак, мой вопрос: для каких-либо магазинов с ++, которые недавно конвертировали: вы сожалеете о конверсии или цените ее? Как так?

(1) Скотт Мейер "Effective STL", (c) 2001, p95, item 22.

Я только что наткнулся на это: оно охватывает многие из изменений, нарушающих код, с которыми я столкнулся: http://blogs.msdn.com/b/vcblog/archive/2009/05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx?wa=wsignin1.0

Ответы [ 4 ]

2 голосов
/ 03 января 2011

Чтобы ответить на ваш первый вопрос: тип &(*it), вероятно, const CCimexDataSource *, а не CCimexDataSource *.

Чтобы дать ответ на ваш второй вопрос для обсуждения: Мы перешли с VS2008 на VS2010, и он работал нормально, хотя VS2010 медленнее, он имеет немного лучший смысл. Преобразование не было полностью автоматическим, и нам пришлось вручную обновлять файлы vcxproj.

1 голос
/ 04 января 2011

Я попытался преобразовать наше решение (VS2005) в 100 проектов, и после всех неудачных попыток обновить файлы проектов я решил на время отказаться, поскольку даже не смог заставить его начать компиляцию.

Используя VS2010 для новых проектов .net, я нахожу, что IDE пытается быть немного более похожим на Eclipse, но продолжает делать глупые вещи, такие как открытие файлов кода в той части представления, на которой я последний раз щелкнул - скажем, окна вывода или просмотра переменных.

Время от времени у меня возникают проблемы с серверами символов MS, функция отладки / модуля, специально предназначенная для доступа к серверу символов MS, как-то обходит это и экономит время, путаясь со списком серверов символов.

1 голос
/ 03 января 2011

У меня на домашнем ПК (Core2Duo E6600, 2 ГБ ОЗУ) нет проблем с intellisense.Единственное, что мне не нравится, это отзывчивость интерфейса.Это очень вяло.

Я считаю, что улучшения в TR1 и C ++ 0x перевешивают недостатки медленного пользовательского интерфейса.

1 голос
/ 03 января 2011

На работе мы без проблем перешли с VS2005 на VS2010.Однако я обнаружил, что на моем домашнем компьютере мне пришлось отключить многие функции Intellisense в VS2010, поскольку он потреблял так много вычислительной мощности на моем ноутбуке, что я мог набирать только несколько символов за раз, прежде чем ждать3 минуты для обновления базы данных.Если вы работаете на довольно новой машине (Quad-core ~ ​​3 ГГц с не менее 6 ГБ ОЗУ) в Windows 7, у вас должно быть несколько проблем с производительностью.Если вы (как и я дома) используете Core2 Duo с 2 ГБ ОЗУ в XP, вы обнаружите, что вам необходимо отключить многие функции, чтобы среда IDE была полезной.

ПРИМЕЧАНИЕ.чудесно на моем ноутбуке;Я был довольно разочарован, когда я "обновился".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...