TGViewer
this->notes. this->notes. @thisnotes · 4.51K subscribers
Post #152 781
#list

Пам-пам. Наступила очередь пачки рандомных фактов/ссылок/чего-то ещё.

1. Я думаю, уже чуть ли не каждый видел концепты из C++20. Интересный факт, что в текущем виде (авторства Andrew Sutton'а) они называются concepts lite, потому что первые концепты авторства Bjarne Stroustrup выглядели примерно так:

concept EqualityComparable<typename T> {
requires constraint Equal<T>;
requires axiom Equivalence_relation<Equal<T>, T>;

// if x == y then for any Predicate p, p(x) == p(y)
template <Predicate p>
axiom Equality(T x, T y, P p) {
x == y => p(x) == p(y);
}

// inequality is the negation of equality
axiom Inequality(T x, T y) {
(x != y) == !(x == y);
}
};


Ух. Тут и семантические ограничения, и синтаксические. И бог весть знает что ещё. Собсна потому текущие концепты это lite. Потому что была вот такая хардовая версия, которую отказались принимать, потому ту мач сложно. Можете вот тут чуть-чуть почитать.

2. В дополнение к концептам хотят подвезти контракты. Конечно по срокам ничего не понятно. Вот так это примерно будет выглядеть:

int f(int x, int y)
[[ expects: x > 0 ]] // precondition
[[ expects: y > 0 ]] // precondition
[[ ensures r: r < x + y ]] // postcondition
{
int z = (x - x%y) / y;
[[ assert: z >= 0 ]]; // assertion
return z + y;
}


Можно посмотреть старый пропозал из любопытства.
Вот текущий. Пока ещё есть вопросы по синтаксису. В качестве расширения в будущем ещё предлагают сделать захват по значению переменных (не оч понял зачем).

3. Это конечно же баян, но вот пример:

template <class T> struct A {
void g() {}
};

template <class T> struct C : A<T> {
void f() { g(); }
};


В таком виде код не скомпилируется, потому что в нашей структурке нет такой функции, и неизвестно, будет ли она в специализации A. Чтобы сообщить, что g() есть в каждой специализации A можно заюзать самую недооценённую фичу: this:

template <class T> struct C : A<T> {
void f() { this->g(); }
// or using A<T>::g;
};


4. Давайте посмотрим на сигнатуру std::for_each:

template<class InputIt, class UnaryFunction>
UnaryFunction for_each(InputIt first, InputIt last, UnaryFunction f);


Зачем тут возвращается UnaryFunction? Подразумевается, что ваш функтор может быть быть классом с каким-то стейтом, потому нужно вернуть итоговый функтор. Интересно, что в std::sort логика другая:

template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);


Тут тоже компаратор -- любой функтор. Но функция ничего не возвращает : ) Лол короч.

5. Интересный факт, что возможность NRVO (т.к. это необязательная оптимизация) выясняется по анализу скоупа, а не конкретного выполняющегося кода. Можно посмотреть примеры и пояснений в этом и следующем постах на канале (кстати довольно интересном) у @cloudy_district.

6. На летней C++ Zero Cost Conf был доклад Тимура Думлера про real-time вычисления. Интересно было как минимум понять, о чём это. Кстати увидел на том же канале : )
Тут есть интересный факт, что нельзя иметь одновременно равновероятный для всех чисел в промежутке рандом, работающий за детерменированное кол-во шагов. Либо одно, либо второе.

7. Ещё у Жени есть очень крутые статьи на хабре. Кажется, пару штук я даже постил. Из последнего мне очень понравилось про Неклассические контейнеры в C++. Увидел бы я её, когда писал пост про вектор...
Кстати из неё узнал, что в бусте некоторым контейнерам можно задавать политику ресайза. Правда в довольно простом виде, но всё же.

8. Интересная заметка о том, как отлаживать bash-скрипты.

9. Как и зачем писать хороший код. Доклад Григория Петрова на Golang Conf 2019. Кстати довольно известный, я так понял, в локальных кругах чувак. По крайней мере он вёл несколько промежуточных бесед на Highload++ Foundation 2022 в середине мая. Что-то удалось посмотреть, почти всё не удалось посмотреть. Будем полгода ждать записи, отсматривать и рассказывать вам.
  • 👍 6
  • 🔥 1
More from @thisnotes
  1. Sep 24, 2026#cpp Представьте вот такой код: auto object = GetObject(params...); auto another = object;…
  2. Sep 17, 2026#common Сидите вы себе спокойно, разрабатываете поиск каких-нибудь объектов. Может это тов…
  3. Sep 9, 2026#cpp #books Да, книга 2001ого года. Мы ровесники. И да, в ней в основном обсуждаются какие…
  4. Sep 2, 2026#perf Попробовал собрать в кучку (кажется, немного сумбурно всё же) мысли по двум моментам…
  5. Aug 31, 2026Давайте новый тег заведём: #perf Во-первых, надо понять, что я вообще понимаю под перфом,…
  6. Aug 27, 2026#common Мы часто делаем системы, которые обладают какими-то ограничениями. Ограничения наш…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →