TGViewer
this->notes. this->notes. @thisnotes · 4.52K subscribers
Post #183 1.41K
#list

1. Немного расскажу про эпохи.
Это такой механизм, который предлагается использовать для обратнонесмовместимых изменений в C++, но при этом не ломать эту обратную совместимость всем, кто не хочет.

Предлагается ввести новое ключевое слово epoch, которое опционально можно писать в начале вашего модуля (именно модуля):

epoch 2023;

В пропозале предлагается следующий пример: в C++ существуют неявные приведения. Потому такой код компилируется:

module f;
void f(float) {}
...
f(3.4); // 3.4 is double


Однако если указана конкретная эпоха, с которой запрещаются неявные приведения, код будет падать с ошибкой компиляции:

epoch 2023;
module f;

void f(float) {}
...
// f(3.4); // CE
f(3.4f); // success


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

Новая эпоха будет появляться с появлением нового стандарта и выражаться четырёхзначным числом, которое является годом выхода этой эпохи. Соответственно вы просто сможете компилировать свой код в привычном формате -std=standard.

Однако эпохи не являются инструментом для ломания ABI. Они лишь предлагаются как некоторый инструмент для другого преобразования кода в AST, после чего компиляция идёт обычным способом. Тут конечно грустно.

В пропозале есть ещё несколько примеров, которые можно починить эпохами. Вот несколько интересных (обратите внимание, что пропозал предлагает только эпохи и примеры ниже демонстрируют, какие необычные изменения можно будет ввести в язык без боли):
- оставить переменную неинициализированной:
// int i; // CE
int i = void; // OK, unitialized

- запретить устаревшие конструкции:
// int a0[]{1, 2}; // CE
std::array<int> a1{1, 2}; // OK
// typedef int I0; // CE
using I1 = int; // OK

- ввести новые/переименовать существующие ключевые слова (co_await -> await, co_yield -> yield);
- форсить использование nullptr вместо NULL или 0;
- форсить использование break и fallthrough в switch;
- юзание условного std::movable_initializer_list вместо обычного там, где это возможно;
- форсить для конструкторов использование одного из двух слов: explicit, implicit;
- форсить одно из слов const/mutable для переменных;
- следить за выполнением некоторых core guidlines на уровне языка;
- добавить ещё несколько атрибутов для методов/функций вроде [[accessible_until_epoch(X)]] и [[accessible_since_epoch(X)]]

и другие.

Короч прикольно, но шо-то как-то не прям то, что хотелось. Опять же, ABI либо придётся когда-то сломать (уже может быть довольно поздно), либо мы все так и умрём в пережитках прошлого (или нет, я хз).

Proposal.

2. Небольшая статья про то, как можно использовать макрос __has_include и feature test макросы.

3. Какая-то забавная интересная статья про то, как чуваки своего начальника продавали.
  • 👍 7
More from @thisnotes
  1. Sep 17, 2026#common Сидите вы себе спокойно, разрабатываете поиск каких-нибудь объектов. Может это тов…
  2. Sep 9, 2026#cpp #books Да, книга 2001ого года. Мы ровесники. И да, в ней в основном обсуждаются какие…
  3. Sep 2, 2026#perf Попробовал собрать в кучку (кажется, немного сумбурно всё же) мысли по двум моментам…
  4. Aug 31, 2026Давайте новый тег заведём: #perf Во-первых, надо понять, что я вообще понимаю под перфом,…
  5. Aug 27, 2026#common Мы часто делаем системы, которые обладают какими-то ограничениями. Ограничения наш…
  6. Aug 24, 2026#list 0. [talk] Achieving Peak Performance for Matrix Multiplication in C++. Aliaksei Sala…
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 →