Что общего у Алисы, автономного грузовика и поиска лекарств?
Все эти системы требуют сложного бэкенда.
На конференции «Я про бэкенд» 3 октября инженеры расскажут:
— как держать тысячи RPS на генеративных ответах Алисы;
— как обрабатывать 100+ ГБ/с в реальном времени с помощью YTsaurus Flow;
— как сделать агентную платформу надёжной;
— как работать с векторным поиском;
— как переживать отказы дата-центров;
— как обрабатывать до 1200 ГБ данных в час от автономного транспорта.
А свою backend-задачу, связанную с архитектурой поисковых систем, можно предложить уже сейчас — самую сложную из них выберут и решат в прямом эфире на конференции.
3 октября · Москва + онлайн · бесплатно
Регистрация
Все эти системы требуют сложного бэкенда.
На конференции «Я про бэкенд» 3 октября инженеры расскажут:
— как держать тысячи RPS на генеративных ответах Алисы;
— как обрабатывать 100+ ГБ/с в реальном времени с помощью YTsaurus Flow;
— как сделать агентную платформу надёжной;
— как работать с векторным поиском;
— как переживать отказы дата-центров;
— как обрабатывать до 1200 ГБ данных в час от автономного транспорта.
А свою backend-задачу, связанную с архитектурой поисковых систем, можно предложить уже сейчас — самую сложную из них выберут и решат в прямом эфире на конференции.
3 октября · Москва + онлайн · бесплатно
Регистрация
constinit
Если переменная, объявленная с
Переменная может быть одновременно
constinit — это новый ключевое слово и спецификатор в C++20. Он используется для объявления переменных со статическим или потоковым временем хранения. Если переменная объявлена с constinit, ее инициализирующее объявление должно быть выполнено с constinit. Если переменная, объявленная с
constinit, имеет динамическую инициализацию (даже если она выполняется как статическая инициализация), программа является некорректной.constinit гарантирует, что переменная инициализируется на этапе компиляции, и что статическая инициализация не может привести к проблемам с порядком инициализации. Однако он не делает переменную неизменяемой и не подразумевает const или constexpr. Однако constexpr подразумевает constinit. Переменная может быть одновременно
const и constinit, но не может быть одновременно constexpr и constinit.std::tie
Она может использоваться для распаковки кортежей или пары значений в отдельные переменные. Например, если у вас есть функция, которая возвращает
В этом примере мы используем
Это позволяет нам проверить, было ли значение успешно вставлено в набор.
std::tie — это функция, которая создает кортеж ссылок на lvalue из своих аргументов или экземпляров std::ignore. Она может использоваться для распаковки кортежей или пары значений в отдельные переменные. Например, если у вас есть функция, которая возвращает
std::pair или std::tuple, вы можете использовать std::tie, чтобы присвоить значения этого кортежа отдельным переменным.В этом примере мы используем
std::tie для распаковки результата вызова set_of_s.insert(value) в две переменные: итератор iter и логическую переменную inserted. Это позволяет нам проверить, было ли значение успешно вставлено в набор.
🤖 Что происходит внутри ИИ-агента, когда он работает с корпоративными данными?
6 октября в Архитектурном клубе Яндекс 360 разберут системную архитектуру таких решений: оркестрацию, инструменты, память, наблюдаемость и управление автономностью.
Отдельно поговорят об ограничениях системы, качестве поиска и итогового ответа, а также о том, как изолировать данные пользователей и не допускать утечек через индекс или кеш.
🗓 6 октября, 17:00 МСК
💻 Онлайн, бесплатно
→ Зарегистрироваться на эфир
6 октября в Архитектурном клубе Яндекс 360 разберут системную архитектуру таких решений: оркестрацию, инструменты, память, наблюдаемость и управление автономностью.
Отдельно поговорят об ограничениях системы, качестве поиска и итогового ответа, а также о том, как изолировать данные пользователей и не допускать утечек через индекс или кеш.
🗓 6 октября, 17:00 МСК
💻 Онлайн, бесплатно
→ Зарегистрироваться на эфир
Проверка возможности конструирования элемента с набором конкретных параметров
Когда шаблонный класс задан в виде
Когда шаблонный класс задан в виде
template<class T, typename... Args>, бывает трудно понять, какие аргументы можно использовать. Метод is_constructible из библиотеки type_traits даёт неполный ответ: он показывает, существует ли конструктор под конкретные аргументы. Для более полной картины можно использовать еще один шаблон.#вопросы_с_собеседований
Как следует обрабатывать ошибки во время выполнения в C++?
— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
Как следует обрабатывать ошибки во время выполнения в C++?
— Ошибки выполнения в C++ можно обрабатывать с помощью исключений.
— Этот механизм обработки исключений в C++ разработан для обработки ошибок в программном обеспечении, состоящем из независимо разработанных компонентов, работающих в одном процессе и находящихся под синхронным управлением.
— Согласно C++, любая подпрограмма, которая не выполняет своего обещания, генерирует исключение. Вызывающий код, который знает, как обрабатывать эти исключения, может их перехватить.
malloc стал безопасен
В предыдущих версиях использование низкоуровневых функций, унаследованных из языка Си, не рекомендовалось. Проблема в том, что Си оперирует байтами, а в С++ происходит работа с объектами со своим временем жизни и областью видимости. До С++ 20 время жизни объекта начиналось после вызова оператора new. В новой версии все изменилось — принято считать, что набор низкоуровневых функций — memcpy, memmove, malloc, aligned_alloc, calloc, realloc, bit_cast, начинает время жизни объекта. Т. е. следующий код(см картинку) будет валиден.
Т. е. у нас появляется обратная совместимость с языком Си, но относительно С++ в новой трактовке.
В предыдущих версиях использование низкоуровневых функций, унаследованных из языка Си, не рекомендовалось. Проблема в том, что Си оперирует байтами, а в С++ происходит работа с объектами со своим временем жизни и областью видимости. До С++ 20 время жизни объекта начиналось после вызова оператора new. В новой версии все изменилось — принято считать, что набор низкоуровневых функций — memcpy, memmove, malloc, aligned_alloc, calloc, realloc, bit_cast, начинает время жизни объекта. Т. е. следующий код(см картинку) будет валиден.
Т. е. у нас появляется обратная совместимость с языком Си, но относительно С++ в новой трактовке.
Избавляемся от макросов
В целом, разработчики стандарта стараются исключить препроцессор. Как следствие, в новой версии можно не пользоваться макросами FILE и LINE, а взамен использовать std::source_location(см картинку).
Как мы видим, код становится более единообразным, в одном стиле, с расширяемым функционалом.
В целом, разработчики стандарта стараются исключить препроцессор. Как следствие, в новой версии можно не пользоваться макросами FILE и LINE, а взамен использовать std::source_location(см картинку).
Как мы видим, код становится более единообразным, в одном стиле, с расширяемым функционалом.