TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
Experimental chill

21 Jun 2024, 14:54

Открыть в Telegram Поделиться Пожаловаться

__is_bitwise_cloneable

https://discourse.llvm.org/t/extension-for-creating-objects-via-memcpy/76961

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

Когда мы копируем какой-то протобуф, то часто можно скопировать просто все биты примитивных полей, что является простой задачей для memcpy. Но проблема, memcpy вызывает undefined behavior на таких классах из-за виртуальности, и нетривиальной копируемости, и проблем с лайфтаймами. В C++23 аж добавили https://en.cppreference.com/w/cpp/memory/start_lifetime_as , так как даже ужасный std::launder не решил никаких тонкостей.

В итоге решили сделать специальный built-in, чтобы детектить такие кейсы, когда memcpy не будет проблемой для виртуальных классов.

В общем, в LLVM уехало 2 недели назад, протобуф патч подцепил (скоро уедет в прод) и ускорения парсинга на любых сколько-нибудь реальных протобуфах - минимум 8%. Ещё раз показывает сильную связку инфраструктуры компиляторов, которые мы обновляем каждые пару недель. Сделали оптимизацию в другом уровне -- сразу уезжает в прод и экономим CapEx как можем (на самом деле тратим больше на AI, но это story for another day).

Если получится, советую обновить и clang и протобуфы, если ими пользуетесь. Возможно мы приблизимся, чтобы они вели себя как структурки со временем, и это очень сильный шаг.
Extension for creating objects via memcpy
TLDR: we’re looking for a well-defined way to create objects with vptrs via memcpy. We have a common code pattern on creating new message objects in protobuf parser: // Message is almost trivial, except that it has virtual methods class Message { public: virtual ~Message(); // allocate me...

15.6k 0 70 115 108
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot