Как стать автором
Обновить

Современный C++23/26: концепты, корутины и многое другое в высокопроизводительных службах

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров6.8K
Всего голосов 9: ↑7 и ↓2+11
Комментарии33

Комментарии 33

Что-то я не понял первый пример про концепты, а почему вдруг строки не могут быть Addable?

Потому что это перевод!

Там и про корутины немного странно:

кооперативную многозадачность

обработка событий в режиме реального времени

по-моему слабо сочетаются. Вообще, реальное время на несколько событий очень хорошо дружит как раз с обычными потоками (хотя и получается поджирание ресурсов), ну или уже код запускать в ядре ОС (модули ядра и т.п.).

В общем - это перевод.

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

предположим есть квадрат он привязан к точке - точку берем как 1 корутину, тогда получаются воркеры наверно, и нагрузка вроде балансируется(если при достижении порога ну 10 например на 1 квадрате, подключать еще 1 корутину, а если прям много много то как-то по другому) много всё равно не распаралелить-то, только в вебе наверно и распаралелить, а в граффике нереально же, есть порог памяти и прочее, если на одном квадрате превышен лимит на мощность на корутину допустим вроде логично звучит, но как на самом деле я не знаю, но клиент такое точно не сможет распаралелить поэтому при достижении порога у игрока именно будет фриз, тоесть когда все игроки на одной локации

Скрытый текст

Потому что это перевод!

Да нет, там в оригинале прямо написано std::string. То есть проблема не в переводе, а в первоисточнике.

Уточнюсь:

Потому что это перевод!

Это проблема не перевода (как можно подумать). Это проблема другого автора и профессия переводчика.

По автору: как-то нередко получается, что на условно-английском языке пишут все подряд и за собой не очень проверяют, что написано. При этом исходному автору уже комментарий не напишешь.

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

Поэтому:

Про неточности: делаем разбор и обсуждение в комментариях.

Про перевод: спасибо, что есть люди, которые берутся переводить статьи на русский язык.

строку как std::string можно, может просто первоисточник хотел строкой const char*

Мобильная версия документации "современного" языка С++

Код с телефона не пишут, поэтому никто не заморачивался мобильной версией

на телефоне иногда можно накидать идею на С++

Из буханки хлеба тоже можно собрать троллейбус, но зачем? Какая практическая польза? Если уж очень скучно - то в крайнем случае можно в Miro порисовать схемки.

просто на телефоне можно программировать же, не понятно чем вы недовольны

тоесть писать программу - код и компилировать

Я недоволен вашим систематическим троллингом в комментариях на Хабре.

Отличный подход. Вот только никто не говорит про "писать". Может, вы в метро захотите почитать, или просто нужно глянуть по-быстрому, а у вас телефон под рукой.

Это мне напоминает хабр, который типа такой супер айтишный ресурс, на котором сидят одни супер профессионалы, и при этом весь кривой и косой.

ну к слову есть компилятор, и если под рукой телефон и в нем есть компилятор, можно запустить и проверить! некий мини-калькулятор под рукой запустил-проверил, а можно и почитать

Хороший десктопный дизайн, разве что не помешало бы цветами выделить секции, чтобы визуально облегчить навигацию.

В вебе, к сожалению, осталось мало таких сайтов. Мне ещё у Gentoo официальный сайт нравится - и стильно, и без смузихлёбной дрисни.

А когда завезут заголовочники для json, http и много чего еще?

Никогда. C++ язык общего назначения и добавление таких узкоспециализированных либ противоречит его философии.

По такой логике буквально все мейнстримные языки, это не языки общего назначения?

Все так. Сколько из этих языков можно использовать в тостерах?

А вообще я немного коряво написал: главнее все таки что это противоречит философии языка.

Go, java, python и тд вышли из чата. Конечно c++ лучший язык, но это кринге

И вошли в чат С и Раст(ладно жава и питон, это действительно языки для самых разных задач, но Го то каким боком? Язык только для фигачинья микросервисов в прод годится)

На моем текущем месте работы есть несколько разных библиотек для работы с Json, с разными плюсами и минусами. Как из этого сделать что-то обобщенное (чего требует комитет) не представляю, учитывая что они дают разные гарантии и разную производительность.

Алсо я нигде не называл С++ лучшим языком если это не кринж троллинг, вы это выдумали.

это я называю плюсы лучшим языком, но есть моменты, которые меня душат. Что в jsoncons, что в poco::json обобщенная работа с json, например. Генератор случайных чисел в плюсах есть, хотя это довольно узкоспециализированная штука, а вот инструментов для жисончиков нет

Генераторы случайных чисел используются много где, при этом их реализация часто программно-аппаратная, поэтому их наличие вполне оправдано.

