C++ 20 устаканился
От: Шахтер Интернет  
Дата: 24.02.19 09:11
Оценка: 48 (9)
новости от Саттера

Now that we are close to knowing the final feature set of C++20, we can see will be C++’s largest release since C++11. “Major” features include at least the following:

modules
coroutines
concepts
contracts
<=> spaceship
“lots more constexpr”: broad use of normal C++ for direct compile-time programming, without resorting to template metaprogramming (see last trip report)
ranges
calendars and time zones
span
and lots more

В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re: C++ 20 устаканился
От: B0FEE664  
Дата: 24.02.19 11:28
Оценка: 1 (1) +1
Здравствуйте, Шахтер, Вы писали:

Ш>

Ш>and lots more


Забавно, что ssize() добавили.
И каждый день — без права на ошибку...
Re[2]: C++ 20 устаканился
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.02.19 11:15
Оценка:
Здравствуйте, B0FEE664, Вы писали:

Ш>>

Ш>>and lots more


BFE>Забавно, что ssize() добавили.


bool has_repeated_values(const T& container) {
  for (ptrdiff_t i = 0; i < container.ssize() - 1; ++i) {
    if (container[i] == container[i + 1]) return true;
  }
  return false;
}


Я ожидал увидеть перебор элементов в обратном направлении:

  for (auto i = container.ssize() - 1; i >= 0 ; --i){
  }
}


---
PS. Негативно отношусь к обоим циклам
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[2]: C++ 20 устаканился
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 25.02.19 11:49
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Забавно, что ssize() добавили.


Круто! Меня постоянно раздражает необходимость кастов из size_t при использовании omp parallel for
Re[3]: C++ 20 устаканился
От: Коваленко Дмитрий Россия http://www.ibprovider.com
Дата: 25.02.19 12:07
Оценка:
Здравствуйте, Nuzhny, Вы писали:

BFE>>Забавно, что ssize() добавили.


N>Круто! Меня постоянно раздражает необходимость кастов из size_t при использовании omp parallel for


Покажи, пожалуйста, пример такого каста.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re[4]: C++ 20 устаканился
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 25.02.19 12:10
Оценка: 13 (2)
Здравствуйте, Коваленко Дмитрий, Вы писали:

N>>Круто! Меня постоянно раздражает необходимость кастов из size_t при использовании omp parallel for

КД>Покажи, пожалуйста, пример такого каста.

Вот например:
// Update Kalman Filters state
const int stop_i = static_cast<int>(assignment.size());
#pragma omp parallel for
for (int i = 0; i < stop_i; ++i)
{
...
}


То есть openmp не может использовать size_t в качестве переменной цикла.

P.S. Добавлю, что это из-за плохой поддержики OpenMP в Windows — только 2.0. В последующих стандартах дозволено и unsigned, но для кроссплатформенных приложений приходится подстраиваться под отстающих.
Отредактировано 25.02.2019 12:22 Nuzhny . Предыдущая версия .
Re[5]: C++ 20 устаканился
От: B0FEE664  
Дата: 25.02.19 20:17
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Вот например:

N>
N>// Update Kalman Filters state
N>const int stop_i = static_cast<int>(assignment.size());
N>#pragma omp parallel for
N>for (int i = 0; i < stop_i; ++i)
N>{
N>...
N>}
N>


N>То есть openmp не может использовать size_t в качестве переменной цикла.


Хмм. Я совсем не в курсе параллельного исполнения циклов в современном коде, но знаю, что в стандарте есть такое:
template< class ExecutionPolicy, class ForwardIt, class UnaryFunction2 >
void for_each( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryFunction2 f );

здесь

и не нужно никаких переменных цикла. MS не поддерживает for_each( ExecutionPolicy... ?
И каждый день — без права на ошибку...
Re[6]: C++ 20 устаканился
От: watchmaker  
Дата: 25.02.19 23:23
Оценка: 8 (2) +3
Здравствуйте, B0FEE664, Вы писали:

N>>Вот например:


N>>То есть openmp не может использовать size_t в качестве переменной цикла.


BFE>Хмм. Я совсем не в курсе параллельного исполнения циклов в современном коде, но знаю, что в стандарте есть такое: ExecutionPolicy

Ну ты сравнил, конечно
ExecutionPolicy — since c++17. А OpenMP — since 1997! Не думаю, что как только приняли новый стандарт, так сразу весь код, написанный за 20 лет, магически под него переписали.

BFE>for_each

Ну и OpenMP предоставляет куда больше возможностей, чем доступно в стандартной библиотеки C++. Да, потихоньку и в ней появляется что-то полезное. И всякие там for_each для поэлементной обработки вполне себе имеют право на жизнь. Но если твоя функция не ложится в один из стандартных алгоритмов, то всё плохо.

BFE>и не нужно никаких переменных цикла.

Хорошо. Это ты сам сказал Вот выше есть пример довольно простого кода. Как его переписать на for_each без переменных цикла? И желательно чтобы он при этом остался ещё и читаемым.
А там всего-то итерируются по паре массивов. А если массивов 3? А если нужно обращаться к соседним элементам? А если нужно ещё и максимальный элемент найти и вернуть? В общем-то это всё не сложно, но с OpenMP это займёт на одну строчку больше чем эквивалентный однопоточный код. А попытка провернуть это через стандартную библиотеку выльется в ещё одну ad-hoc реализацию ranges
И опять же: OpenMP — это далеко не только parallel for.
Re[5]: C++ 20 устаканился
От: so5team https://stiffstream.com
Дата: 26.02.19 06:41
Оценка: +1
Здравствуйте, Nuzhny, Вы писали:

N>Вот например:

N>
N>// Update Kalman Filters state
N>const int stop_i = static_cast<int>(assignment.size());
N>#pragma omp parallel for
N>for (int i = 0; i < stop_i; ++i)
N>{
N>...
N>}
N>


Извините за занудство, но может безопаснее все-таки ptrdiff_t вместо int?
Re[6]: C++ 20 устаканился
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 26.02.19 08:27
Оценка:
Здравствуйте, so5team, Вы писали:

S>Извините за занудство, но может безопаснее все-таки ptrdiff_t вместо int?


Да, конечно. У меня до этого проекта руки уже месяца 2 не доходят, только issues закрывать успеваю.
Re: C++ 20 устаканился
От: The Passenger Голландия  
Дата: 01.03.19 12:21
Оценка:
Здравствуйте, Шахтер, Вы писали:

asio так и нет?
Весь мир — Кремль, а люди в нем — агенты
Re[2]: C++ 20 устаканился
От: AeroSun  
Дата: 02.03.19 12:02
Оценка:
Здравствуйте, The Passenger, Вы писали:

TP>asio так и нет?


Ага, как и рефлекшн перенесли на С++26. Короче, прикладные вещи будут не раньше С++50. Вангую, что к 2023 появится "более удобный с++". А "текущий с++" повторит путь кобола.
Re[3]: C++ 20 устаканился
От: LaptevVV Россия  
Дата: 03.03.19 03:54
Оценка:
AS>Вангую, что к 2023 появится "более удобный с++". А "текущий с++" повторит путь кобола.
А был "более удобный Кобол" ? Что-то я не помню...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: C++ 20 устаканился
От: AeroSun  
Дата: 04.03.19 10:17
Оценка:
Кстати, про modules: встречал зарубежную статью, где тестилась реализация для стандарта.
И выходило, что модули в кандидатской реализации значительно увеличивают время сборки.
Есть какие-либо тесты с финальной реализацией? Что там со скоростью сборки?
Re[4]: C++ 20 устаканился
От: anonymouse2 Иностранный Агент
Дата: 07.03.19 05:13
Оценка:
Здравствуйте, LaptevVV, Вы писали:

AS>>Вангую, что к 2023 появится "более удобный с++". А "текущий с++" повторит путь кобола.

LVV>А был "более удобный Кобол" ? Что-то я не помню...

Java?
Нет такого преступления, на которое не пошло бы суверенное родоплеменное быдло ради продления своего бессмысленного рода и распространения своего бессмысленного генома.
Re[5]: C++ 20 устаканился
От: LaptevVV Россия  
Дата: 07.03.19 05:41
Оценка:
AS>>>Вангую, что к 2023 появится "более удобный с++". А "текущий с++" повторит путь кобола.
LVV>>А был "более удобный Кобол" ? Что-то я не помню...
A>Java?
Не... Это совсем "из другой оперы".
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.