LINUX.ORG.RU

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

 , ,


0

4

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/

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

★★

Проверено: maxcom ()

Ответ на: комментарий от atoku

> Самые же крутые учат китайские иероглифы и не жужжат.

atoku


А ты с какого срайона?

alienclaster ★★ ()

это действительно прекрасная новость! но из всех нововведений я буду пользоваться всего парочкой

yanmhlv ()
Ответ на: комментарий от atoku

Для справки: есть языки умеющие всё это и многое другое и их стандарт занимает 50 листов А4.

ugoday ★★★★★ ()
Ответ на: комментарий от Vudod

по мнению разработчиков языка C++<[]()<>>{&&} я тоже придурок.

mmarkk ()
Ответ на: комментарий от jtootf

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

не заметил std::function

Begemoth ★★★★★ ()

Я всё чаще замечаю в последнее время, как написанные на C++ приложения, будь то игры или просто софт, всё чаще вылетают с критической ошибкой и даже без вывода кода ошибки. Очень большая вероятность что это связано прежде всего с потоками, хотя и манипуляцию указателями нельзя отметать. Более того принято использовать готовые библиотеки, в C++ их уже столько что они постоянно наслаиваются везде и всюду преумножая вероятность вылета приложения с критом, так как одна библиотека менее безопасна и безбажна, чем другая. Тем самым мы имеем наслаивающуюся вероятность ошибок в C++ приложениях и с таким темпом лет 10 спустя приложения на C++ будут запускаться через раз и работать не дольше получаса, после чего вылет с критической ошибкой.

Вывод один - если полностью не переписать Standart C/C++ library, сделать ее полностью не совместимой прежде всего с C и со старым C++, далеко так не уедем. Иначе это будет всегда система костылей с наслаивающейся вероятностью ошибок.

Вот честно мне глубоко параллельно, что очень много кода написано на разных версиях C/C++. Необходимо сделать так сказать точку восстановления. С которой будет новый виток поддержки предыдущего кода, то есть весь код до точки восстановления не будет поддерживаться кодом после точки восстановления, но в тоже время весь код после точки будет полностью поддерживаемым от версии к версии, скажем на протяжении очередных лет 15-20.

Короче к чему это я. А вот к чему - необходим новый язык поверх Ассемблера. В данный момент это язык C++, а нужен другой. Причем именно поверх ассемблера, а не поверх C++ как например C#. То есть от C++ необходимо просто избавиться раз и навсегда. Полностью переписать с нуля все библиотеки, все операционные системы и прочее на этом новом языке. И этот язык должен быть компилируемым на лету, это главная его отличительная особенность, новая фича скажем так. Скажем я вижу такой язык в виде чего то типа C#, но с unsafe вставками в виде ассемблера, а не C++, и чтобы Native С++ кода так называемого вообще не было, чтобы весь C# код стал Native. Причем GC абсолютно бы не помещал, тем более что Pinning полностью аналогично отключению GC, поэтому кто не знал - GC в C# в принципе частично отключаемый и не только в unsafe коде. Можно точно так же как и в C++ выделять большие блоки памяти, делать их Pinned и работать с ними точно также как в C++ с точно такой же скоростью.

От чего именно хотелось бы избавиться в C++ прежде всего: 1) Хедеры. Прежде всего код должен компилироваться не в машинный DLL, а в промежуточный DLL как в C#. Тем самым можно полностью избавиться от необходимости таскать за собой Хедеры. 2) Forward declarations. Как же они достали в C++. Ну почему не могут сделать как в C# - все типы и вызов их конструкторов выстраиваются автоматически в зависимости от момента когда тип используется в коде. Убирая необходимость в бредовых Forward declarations, когда якобы тип который я патаюсь использовать еще не был объявлен, даже не смотря на то, что я его могу объявить в том же самом файле, просто чуть ниже. Это короче вообще бред, пережиток прошлого. 3) Как следствие пункта 1, избавиться от различных аттрибутов присущих написанию DLL библиотек в C++, всяческие declspec export/import, dllmain и прочая чушь. Сделать все так как C# - DLL это просто обычная библиотека, идентичкая обычной программе, просто без функции Main, вот и всё. Никаких сложностей и отличительных атрибутов, экспорта и импорта и прочей чуши.

ну и еще много чего...

anonymous ()

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

kondor ★★★ ()
Ответ на: комментарий от alx_me

Хотите переносимый код - пишите на C++14882-2011/gcc

«882-2011» - это года, типа родился/умер?

shty ★★★★★ ()
Ответ на: комментарий от tailgunner