Короче разрабы будущих с++ витают в облаках. Пока они абстрагируются уже придумали кучу других языков решающих эти проблемы и не заставляющие писать простыни кода. А по скорости с++ уже отстает

ну на С проще получается(если понять как готовить С++26 флаг тоесть разобраться с классами то поидее норм)), но из-за интереса можно переписать на С++26 флаг и добиться компиляции -O3 -ffast-math, а там так и так простыня кода будет, если агрессивная оптимизация надо следить за шаблонами это чревато простыне наверно, вот я сейчас по своей простыне буду проверять, у меня без O3 работает, на С и с ним и без него работает, ради интереса переписываю все шаблоны на безшаблонье и там буду смотреть), ну а так только агрессивная на С вменяемая, на С++ у меня чото отлетает, и я думаю покачто какойто шаблон, вобщем интересно )

А по скорости с++ уже отстает

Отстаёт от чего?

ну попробуйте математику перенести(только не спрашивайте зачем, просто есть библиотеки которые обновляются, математику можно реализовать же всего 1 раз) воспользуйтесь плюшками С++ и скомпилируйте в -O3 -ffast-math и сравните -O3 -ffast-math на С (nan, inf должен быть устойчивый, и логика должна сохранятся в обоих языках по сути как на С)

если поможет пользуйтесь этим еще floating-point.html

интересно что после такого микроисследования вы скажите про С++, мне что-то подсказывает С++ хорош пока мы пользуемся его библиотекой, но плата или цена на расходные за получение такого удобства неоценимы просто

просто вдумайтесь линукс можно собрать с -O3 или -Ofast сложно но можно, а математика на С++ может быть с багом или адрес может улететь

тогда если уже говорить в этой плоскости есть случаи когда теряется производительность ради интерфейса

чтобы не быть голословным так как я вроде чутка на начале пути уловил какой-то момент в этом вот

Скрытый текст

это например гном-калькулятор на фрибсд как оно собиралось не знаю, я просто в какой-то момент заметил это совсем в другом приложении и прям увидел еффект от расчётов

и очевидно sqrt: nan в С тоже нан, эх я ошибся

линукс можно собрать с -O3 или -Ofast

И почти наверняка получится глюкалово, сюрприз. На Gentoo Wiki прямо написано: не включайте -O3 для системы.

У меня использование -O3 для видеокодеков приводило к дёрганью изображения.

В целом я мало что понял, ваши комменты это какая-то каша, ну а обосновывать ненужность С++ тем, что pure C быстрее - это просто лол.

при одних и тех же условиях проект на кланге С++ даже в -O2 может не собраться по сравнению с С или может собраться но будут те же артефакты, из-за конструкции С++, например часто я молча наблюдал как гцц собирает всё показывает как надо когда как кланг просто не показывает результат ), но компилирует

в такой конкретике и условиях С++, С становится значительно проще, он как раз даёт управление

а так будет фантомное отключение адреса и всё, и это будет неявно где-то и неочевидно, в такой ситуации можно в любую точку тыкать и говорить вот видишь ты не понимаешь )

просто я привёл пример самого факта что даже линукс собирается в -O3 а какой-то пример нет из-за того, что много чего туда надо было запихнуть ради удобства

так а вы с чем сталкивались в С++? часто воспроизводимая ошибка в Анриале слетающие указатели. Вы сталкиваетесь с таким у вас слетают указатели?)

ну видеокодек на С написанный наоборот ляжет хорошо на ускорение, может там какие-то неочевидные штуки, у меня математика и 3д кладутся на ускорение(всё идеально и очевидно), когда тоже самое на С++ приводит к каким-то чудесам ), которые не понятно как работают ) весь експириенс очевидного кодинга можно умножать на 0 когда указатель режется, и причем не мой а библиотечный, типо внутренний

так а может вам было бы интересно написать на Opengl слайдер, рисуете кадры на плоскости 2д, может какой-то опыт появится, как раз увидите как это работает и почему дёргается

расширены возможности ключевого слова constexpr

Я вот был удивлен насколько. Оказалось можно даже new и delete:

#include <numeric>

constexpr int naiveSum(unsigned int n) {
    auto p = new int[n];
    std::iota(p, p+n, 1);
    auto tmp = std::accumulate(p, p+n, 0);
    delete[] p;
    return tmp;
}

constexpr int smartSum(unsigned int n) {
    return (n*(1+n))/2;
}

int main() {
    static_assert(naiveSum(10) == smartSum(10));        
    static_assert(naiveSum(11) == smartSum(11));
    return 0;
}

А то так живешь и не знаешь какие возможности там скрыты.

Логика constexpr - одна из немногих вещей в плюсах, которые я не понимаю (надеюсь что пока что)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий