group-telegram.com/experimentalchill/274
Last Update:
__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 и протобуфы, если ими пользуетесь. Возможно мы приблизимся, чтобы они вели себя как структурки со временем, и это очень сильный шаг.
BY Experimental chill
Share with your friend now:
group-telegram.com/experimentalchill/274