Open apolukhin opened 3 years ago
Иван, 5 августа 2018, 16:07 Интересно, в c++ ведь нет встроенных динамических массивов, их приходится реализовывать вручную, на указателях, с ручным управлением памятью. Чтобы сделать это оптимально, нужен этот самый restrict и realloc (Возможность realloc #28). В Си restrict ввели еще в C99. И я так понимаю, есть весомые причины, из-за которых они до сих пор не в стандарте C++?
yndx-antoshkka, 6 августа 2018, 11:47 Иван, но зачем это всё писать самому, если есть std::vector?
Иван, 8 августа 2018, 21:04 yndx-antoshkka, std::vector, если я не ошибаюсь, при вставке в начало и в конец при capacity == size, и при освобождении памяти с начала и с конца, всегда производит переаллокацию. Т.е. работает с памятью очень неэффективно. STL мне впринципе не достаточно...
yndx-antoshkka, 6 августа 2018, 11:57 Работа над этой идеей велась и даже были предложения http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3988.pdf
Последние пару лет работа затихла, люди занимавшиеся проработкой идеи отвлеклись на рефлексию и constexpr.
Если чувствуете в себе силы - посмотрите предложение, постарайтесь его улучшить, и попробуем поторопить события.
Саша Зайцев, 7 августа 2018, 0:32 yndx-antoshkka, я совсем недавно спрашивал на std-proposals о судьбе пропозала - пока что тишина. И на самом деле там довольно много открытых вопросов по поводу restrict. Кому интересно - просто почитайте полностью самый последний на текущий момент proposal по данной теме.
Слишком много случаев, когда простое добавление restrict решает проблемы с производительностью: https://github.com/ClickHouse/ClickHouse/pull/19946
Или просто канонический пример, где складываем поэлементно два массива в третий.
А это чуть ли не единственная причина, по которой "из коробки" код на Rust может быть более производительным, чем на C++.
Правда с учётом того, что __restrict
работает, предложение в стандарт не так важно.
Хотя он работает неудобно - много непонятных случаев.
Перенос предложения: голоса +14, -0 Автор идеи: Игорь Шаповал
В С99 было добавлено ключевое слово restrict. Оно применимо только к указателям.
restrict позволяет указать, что объявляемый указатель указывает на блок памяти, на который не указывает никакой другой указатель.
В разных компиляторах уже добавили аналогичные ключевые слова для С++:
GCC: restrict, restrict__
Clang: restrict
Как пример можно посмотреть стандартную функцию std::memcpy
Было бы не плохо иметь в С++ стандартную поддержку.