LINUX.ORG.RU
 

Опубликован стандарт C++11 (бывший C++0x)


0

5

ISO объявила о публикации стандарта C++11. Это первое значительное изменение стандарта с 1998-го года. Вот несколько новых объявленных возможностей:

  • ссылки на временные объекты и семантика переноса (rvalue reference);
  • обобщённые константные выражения (ключевое слово constexpr);
  • внешние шаблоны — возможность запретить компилятору инстанцировать шаблон в единице трансляции (extern template class);
  • ключевое слово auto для задания типа переменной на этапе компиляции;
  • цикл for по коллекции данных;
  • lambda-функции;
  • введена отдельная константа нулевого указателя nullptr;
  • шаблоны с переменным числом параметров (variadic templates);
  • thread-local хранилище, модель памяти с поддержкой потоков;
  • изменения в стандартной библиотеке: включение hash tables, регулярных выражений, smart pointers, элементов синхронизации потоков и т.п.

Полный список новых возможностей с подробным объяснением каждой из них можно посмотреть на http://en.wikipedia.org/wiki/C 11 или же более сжато на русском: http://ru.wikipedia.org/wiki/C 11

Полная поддержка C++11 обещается в GCC 4.7, объем поддержки на текущий момент можно оценить по таблице http://gcc.gnu.org/onlinedocs/libstdc /manual/status.html#status.iso.200x

ISO продает текст стандарта по 352 швейцарских франка ($386), но можно бесплатно скачать, например, его финальный черновик (практически не отличающийся от конечной версии) с сайта рабочей группы: http://www.open-std.org/jtc1/sc22/wg21/

>>> Пресс-релиз


