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 ()
Последнее исправление: adriano32 (всего исправлений: 2)

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

раскинулооось мореее широоокооооо

А я повторяю: статическая типизация в общем случае не гарантирует контроль типов(о котором именно ты писал выше). В отличие от строгой.

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

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

Ну, в большинстве случаев нужна именно простая установка/чтение переменной (достаточно взглянуть на те же классы Qt).

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

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

> Конкретная реализация С++11 может не иметь поддержки потоков

То есть полного C++11 в MS-DOS, например, можно не ждать?

> В чем проблема с TLS, который превращается в обычные переменные при отсутствии потоков?

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

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

Кстати тут кто то говорил про то, что якобы теперь C# не нужен с выходом C++11 ? :)

Так вот если брать в сравнение совокупность полезности новых фич в C++11 по сравнению с C++03, и совокупность новых фич которые ожидаются в C#5.0 по сравнению с C#4.0. Разница огромная. C#5.0 будет просто бомбой по сравнению с C#4.0, если всё что обещано будет сделано.

Поэтому тем кто пишет на C# есть куда расти, и чего ждать. И будет куда расти и чего ждать. В отличае скажем от C++ников, которые наконец получили чего хотели, остались не довольны, а ждать до новых улучшений им еще лет 10-20. Сочувствую.

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

> (достаточно взглянуть на те же классы Qt).

вот ты и пример привел %) разве Qt может считаться неким эталоном? в Qt нет ни одного признанного эксперта с++. их код не имеет доверия. их проектирование/реализация не имеет доверительных обоснований, как, к примеру, STL/boost. в продакшн коде о Qt говорят как о некой поделке для масс, и никто из авторитетных источников не станет рекомендовать Qt.

не нужно «это» приводить в пример. ибо уг.

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

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

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

> Лучше уж по-старому, на системных вызовах писать.

Нда. Сударь, речь о библиотеках и языках, вы ошиблись веткой.

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

>вот ты и пример привел %) разве Qt может считаться неким эталоном? в Qt нет… bla-bla-bla

Жир начал сочиться из системного блока рано утром. Солнце только показалось из-за горизонта, запели первые утренние пташки, а под компом уже была порядочная жирная лужа. Я не понимал в чём причина этого явления и просто протёр лужу. Когда я включил компьютер, жир начал вытекать уже и из монитора тонкой но непрерывной струёй. Я терпел, я думал это пройдёт. Но всё же была непонятна причина столь активного жироотделения. Когда я зашёл на лор в обсуждение C++11, жир потёк таким потоком что нужно было подставлять тазик под монитор и системник и выносить их каждые 20 минут. Потом я прочёл твоё сообщение... Это было нечто невообразимое, это был уже не поток, это было какое-то цунами жира! Он хлынул из компа, ничто уже не могло его остановить! Поток жира нёсся, снося всё на своём пути. Не знаю каким чудом мне удалось уцелеть, ибо от моего дома остались одни руины, двор сейчас похож на пустыню с барханами из жира. Погибли люди, некоторые лишились крыши над головой. niXman, что же ты наделал???

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

> Тащем-то генерики в .Net реализованы на уровне VM, так что ты тут пальцем мимо ткнул, через жопу - это во всяких жабах, плюсцах и прочих языках с затиранием типов.

где ты видел в плюсах затирание типов (type erasure)?

www_linux_org_ru ★★★★★
()

>ISO продает текст стандарта по 352 швейцарских франка ($386)

я не в теме, это так модно?

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

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

Я написал, о чем я. Попробуй прочитать.

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

C++14882-2011

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

14 --- это Четырнадцать Слов Дэвид Лейна: «We must secure the existence of our people and a future for white children».

88 --- замаскированное Heil Hitler.

2-2011= -2009, теряюсь в догадках что это может означать.

Но даже арийская магия не в силах сделать из С++ конфетку.

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

Конкретная реализация С++11 может не иметь поддержки потоков

То есть полного C++11 в MS-DOS, например, можно не ждать?

Зависит от конкретной реализации.

В чем проблема с TLS, который превращается в обычные переменные при отсутствии потоков?

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

Не все платформы имеют одинаковые возможности, если не понятно.

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

Мне непонятно, зачем лишать стандарт кроссплатформенности. Раньше программа, не выходящая за рамки стандарта, собиралась и работала на всех ОС, а теперь не будет.

Либо все это реализуют в рантайме, но тогда будут тормоза, и для таких случаев все равно нужны другие алгоритмы и куча #ifdef.

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

разве Qt может считаться неким эталоном?

ок, назови «эталон» фреймворка для построения UI, друк

в продакшн коде о Qt говорят как о некой поделке для масс

лежат два оператора в зафризаном коде:
- слышь, ты видел этот кутишный код?
- ога, оборжака... поделка для масс

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

Он хлынул из компа, ничто уже не могло его остановить!

ты забыл сказать - горшочек не вари :)

