Использовать или не использовать функции С++ 0x

Возможный дубликат:
Как вы используете С++ 0x сегодня?

Я работаю с командой над довольно новой системой. Мы говорим о переходе на MSVC 2010, и мы уже перешли на GCC 4.5. Это единственные компиляторы, которые мы используем, и мы не планируем вскоре переносить наш код в разные компиляторы.

Я предположил, что после того, как мы это сделаем, мы начнем использовать некоторые из возможностей С++ 0x, уже предоставляемых как auto. Мой коллега предложил против этого, предлагая подождать "пока С++ 0x не станет стандартным". Я должен не согласиться, но я вижу призыв в том, как он это сформулировал. Тем не менее, я не могу не думать, что этот контр-аргумент больше из-за страха и трепет обучения С++ 0x, чем настоящая забота о стандартизации.

Учитывая новое состояние системы, я хочу, чтобы мы использовали новые технологии. Например, просто auto упростит нашу повседневную жизнь (просто написание меток на основе итератора для циклов до тех пор, пока не появятся петли на основе диапазона, например.).

Неужели я ошибаюсь? Не похоже, что я предлагаю радикально изменить нашу начинающую базу кода, но просто начнем использовать возможности С++ 0x, где это удобно. Мы знаем, какие компиляторы мы используем, и у нас нет прямых планов на порт (если мы когда-либо портем базу кода, то наверняка компиляторы будут доступны с функциями С++ 0x, а также для целевой платформы). В противном случае мне кажется, что я избегаю использования iostreams в 1997 году только потому, что стандарт ISO С++ еще не был опубликован, несмотря на то, что все компиляторы уже предоставили их переносимым образом.

Если вы все согласны, можете ли вы представить мне аргументы, которые я мог бы использовать для укрепления своей позиции? Если нет, могу ли я получить более подробную информацию об этом "пока стандартная идея С++ 0x"? Кстати, кто-нибудь знает, когда это будет?

Ответ 1

Я бы принял решение на основе каждой функции.

Помните, что стандарт действительно близок к завершению. Осталось только голосование, исправление ошибок и больше голосования.

Таким образом, простая функция, такая как auto, не исчезнет или изменится ее семантика. Так почему бы не использовать его.

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

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

Большинство функций можно классифицировать следующим образом: они настолько просты и стабильны, что их реализация в GCC/MSVC - это именно то, как они будут работать в конечном стандарте, или они достаточно сложны, чтобы они могли получить исправлено несколько исправлений, и поэтому они могут быть использованы сегодня, но вы рискуете столкнуться с несколькими грубыми краями в определенных пограничных случаях.

Звучит глупо, чтобы избежать возможности С++ 0x только потому, что они еще не оформлены. Избегайте функций, которым вы не доверяете, чтобы быть полными, без ошибок и стабильными, но используйте остальные.

Ответ 2

Теоретические, но не практические недостатки использования С++ 0x:

  • Сложнее переносить на разные компиляторы.
  • Не придерживаться любого опубликованного стандарта.

Практические преимущества использования С++ 0x:

  • Делает вашу повседневную жизнь проще, следовательно, более продуктивно.

Это дискуссия между тем, что теоретически правильно, и что практично. Если ваша команда намерена действительно что-то делать с этим кодом, практический должен перевесить теоретические десятикратные.

Ответ 3

Одна вещь, о которой вам не нужно (в основном) беспокоиться, теперь добавляется или убирается, потому что рабочий проект достиг " Final Committee Draft" (FCD) в марте. Функциональность должна быть заморожена, комитет по стандартизации не примет никаких предложений для С++ 0x.

Даунсайд - это еще проект и еще не завершен, комитет по стандартизации находится на этапе внесения исправлений и корректировок до завершения и публикации стандарта ИСО (ожидаемый выпуск должен быть в марте 2011 года). Это может означать незначительные синтаксические или семантические/изменения поведения, которые могут привести к тому, что ваш код не будет компилироваться или работать некорректно после компиляции с более стандартным совместимым компилятором, чем тот, который вы используете в момент написания кода.

Вероятно, вам придется подождать некоторое время для компиляторов, таких как VС++ 10, для получения обновлений с любыми исправлениями/настройками.

Ответ 4

У нас была одна и та же проблема, поэтому мы скомпрометировали. Мы взяли релиз С++ 0x TR1, а затем взяли только те порции, которые, как мы знали, мы хотели использовать. Похоже, много работы, но пока это получилось хорошо. Мы используем библиотеки регулярных выражений, кортежи и пару других. Как только стандарт будет ратифицирован, мы перейдем к полному С++ 0x. Это, очевидно, не лучшее решение, но это было хорошо для нас.

Ответ 5

Если вы намерены сделать свой открытый исходный код системы в недалеком будущем, то это аргумент за то, что вы не используете слишком много возможностей для устранения кровотечений. В системе производства под управлением Debian или Red Hat не обязательно будет установлен компилятор с кровотечением.

Вы сказали

если мы когда-либо переносим базу кода, к тому времени компиляторы будут доступны с функциями С++ 0x, а также для целевой платформы

но что компилятор существует для платформы, не всегда означает, что он был установлен/использован/нужен, особенно в производственных системах.

Если, с другой стороны, вы намереваетесь выполнить все компиляции самостоятельно, это не проблема.