Pull to refresh
-9
2
Subscribers
Send message

В C++ нет полноценного “async/await” как законченной модели исполнения. Есть низкоуровневые корутины (co_await/co_yield) - синтаксический сахар без Future/Executor/IO-рантайма, которое нужно всё написать самому, там же и настраивается поведение в каком потоке проснется код после co_await, но тут даже по имени видно "co_await" != "await", о чём я и говорил.
Я не утверждал, что в C++ нет ничего похожего по поведению на .await в Rust.

И в любом случае, даже в C++ корутины в продакшене плохо - они делают код некрасивым, сложным, медленным (без шаманств). И даже с этими всеми недостатками гибкость C++ выше на голову.

В С++ fetch выведет одинаковые thread_id если запустить вот так:

asio::io_context io;

auto ex = asio::make_strand(io);

co_spawn(ex, fetch(), detached);

io.run();

В C++ вообще мьютексы на общие данные внутри корутин использовать не очень хорошо, будут проблемы, но тем не менее это можно сделать корректно, например, организовав шардинг задач по id (если вся работа с локами только внутри корутин) или используя await-able мьютексы.

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

await на JS не меняет поток :) await в C++ нет. И да, я предпочитаю когда я точно знаю какой поток что выполняет, а не рандом.

Ради эксперимента можем посоревноваться, я пишу на C++, а вы на Rust и сравниваем скорость разработки, быстродействие программы, безопасность, архитектуру, простоту поддержки и красоту кода. C++ сделает Rust.

Хороший паттерн блокировок в C++ - scoped_lock, unique_lock, никто уже давно не лочит мьютексы сам. Приходится захватывать мьютекс в одном месте, а освобождать в другом = архитектура кусок говно. Раньше я и без них не делал так, чтобы лок / анлок был в разных функциях

Только взглянул на ваш код на TS сразу увидел проблему. С таким сталкивался еще в школе 25 лет назад…

Пример на Rust как раз показывает всю ущербность Rust. Сам себе создал проблему на ровном месте (await, отсутствие контроля за потоками), сам ее нашел еще и в другом месте и героически не дал собрать проект.

Напомнило C++ 2000-х годов, где сообщение об ошибке ссылалось на что угодно, только не на строку с проблемой.

На C++ за десятилетия программирования я ни разу не столкнулся с ошибкой что освободил мьютекс из другого потока…

Дедлоки - да, но они и в расте могут быть.

И за этим всем на самом деле скрывается некачественная архитектура проекта. Блокировать мьютекс надо только на составление запроса, но не на выполнение (с оговорками на случай больших транзакций с откатами).

Опять странные решения…

На нашем сервере я сделал несколько перехватчиков scoped_lock, unique_lock и т.д. + некий measure_scope.

Все данные с номерами строк и именами файлов записываются в tbb::concurrent_queue и в отдельных потоках сохраняются в ClickHouse.

Оверхед ~0, точность идеальная, вплоть до отдельных строк кода, отдельно по блокировкам - видно сколько времени блокировка ожидалась, сколько держалась, количества вызовов и так далее.

Миллиарды записанных событий, данные в ClickHouse занимают до сотни гигабайт. Строятся гистограммы распределения времени, считаются экстремумы.

Визуализация в datalens, можно настраивать так же алерты, подключать ИИ к анализу.

А файлы… Если вы такое всерьез рассматривали в 2025 году, то забудьте про ИТ и идите пасти коров, что-ли…

Слишком долго и сложно. Я обычно кидаю кусок кода и пишу что-то типа «найди проблему с ресайзом области текста после сокрытия бейджа и исправь»

Зачем? Как это делать написано уже 100 раз до меня, просто возьмите архитектуру любого http сервера, например, nginx. STL + pthreads + OpenSSL + libev + Intel TBB + libfmt + rapidjson - основа.

Для бинарного протокола используем ULEB-кодирование и свой формат описания пакетов.

Парсер HTTP свой, для API-сервера не нужна полная поддержка протокола.

SSL проксирование через CloudFlare или через nginx, он же может и корректность протокола проверять.

У нас на этом написано несколько бэкэндов онлайн-игр, API-сервера для аналитики, различные сервисы.

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

БД ClickHouse + MySQL, адаптер самописный.

Я так же написал свое расширение для ClickHouse для PHP (оно открытое), которое работает с ним по нативному протоколу и тоже базовая часть заняла около суток, остальное время уже реализация дополнительного функционала.

У вас что-то не так просто с эффективностью…

Как люди извращаются, чтобы решить проблемы, которые сами же и выбрали. Хотите я ускорю ваши C++ вызовы в 1000 раз? Просто. Используйте. C++.

И не надо мне писать про преимущества Go, современный C++ такой же безопасный и на нем так же быстро решаются продуктовые задачи как и на Go, при том что он часто быстрее и гораздо более универсальный и мощный.

Странно, на такое 2 недели… На C++ давно уже пишем гораздо более сложные вещи за день примерно. Без проблем с производительностью, WS/бинарный протокол/rest. Без явного выделения памяти, RAII и так далее. Поддерживать может любой программист, кто понимает C-подобный синтаксис, даже полный даун.

Фактически - всё, нет, ВСЁ, что вы описали - как раз признак ТУПОСТИ. Вы описали костыли для инвалидов (умственных). Умный человек как раз всё это сделает сам, чекпоинты, дедлайны, бизнес-ценность, даже задачу сделает не так, как ее поставили, а так, как это на самом деле нужно бизнесу.

Так работают нормальные программисты. Им не нужны лиды, ТЗ… Достаточно описать идею и дальше вы получите работающий бизнес-продукт.

Вот они, олимпиадники… Код корректный, но ужасный, отвратительный.

Столько таких повидал за время работы, для меня «Призер олимпиады» - красный флаг.

Только детям мозги ломаете :( На 1000 олимпиадников находится только 1, которому это пошло на пользу.

Это все сложно и непонятно. У меня было всё гораздо проще - я программирую с 9 лет (мне 39) и я всегда считал, что программирую лучше всех (и за годы жизни не встречал лично людей, которые программируют лучше). И я знал почти всё всегда лучше других и всегда спорил до победного отстаивая свою точку зрения даже если меня о ней никто не спрашивал. Я создавал целые теории и философию чтобы доказать, что я прав. И да, были моменты, где мне доказывали, что я не прав и я на них учился. Это лучшее обучение, что есть в мире. А еще я читал очень много книг по программированию, управлению людьми, проектами, рефакторинг, математика, гейм-дизайн, маркетинг, аналитика и так далее. И читал я потому что мне было интересно.

Прошел 2 полноценных MBA (1 на 2 года зарубежный и второй на 1 год, наш), германский курс по PMBook и еще кучу мелких и тоже просто потому что было интересно, мне было плевать на развитие как таковое всегда.

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

Среднее выполнение задач у меня в 3-5 раз меньше, чем даже у Сеньоров. А если говорить про бизнес, то у окружающих вообще мрак.

Так что не мучайте себя, забейте, вы все всё-равно выше головы не прыгнете, у вас не хватит мозгов. Или докажите, что я не прав. :)

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

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

Вы странный. Писать отдельную статью про «обучение». Сам процесс «обучение» выделяют в обособленную сущность только глупые люди. Для меня, например, его отдельно не существует, я просто делаю и это получается. Никаких правил и особенных подходов, просто всё легко. Не сразу получается идеально, но очень быстро становится таковым, но без вот этого всего, что вы написали :)

Я бы сказал, что «обучение» неизбежно, как третий закон Ньютона и скорость этого процесса напрямую и экспоненциально зависит от интеллекта субъекта.

А не проще сразу писать быстрые запросы, а тех, кто не умеет - увольнять? У меня случаи были оптимизации (руками), которые и в 10 000 раз ускоряли запрос (написанный не мной)… Ваш движок не ускорит запросы, написанные мной… Более того, для оптимизации «запросов» я применяю еще методы кэширования данных (те же MATERIALIZED VIEW и временные таблицы), изменение структуры таблиц и формата записи данных, изменения алгоритмов, которые используют эти запросы. Ваш движок такое умеет?

Я считаю, такие оптимизаторы вредными. Они позволяют тем, кто работает с БД быть тупыми…

И вы не показали еще запросы с JOIN-ами, в ClickHouse их надо писать по особому, чтобы было быстро

У меня 30 лет опыта разработки и из них 20 коммерческого, если я накручу 2-3 года, то никто не заметит :)

Линус тут жестко тупанул. Замените Rust на «детскую порнографию» и со азу станет понятно, что всё, что он написал - чушь полнейшая. Я понимаю тех разработчиков, которые говорят, что не хотят иметь никакого отношения к Rust (детской порнографии) и что Rust (детской порнографии) не место в ядре никак и никогда и что у них есть право голоса по поводу любых запретов Rust (детской порнографии)…

Логика стала понятнее? Вот для меня Rust еще хуже, чем детская порнография…

Очередные советы, которые делают только хуже :)

price с клиента в коммерции надо передавать ОБЯЗАТЕЛЬНО, а потом уже проверять на сервере соответствие и возвращать «Цена изменилась», если она изменилась, иначе пользователь откроет форму со старой ценой, будет думать, что покупает за старую цену, и пока он смотрит цена может поменяться и там дальше куча проблем, начиная от заказа с другой ценой, заканчивая списанием другой суммы…

Облако всё-равно это тупо. Облако выходит в 5-10 раз дороже собственных серверов… 14 лет уже этим занимаюсь и ни разу не было такого случая, чтобы облако было чем-то лучше или эффективнее…

Аргумент так себе. У фашизма корни растут ещё с более древних времён, но фашизм от этого хорошим не станет :)
Но если сократить все аргументы против Go (по сравнению с C++) до одной фразы, то получится "У Go нет ни одного преимущества по сравнению с C++, зато полно недостатков".

Если у вас код на C++ работает так же быстро как и на Go, то вы просто не умеете писать на C++ :)

Go - от слова Govno, на мой взгляд. А опыт у меня большой на всех популярных языках программирования.

P.S.: Не знаю на чем вы там собирали библиотеку, но 2 минуты на сборку проекта такого масштаба - очень и очень много.

Information

Rating
Does not participate
Registered
Activity