[ANN] вести с полей (2008-06)
От: jazzer Россия Skype: enerjazzer
Дата: 07.07.08 09:44
Оценка: 161 (17)
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/#mailing2008-06

сделано было довольно много.

текущий черновик стандарта здесь: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2691.pdf
что было добавлено по сравнению с прошлой версией: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2692.html
что было добавлено со времен стандарта 2003-го года: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2652.html

Из важного:


  • Наконец-то будет можно использовать локальные типы в качестве аргументов шаблона (т.е. писать простые функторы и стражи прямо внутри функций):
    template <class T> class X { };
    template <class T> void f(T t) { }
    struct {} unnamed_obj;
    void f() {
      struct A { };
      enum { e1 }; typedef struct {} B;
      B b;
      X<A> x1; // OK
      X<A*> x2; // OK
      X<B> x3; // OK
      f(e1); // OK
      f(unnamed_obj); // OK
      f(b); // OK
    }

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm

  • Почти все ситуации, которые сейчас трактуются как ошибки при выводе шаблонных параметров из выражений, будут трактоваться в рамках SFINAE:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html

  • многопоточность
    — дополнена семантика многотопочного исполнения кода глава 1.10. Как вы помните, ранее изничтожили великие и ужасные точки следования (которые часто использовались гуру во время флейма для демонстрации полной профессиональной несостоятельности собеседников), и ввели понятия "до" и "после" — так вот их дополнили понятиями "до, но в другом потоке" и зависимости между данными (data dependency).
    — внесены соответствующие изменения в библиотеку атомарных операций (функция ). Напомню, это глава 29 нового стандарта и включает в себя атомарные типы std::atomic<T>, lock-free, атомарные флаги, и добрую сотню функций типа atomic_store, atomic_fetch, atomic_exchange, atomic_is_lock_free (!), atomic_fence и т.д, и шесть вариантов упорядочения операций по отношению к памяти (memory ordering):
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm
    — инициализация в многопоточном окружении: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm
    — неявные преобразования атомарных типов в аналогичные неатомарные rvalue, заключаются в предоставлении соответствующего оператора преобразования, объявленного volatile: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2514.html
    — атомарность shared_ptr, в том же виде, что и для других типов:
     template<class T> bool atomic_is_lock_free( shared_ptr<T> const * p );
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2674.htm
    — требования по thread safety для стандартных функций (включая методы стандартных контейнеров): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2669.htm


  • initializer lists (не знаю, как перевести... "инициализация списком"? "списочная инициализация"?) теперь добавлены в черновик стандарта.
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm
    добавлена соответствующая инициализация для стандартных контейнеров (только не в виде соответствующих конструкторов конкретных контейнеров, как предлагалось, а в виде общих требований в 23.1): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf

  • Поскольку поддержки сборки мусора в этой редакции стандарта не будет, сейчас добавили только необходимые базовые вещи для сборки мусора, а именно — функции для регистрации указателей: declare_reachable/undeclare_reachable (для одного указателя), declare_no_pointers/undeclare_no_pointers (для области памяти), и get_pointer_safety, которая расскажет, как реализация относится к указателям, которые не были явно помечены как reachable.
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm

  • Все, относящееся к POSIX, отныне и навсегда будет жить в пространстве имен ::posix (а не ::std и не ::std::posix, как предполагалось ранее)
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2667.htm

  • Появилось пространство имен с замечательным названием std::chrono (глава 20.8) Используется во всех функциях ,связанных со временем, например, std::condition_variable::timed_wait (которая, кстати, распалась на wait_until (c таймаутом и условием) и wait_for (просто с таймаутом)):
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2661.htm

  • Добавили несколько долгожданных алгоритмов типа copy_if: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2666.pdf


    По мелочам:


  • разрешили в замыканиях/лямбдах менять "замкнутые" объекты: по умолчанию их менять будет нельзя, если лямбде разрешается их менять, надо будет написать в объявлении лямбды mutable:
    int x;
    [x]() { ++x; } // error, x is const
    [x]() mutable { ++x; } // OK

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2658.pdf

  • null_ptr можно будет конвертировать из литерального нуля (как сейчас), его можно будет конвертировать в bool (но не везде, а только в инициализаторах — пока что тестируется разработчиками компиляторов) и применять reinterpret_cast для конвертации в целочисленный тип:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2656.htm

  • дальнейшая полировка вставки в контейнер конструированием элемента прямо в контейнере (emplace): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf

    Еще не вошедшее в черновик стандарта:

  • фьючерсы (или как там они называются по-русски, короче, std::unique/shared_future, std::promise): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2671.html
  • boost::noncopyable. Интерфейс предлагается такой же, что и в бусте, а это означает, что будут проблемы с оптимизацией пустых базовых классов в случае множественного наследования. Непонятно, как это предполагается решать.
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2675.pdf
  • Thread local storage: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm
  • Дальнейшая полировка концепций:
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2676.pdf
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2677.pdf
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2694.pdf
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2695.pdf
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2696.pdf
    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2654.pdf (аллокаторы)

  • предварительное объявление перечислений (без необходимости указывать все возможные значения, но с необходимостью указывать тип представления): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2687.pdf
  • имена файлов с широкими символами (наконец-то): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2683.html

    Просто интересное:

  • соображения по обратной совместимости с предыдущей версией стандарта С++: http://www.open-std.org/jtc1/sc22/wg21/docs/papers
    /2008/n2693.html
  • соображения по thread safety стандартных строк (фактически, запрет реализаций, использующих copy-on-write): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2668.htm
  • протокол заседаний (очень занимательное чтиво): http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2697.html
  • jazzer (Skype: enerjazzer) Ночная тема для RSDN
    Автор: jazzer
    Дата: 26.11.09

    You will always get what you always got
      If you always do  what you always did
    standard mailing committee c++0x wg21
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.