TGViewer
Alex Fails Some News Channel Alex Fails Some News Channel @alexfailschannel · 282 subscribers
Post #1042 2.88K
https://github.com/llvm/llvm-project/pull/68620

ПОСОНЫ, ТУТ #embed ВЛЕТЕЛ В ШЛАНГ, теперь заживем!

upd1: пока ревертнули, чтобы починить билдботов, но работа идет!
upd2: влили с фиксами, йее

Вкратце (нет):
#embed - это новая директива препроцессора, позволяющая НОРМАЛЬНО добавлять бинарные файлы в ваш исходный код (пока что на языке Си, но в C++ оно тоже скоро просочится). Если вы используете какие-то бинарные данные типа картинок, сырых двоичных ключей, гуидов, и пр., то эта фича для вас, и это то, что вы ждали 10 лет в Азкабане 40+ лет с момента создания сишки!

Пример кода:
// firmware_sound.c
const char wave_buf[] =
#embed "notification.wav"
; // добавим бинарный файл сразу в прошивку


Текущие подходы состоят из лютых костылей типа скриптов, которые печатают бинарь как массив; xxd; bin2c (очень распространен в определенных кругах) и прочие более-менее кривые (или) нет скрипты на ваших любимых языках оболочки типа cmd/bash/fish/python.

Эта бумага пережила 12 ревизий и готовилась примерно 5-6 лет!!! (включая прошлую версию, в которой также был std::embed - consteval-функция, которая делает то же самое, но на этапе компиляции, а не препроцессинга).
Автор потратил кучу нервов и сил (почитать его слезы и посочувствовать можно в его блоге здесь (обзор и бенчмарки - [1]), здесь (подход с языком Circle и бенчмарки - [2]) здесь (заметки для критиков - [3]), здесь (заметка о том, что принято в C23 и будет поэтому в C++26 - [4])). Его долго пинали в комитетах, то говорили, что это будет медленно работать (бенчмарки показали обратное, см. ниже), то говорили, чтобы он придумал "более generic"-подход, в стиле языка Circle, который, грубо говоря, является C++ с возможностью выполнять любой код на этапе компиляции, главное, пометить блок/функцию собачкой (@).

Бенчмарки из статьи [2] выглядят так:

Методология | Время
----------------+--------------
#embed | 17 seconds
std::embed | 16 seconds
#include, |
сгенерированный | 621 seconds
xxd | (КАРЛ!!!!)


Теперь эта фича уже точно будет в Clang 19 (кому не терпится, соберите текущий trunk и радуйтесь), в MSVC есть тикет на добавление, в GCC тоже (для нетерпеливых есть патч в тикете, можете собрать).

Поздравляю автора с этим достижением, и просто убеждаюсь, что в каждом меме есть доля шутки 😢

#длиннопостик #cpp #std_embed #thephd
GitHub ✨ [Sema, Lex, Parse] Preprocessor embed in C and C++ (and Obj-C and Obj-C++ by-proxy) by ThePhD · Pull Request #68620 · llvm/llvm… This pull request implements the entirety of the now-accepted N3017 - Preprocessor Embed and its sister C++ paper p1967. It implements everything in the specification, and includes an implementatio...
  • 🔥 7
  • 👍 5
More from @alexfailschannel
  1. Sep 23, 2026photo post
  2. Sep 16, 2026photo post
  3. Aug 17, 2026photo post
  4. Aug 5, 2026Какой недостаток профессионализма. Все же знают, что нужно - двоих уволить - добавить три…
  5. May 25, 2026Ямайская Сейлор Мун ❤️ ❤️ ❤️
  6. May 24, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →