TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
Alex Fails Some News Channel

13 Jun 2024, 22:13

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

https://github.com/llvm/llvm-project/pull/68620

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

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

Вкратце (нет):
#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
✨ [Sema, Lex, Parse] Preprocessor embed in C and C++ (and Obj-C and Obj-C++ by-proxy) by ThePhD · Pull Request #68620 · llvm/llvm-project
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...

1.5k 7 53 3 11
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов 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