Акститесь, родной, case X...Y чёрти-когда работает. Или вы о чём-то метафизическом?

alx_me ★★☆ ()

Гы. Мертвому пиявли.
Лучше Си заплющенный от новых фич не станет.

vada ★★★★★ ()
Ответ на: комментарий от matumba

C# [..] очистился от синтаксического шлака «сипипей»

Здравствуй, весёлый писатель хелловордов. Прочитал твою заметку на ЛОРе о свободном от шлака и синтаксически чистом новом кроссплатформенном языке Цэ-решётка. Очень тебе благодарен, с новым языком моя жизнь заиграла новыми красками. Пешы ищо.

shty ★★★★★ ()
Ответ на: комментарий от anonymous

>ну и еще много чего...

Правильно! Закопать!

vada ★★★★★ ()
Ответ на: комментарий от liberte

Как предсказуемо. Оять проблемы с этими гадкими профессионалами. Нет чтобы хорошие годные программы можно было написать стаей гиббонов.

Так может учиться, учиться и ещё раз учиться? Нет. «Слишком сложно!» Сложно для кого? Для PHP программиста? Которые сравнивают C# и C++ и делают умное лицо.

Тут я смотрю очень многие «борятся» с системой типов. Между тем могу вас удивить. Контроль типов это защита ваших обезьянних мозгов от страшного геморроя real-time. Небольшая плата compile-time не идёт ни в какое сравнение с огромной экономией времени отладки run-time. Вы школу уже все закончили? Физику проходили? Небось тоже плакали от тамошнего контроля типов? Так вот с окончанием школы всё становится ещё сложнее, и надо учится. Интуйтивно понятна только соска.

alx_me ★★☆ ()
Ответ на: комментарий от atoku

> А меня ужаснуло количество новых фичей.

Предыдущий стандарт C++14882. 2003 год.

alx_me ★★☆ ()
Ответ на: комментарий от alx_me

Ололо, надо знатно упороться, чтобы назвать этот набор приплюснутых костылей «системой типов».

encyrtid ★★★★★ ()
Ответ на: комментарий от liberte

нормально использовать C++ в проекте можно, только если резко ограничить используемые возможности — но тогда зачем он нужен?

лучше расскажите зачем в проект тащить всё подряд и сразу, ведь там и взаимоисключающие штуки встречаются?

shty ★★★★★ ()

Да вот ещё что о чём все молчат! Ваш любимый boost теперь станет похож на человека. Предсказываю уменьшение его объёма в 10 раз! variadic template-ы устранят громадьё кострукций типа:

template<T1> class N;

template<T1,T2> class N;

template<T1,T2,T3> class N;

...

Хотя пока они сообразят что в OSS есть только одна версия компилятора - последняя, пройдёт пара лет. Сначала накопятся ошибки в поддержке старых компиляторов, потом геммороя всё больше, пока не признают что оно нафиг не надо.

alx_me ★★☆ ()
Ответ на: комментарий от anonymous

вот наконец в треде и наивные футурологи появились

shty ★★★★★ ()
Ответ на: комментарий от alx_me

Инвалид здесь один - это С++, причем безнадежный.

encyrtid ★★★★★ ()
Ответ на: комментарий от encyrtid

А диагноз кто поставил? Жизнь? Или армия прыщавых прохвесионалаф? Сто пудов жизнь. Ибо отстал от тренда. Ибо тренд это каждый год ломать совместимость и снимать бабло на книжках. Комитет C/C++ слишком консервативен, там у всех пубертатный период окончился.

alx_me ★★☆ ()
Ответ на: комментарий от alx_me

Комитет C/C++ слишком консервативен, там у всех пубертатный период окончился

Скорее недоразвит.

encyrtid ★★★★★ ()
Ответ на: комментарий от alx_me

>Контроль типов это защита ваших обезьянних мозгов от страшного геморроя real-time.

в C++ не такая уж и строгая типизация, мон шер

lazyklimm ★★★★★ ()
Ответ на: комментарий от lazyklimm

Дора гой, она не динамическая, и не pascal-ная, она человеческая, для человека, для меня. sapienti set.

alx_me ★★☆ ()
Ответ на: комментарий от alx_me

Дора гой, она не динамическая, и не pascal-ная, она человеческая, для человека, для меня. sapienti set

facepalm.png

encyrtid ★★★★★ ()
Ответ на: комментарий от anonymous

anonymous

Какой зоопарк? Наличие одновременно IEnumerable и IEnumerable<T> позволяет в зависимости от ситуации выбирать самому время диспатча - компайл-тайм или рантайм. Это плюс, а не минус.