[#] Ответ на: комментарий от ugoday 11.10.2011 18:18:32  

> Предсказываю: rогда его добавят в следующей версии стандарта

Его _уже_ добавили.

***** ()
[#] Ответ на: комментарий от o4kapuk 11.10.2011 18:18:36  
lazyklimm

>так как там нет всяких GC и прочих плюшек новомодных быстрокодерских языков

ты про хаскель?

**** ()
[#] Ответ на: комментарий от ugoday 11.10.2011 18:18:32  
aho

> Относительно недавно все доказывали, что вывод типов вообще нафиг не нужен. Предсказываю: rогда его добавят в следующей версии стандарта, все будут доказывать его необходимость.

он уже есть, decltype + auto

()
[#] Ответ на: комментарий от ugoday 11.10.2011 18:00:12  
segfault

> А когда в С++ добавят GC, TCO и вывод типов?

Вывод типов там уже очень давно. А GC там нафиг сдался. (Хотя, есть кастомные реализации для особо жаждущих).

* ()
[#] Ответ на: комментарий от LongLiveUbuntu 11.10.2011 18:17:40  

Самому интересно.

*** ()
[#] Ответ на: комментарий от o4kapuk 11.10.2011 18:18:36  

> С технической стороны вопроса GC не нужен вообще.

Так же, я уверен, не нужны:

  • ссылки на временные объекты и семантика переноса (rvalue reference);
  • обобщённые константные выражения (ключевое слово constexpr);
  • внешние шаблоны — возможность запретить компилятору инстанцировать шаблон в единице трансляции (extern template class);
  • ключевое слово auto для задания типа переменной на этапе компиляции;
  • цикл for по коллекции данных;
  • lambda-функции;
  • введена отдельная константа нулевого указателя nullptr;
  • шаблоны с переменным числом параметров (variadic templates);
  • thread-local хранилище, модель памяти с поддержкой потоков;
  • изменения в стандартной библиотеке: включение hash tables, регулярных выражений, smart pointers, элементов синхронизации потоков и т.п.
*** ()
[#]  
segfault

> введена отдельная константа нулевого указателя nullptr;

Если она еще и не равна NULL, то расстрелять их мало. А так - не нужно.

* ()
[#] Ответ на: комментарий от ugoday 11.10.2011 18:22:31  

> Так же, я уверен, не нужны:

Крепок ли ты в вере своей?

***** ()
[#] Ответ на: комментарий от tailgunner 11.10.2011 18:24:14  

Это не вера. Это анализ мегабайтов лоровских ЯП-срачей.

*** ()
[#]  
ovk48

толсто {
По современности поддерживаемых фич создатели стандарта Ц++11 добрались до 2003 года. Молодцы.
}

* ()
[#]  

> ISO продает текст стандарта по $18,

Если верить ISO store, то это:
352 Swiss francs = 386.89728 U.S. dollars

Откуда инфа про $18?

** ()
[#] Ответ на: комментарий от segfault 11.10.2011 18:23:59  

>Если она еще и не равна NULL, то расстрелять их мало.

Зависит от реализации. Скорее, предполагается, что NULL будет определяться не как (void*)0, а через nullptr.

Со stackoverflow про NULL в C++11: «It is up to each implementation to provide its own definition, gcc if I recall correctly defines it to __nullptr for which it has special checks (verifies that it is not used in arithmetic contexts for example)».

* ()
[#] Ответ на: комментарий от x4DA 11.10.2011 18:15:16  

Ну хотя бы tracing, non-conservative, incremental. Все для жтого есть. Легаси не пострадает. Про оверхед расскажи своему оператору копирования.

()
[#]  
AX

Эх, такую энергию, да на развитие D2…

**** ()
[#] Ответ на: комментарий от CARS 11.10.2011 17:52:59  

> что C++ не нужен.

Хочется по конструктивней доводы. Просто для собственного интереса.

()
[#] Ответ на: комментарий от AX 11.10.2011 18:28:13  
aho

> Эх, такую энергию, да на развитие D2…

чтоб его поломать и сделать D3?

()
[#] Ответ на: комментарий от rival 11.10.2011 18:27:05  

>352 Swiss francs = 386.89728 U.S. dollars

Точно. Куда-то не туда посмотрел.

* ()
[#]  
kranky

>ключевое слово auto для задания типа переменной на этапе компиляции;

Приятно видеть, что они таки пытаются эволюционировать. Жаль только, что надо было это сделать 10 лет назад, а сейчас какбэ поздно боржоми пить.

*** ()
[#] Ответ на: комментарий от aho 11.10.2011 18:28:51  
x4DA

что там, кстати, с этим D? еще шевелится?

** ()
[#]  

> thread-local хранилище, модель памяти с поддержкой потоков

И как это будет работать в ОС без поддержки потоков?

Кажется, проблем с ними нет всего в 2х-3х системах.

** ()
[#] Ответ на: комментарий от o4kapuk 11.10.2011 18:18:36  
x4DA

вы когда-нибудь отлаживали многопоточные программы, где были проблемы с памятью и бились головой об стену?

я - да.

это к тому, что не нужен.

** ()
[#] Ответ на: комментарий от x4DA 11.10.2011 18:31:05  
AX

>что там, кстати, с этим D? еще шевелится?

Шевелится, только не стабилизируется никак.

**** ()
[#]  

Почитал wiki.

- For-цикл по коллекции - интересно
- Лямбда-функции - тоже интересно
- Явное замещение виртуальных функций и финальность - интересно, хотя для этого обычно использовал чистые виртуальные функции;
- Константа нулевого указателя - наконец-то! А я думал, когда они уже посмотрят на pascal'евский nil !
- Новые строковые литералы - отлично!
- Работа sizeof с элементами данных в классах без создания объекта - а я думал оно и так работает...
- Управление потоками - отлично
- Регулярные выражения - отлично

И - да, кроме С++, остальные языки не нужны.

** ()
[#] Ответ на: комментарий от segfault 11.10.2011 18:23:59  

В C++ NULL deprecated. Его бы даже из C изжить надо.

** ()
[#] Ответ на: комментарий от unsigned 11.10.2011 18:37:28  
x4DA

"а ты раздефайнил NULL в своем проекте?"

** ()
[#] Ответ на: комментарий от Raving_Zealot 11.10.2011 18:06:27  

Ты сам с собой споришь?

** ()
[#] Ответ на: комментарий от o4kapuk 11.10.2011 18:18:36  
mv

> GC в плюсах нужен только для того, чтобы не выросло поколение фанатиков, которые говорят, что C++ не нужен, так как там нет всяких GC и прочих плюшек новомодных быстрокодерских языков. С технической стороны вопроса GC не нужен вообще.

Медленный кодер - мёртвый кодер. Ну или, как вариант, голодный.

***** ()
[#] Ответ на: комментарий от Kroz 11.10.2011 18:34:33  

> кроме С++, остальные языки не нужны.

А откуда тогда С++ будет тырить интересные и отличные фичи?

*** ()
[#] Ответ на: комментарий от vden 11.10.2011 18:27:46  
mv

> Скорее, предполагается, что NULL будет определяться не как (void*)0, а через nullptr.

А он и так не 0. Есть платформы, на которых C++ существует, но NULL там не равен 0.

***** ()
[#] Ответ на: комментарий от mv 11.10.2011 18:46:10  

> Есть платформы, на которых C++ существует, но NULL там не равен 0.

О кстати, не напомнишь, что это за экзотика?

***** ()
[#] Ответ на: комментарий от mv 11.10.2011 18:46:10  
aho

> Есть платформы, на которых C++ существует, но NULL там не равен 0.

в С++ NULL по стандарту равен 0

()
[#]  

$400? Может $18 все таки?

()
[#] Ответ на: комментарий от tailgunner 11.10.2011 18:47:51  
mv

> О кстати, не напомнишь, что это за экзотика?

IIRC s390, вполне себе ещё живой в виде z/Architecture.

***** ()
[#] Ответ на: комментарий от aho 11.10.2011 18:47:57  
mv

> в С++ NULL по стандарту равен 0

Очень глупо.

***** ()
[#]  

какого члена auto_ptr deprecated и где мои rope?

**# ()
[#] Ответ на: комментарий от mv 11.10.2011 18:50:21  
aho

> Очень глупо.

говорить то, чего не знаешь - да

()
[#]  
PolarFox

Если obj-c — помесь C и Smalltalk, то C++ — помесь C и Perl.

**** ()
[#] Ответ на: комментарий от ugoday 11.10.2011 18:00:12  

> А когда в С++ добавят GC, TCO и вывод типов?

Третье — почти, первое — никогда. А второе не знаю что и означает, просвятите?

***** ()
[#] Ответ на: комментарий от Kroz 11.10.2011 18:34:33  

> Работа sizeof с элементами данных в классах без создания объекта - а я думал оно и так работает...

Я тоже думал, а потом писал sizeof(*(TYPE*)NULL) D-;

**# ()
[#] Ответ на: комментарий от sv75 11.10.2011 18:51:22  
CARS

Какой-нибудь тэйл колл оптимизэйшн, скорее всего.

** ()
[#] Ответ на: комментарий от Kroz 11.10.2011 18:34:33  

> И - да, кроме С++, остальные языки не нужны.

Где-то явно есть конвейер по производству дебилов.

***** ()
[#]  
yurkis

Вот я почему-то давно хотел properties. Костылей наделали (в борланде, например). Но хотелось бы в стандарте...

* ()
[#] Ответ на: комментарий от sv75 11.10.2011 18:51:22  

TCO --- тайл колл оптимизейшн, пресловутая хвостовая рекурсия.

*** ()
[#]  

variadic templates - самое главное, хотя rope-ов жалко.

**# ()
[#] Ответ на: комментарий от ugoday 11.10.2011 18:56:23  
x4DA

что-то мне подсказывает, что рекурсивную функцию, полагающуюся на TCO, в C++ можно переписать в виде цикла.

** ()
[#] Ответ на: комментарий от PolarFox 11.10.2011 18:51:12  

> Если obj-c — помесь C и Smalltalk, то C++ — помесь C и Perl.

ЕМНИП, C++ старше Perl.

***** ()
[#] Ответ на: комментарий от yurkis 11.10.2011 18:53:54  

Начига в языке peroperties?

гораздо проще библиотекой.

**# ()
[#] Ответ на: комментарий от aho 11.10.2011 18:51:00  
mv

> говорить то, чего не знаешь - да

Получается, что 0 в качестве нуль-пойнтера - это special value, который должен поддерживаться рантаймом. Т.е. генерируемый код и рантайм языка должны знать, что если в пойнтере содержится 0, то это нифига не интегральный 0, а специальное значение, равное null.

УмнО, чо... Такой C++.

***** ()