shty ★★★★★
()

Мндэ... Нет чтоб озаботиться качеством кода производимого gcc. Тратят силы на «свистелки и перделки» (© by L.O.R 8). Нет сомнения - стандарты надо соблюдать (или хотя-бы стремится к этому), однако давно не покидает ощущение, что кроме этого, больше почти нихрена не делается. Короче как Жванецкого: добавили, улучшили, обсудили, исправили, довели и усовершенствовали! Включаешь - не работает... 8)

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

Нет чтоб озаботиться качеством кода производимого gcc.

1. gcc не производит код
2. не подскажешь с какого это болта комитет по стандартизации должен заботиться хоть о чём-то внутри gcc?

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

А я и не говорю о комитете - я говорю о gcc 8) Не в курсе что он там делает у Вас, а у меня он - производит код 8)

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

Что уж не нужно, так это говноподелки не поддерживающие x64.

anonymous
()

Кстати, совместимости с C99 так и не появилось.

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

>История с pascal-ем ничему не учит.

емнип, в паскале типы всё-таки могли преобразовываться автоматом

В строгой вы ничего не напишете.

и что плохого в том, чтобы все преобразования типов выполнялись явно?

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

Хорошо, не темплейты, а «реализованный при помощи темплейтов параметрический полиморфизм». Ну и аналогично не генерики, а «реализованный при помощи генериков параметрический полиморфизм». В результате в плюсах имеем параметрический полиморфизм с type erasure. Так лучше?

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

> В строгой вы ничего не напишете.

Строгая типизация - это синоним типобезопасности, за которую вы так ратуете. с++ - не типобезопасный язык.

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

>Я вообще не вижу разницы если программа не отпускает объект из-за ошибки в реализации алгоритма, или программа не вызвала delete. Поэтому что есть GC что его нет, проблем головы он не решает. Если очень плохо с разработчиками, то есть ТЕХНОЛОГИЯ .NET и ТЕХНОЛОГИЯ java прошу туда.

Посмотрите, какой идиот...

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

Ааа, простите, это ваш любимый приём. Да спасибо прочёл. действительно не работает с стандарте C89.

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

1. gcc производит промежуточный lisp-о подобный платформонезависимый код. Потом идёт процедура машинно независимой оптимизации и т.д. 2. наверное потому-что комитет плотно взаимодейсвтует с создателями компиляторов, особенно открытых, ибо g++ --std=c++0x уже очень давно.

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

Ну, посмотрел. Что сказать то хотите? Эксгибиционизм?

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

философию я уже давно прошёл, сдал, и забыл. Не могу тягаться с экспертами в данной области. Признаю поражение.

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

Подтверждаю. В C++ типы только накапливаются. Хотя никто не машает сделать reinterpret_cast, ну если очень хочется. Теряют их только маразматические ТЕХНОЛОГИИ и динамические езыки.

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

Шаблоны _не_ компилируются. компилируются только их инстансы, а в инстансах типовых аргументов уже нет. Это и называется «type erasure» (когда в скомпилированном коде нету информации о типовых аргументах, то есть полиморфная функция не может быть first-class объектом).

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

> а отсюда поподробнее — приведи пример

Ну скомпилируйте любую шаблонную функцию без инстансов. Что получится?

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

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

замечательно. этим, кажется, уже можно будет пользоваться :)

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

Спасибо, посмеялся от души. Ну-ка - что такое «инстанцирование шаблона». Вы же уже почти нашли ответ.

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

придумали какой то себе «type erasure»... всякую чушь несете. Ясно же что имелось ввиду то, что тип T в шаблонах C++ может вызывать функции, причем любые функции какие захотите, так как тип неизвестен, и изза этого кажется что можно вызвать любую функцию даже не существующую у типа T. Однако смею огорчить, это не тоже самое как «dynamic» в C#, так как на самом деле все шаблоны в C++ проверяют все такие функции на правильность, убеждаются что такая функция у типа есть еще на этапе компиляции. Всё это примерно равносильно ключевому слову var в C#. Да это работает быстрее чем генерики, типобезопаснее и прочее, просто потому, что в C++ нельзя объявлять типы неизвестные на этапе компиляции, так сказать в рантайме. А в C# можно, и также можно использовать генерики для таких типов сгенерированных на лету. В этом и соль.

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

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

> Шаблоны _не_ компилируются. компилируются только их инстансы, а в инстансах типовых аргументов уже нет. Это и называется «type erasure» (когда в скомпилированном коде нету информации о типовых аргументах, то есть полиморфная функция не может быть first-class объектом).

у тебя в голове каша

в первом приближении type erasure это когда компилируется именно шаблон, т.е. бинарный код, реализующий some_function<Class1> и some_function<Class2>, один и тот же

в плюсах это (если не пускаться на специальные изощрения) разный бинарный код

(как раз таки иногда все же в плюсах было бы полезно type erasure, но делается оно далеко не просто)

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