IEnumerable<object> != IEnumerable? Когда реально нужен IEnumerable без параметра?

anonymous ()
Ответ на: комментарий от alx_me

>Дора гой, она не динамическая, и не pascal-ная, она человеческая, для человека, для меня. sapienti set.

ты тоже статику/динамику от строгости не отличаешь?

lazyklimm ★★★★★ ()
Ответ на: комментарий от lazyklimm

Не судите о всех по себе. Это у вас радость неокона. Видится такое: - «А ты знаешь что оказывается строгость и динамика не одно и тоже?!!! :-)». И с таким подвизгиванием.

alx_me ★★☆ ()
Ответ на: комментарий от encyrtid

Ну хоть не jpg, а то обычно как глупость так слезами размазано(потеря качества сказывается).

Вам: чёрный\ властелин.apng

alx_me ★★☆ ()
Ответ на: комментарий от AX

>Пора уже запомнить, что в C++ есть всё, кроме вещей, облегчающих работу программиста

Каким образом properties облегчают работу программиста? Ведь это синтаксический сахар для таких убогих вещей как «сеттеры» и «геттеры», которые нарушают инкапсуляцию.

V_L_A_D ★★ ()
Ответ на: комментарий от anonymous

>Короче к чему это я. А вот к чему - необходим новый язык поверх Ассемблера

Поздравляю, вы только что изобрели D

V_L_A_D ★★ ()
Ответ на: комментарий от kondor

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

Если б они поддержали концепты, то стандарт назывался бы C++2x

V_L_A_D ★★ ()
Ответ на: комментарий от alx_me

>Это у вас радость неокона.

это печаль...

Тем не менее, объясните глупому неокону, как статическая типизация может гарантировать контроль типов?

lazyklimm ★★★★★ ()
Ответ на: комментарий от V_L_A_D

>Ведь это синтаксический сахар

Это называется «отсутствие лишнего мусора».

AX ★★★★★ ()
Ответ на: комментарий от lazyklimm

Очень просто. Вы когда-нибудь делали защиту от дурака? Если нет то я вам расскажу что её сделать даже теоретически не возможно так как вы её хотите решить. Проблему решают сужая возможность ошибок. Выдачей предупреждений, если человек желает их видеть. И опять всё упирается в свободу воли и профессионализм, увы. Сдуру можно и член сломать. Почитайте принципы котроля типов которые были заявлены ещё на заре C++. Все их можно обойти. Если хочется. В конце концов есть исходники компилятора. Компилятор C++ никогда не будет строить из себя умного. Он напишет свои подозрения. Или не напишет, если даже потенциально вы ничего своим кодом себе не поломаете. Решение за вами, как профессионалом.

alx_me ★★☆ ()
Ответ на: комментарий от AX

>Это называется «отсутствие лишнего мусора».

«properties» и есть тот самый лишний мусор :)

V_L_A_D ★★ ()
Ответ на: комментарий от V_L_A_D

>«геттеры/сеттеры» и есть тот самый лишний мусор :)

fixed

AX ★★★★★ ()
Ответ на: комментарий от AX

>«геттеры/сеттеры» и есть тот самый лишний мусор :)

Это тоже верно

V_L_A_D ★★ ()
Ответ на: комментарий от V_L_A_D

>Это тоже верно

Предпочитаете всё хранить в public? :)

AX ★★★★★ ()
Ответ на: комментарий от V_L_A_D

Разница между properties и setters/getters в том, что с первыми легче работать. Таким образом, они делают более легким написание говнокода, что не есть хорошо.

V_L_A_D ★★ ()
Ответ на: комментарий от shty

в его сборках не используется поддержка std_threads и std_atomics. тдм не нужон.

niXman ★★★ ()
Ответ на: комментарий от AX

>Предпочитаете всё хранить в public? :)

Я предпочитаю использовать методы, имеющие какую-то семантику в контексте предметной области, а не устанавливающие/возвращающие значение какого-то поля.

Между «Point p(...); p.setX(...); p.setY(...)» и «Point p(...); p.moveTo(...);» есть огромная разница. А пропертиз помогают писать код, как в первом варианте, и совершенно бесполезны при использовании второго.

V_L_A_D ★★ ()
Ответ на: комментарий от niXman

>не корми тролля

Не надо судить всех по себе. ;)

AX ★★★★★ ()
Ответ на: комментарий от niXman

> не корми тролля

Не думаю, что имеет место троллинг. Скорее, банальное недопонимание друг друга.

V_L_A_D ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.