🚀 Заблуждение: Dapper не быстрее EF Core на 50%
При запуске реальных бенчмарков в .NET 8 получены следующие результаты:
• Dapper: 2.07 мс
• EF Core: 2.43 мс
Разница составила 0.36 мс, или 14%, а не заявленные 50%.
Хотя Dapper расходует чуть меньше памяти, в 80% проектов это несущественно.
Вывод
Для большинства задач такая разница в производительности не влияет на выбор технологии, поэтому EF Core часто становится основным инструментом работы с данными.
12 причин предпочесть EF Core вместо Dapper:
1. Автоматическое отслеживание изменений сущностей
2. LINQ с проверкой запросов на этапе компиляции
3. Code-first миграции для управления схемой БД
4. Обратное создание моделей из существующих баз данных
5. Навигационные свойства вместо ручных JOIN
6. Eager, lazy и explicit загрузка данных
7. Глобальные фильтры запросов (soft delete, multitenancy)
8. Value conversions для пользовательских типов
9. Встроенные retry-политики для устойчивости подключений
10. Interceptors для аудита и логирования
11. Одна кодовая база для разных СУБД (SQL Server, PostgreSQL, MySQL, Oracle, SQLite и др.)
12. Централизованное управление миграциями для нескольких баз данных
В микробенчмарках EF Core может уступать, но в реальных проектах его возможности экономят разработчикам часы и дни работы.
Что предпочитают разработчики: EF Core или Dapper?
♻️ Репост, чтобы поделиться результатами сравнения производительности!
При запуске реальных бенчмарков в .NET 8 получены следующие результаты:
• Dapper: 2.07 мс
• EF Core: 2.43 мс
Разница составила 0.36 мс, или 14%, а не заявленные 50%.
Хотя Dapper расходует чуть меньше памяти, в 80% проектов это несущественно.
Вывод
Для большинства задач такая разница в производительности не влияет на выбор технологии, поэтому EF Core часто становится основным инструментом работы с данными.
12 причин предпочесть EF Core вместо Dapper:
1. Автоматическое отслеживание изменений сущностей
2. LINQ с проверкой запросов на этапе компиляции
3. Code-first миграции для управления схемой БД
4. Обратное создание моделей из существующих баз данных
5. Навигационные свойства вместо ручных JOIN
6. Eager, lazy и explicit загрузка данных
7. Глобальные фильтры запросов (soft delete, multitenancy)
8. Value conversions для пользовательских типов
9. Встроенные retry-политики для устойчивости подключений
10. Interceptors для аудита и логирования
11. Одна кодовая база для разных СУБД (SQL Server, PostgreSQL, MySQL, Oracle, SQLite и др.)
12. Централизованное управление миграциями для нескольких баз данных
В микробенчмарках EF Core может уступать, но в реальных проектах его возможности экономят разработчикам часы и дни работы.
Что предпочитают разработчики: EF Core или Dapper?
♻️ Репост, чтобы поделиться результатами сравнения производительности!
❤5👍4👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Полнзный проктитах: переиспользуемый пайплайн деплоя, написанный на C#, который может взять любой проект на Aspire и задеплоить его на виртуальную машину через SSH и Docker.
Особенности:
➟ Использование C# >>>> shell-скрипты, вперемешку с YAML
➟ Код пайплайна работает поверх модели. Один и тот же код подходит для любого Aspire-приложения без изменений. Это динамический шаблон пайплайна.
➟ Может запускаться локально или в CI
➟ Построено на новых API, которые появятся в Aspire 9.4 (ты тоже можешь собрать свой пайплайн и задеплоить куда угодно!)
https://github.com/davidfowl/AspirePipelines
Особенности:
➟ Использование C# >>>> shell-скрипты, вперемешку с YAML
➟ Код пайплайна работает поверх модели. Один и тот же код подходит для любого Aspire-приложения без изменений. Это динамический шаблон пайплайна.
➟ Может запускаться локально или в CI
➟ Построено на новых API, которые появятся в Aspire 9.4 (ты тоже можешь собрать свой пайплайн и задеплоить куда угодно!)
https://github.com/davidfowl/AspirePipelines
❤3👍2👎1🔥1🗿1
🔐 Блог DevelopersVoice выпустил отличный гайд по **10 главным уязвимостям веб‑приложений с примерами на .NET.
Что внутри:
• Инъекции и XSS
• Ошибки аутентификации
• Уязвимые зависимости
• SSRF и плохая конфигурация
• Проблемы с логированием и безопасным дизайном
📌 Всё с практическими советами: как обнаружить, как исправить, как не допустить.
Полный гайд тут: https://developersvoice.com/blog/secure-coding/owasp-top-ten
#OWASP #SecureCoding #DotNet #WebSecurity #DevTips
Что внутри:
• Инъекции и XSS
• Ошибки аутентификации
• Уязвимые зависимости
• SSRF и плохая конфигурация
• Проблемы с логированием и безопасным дизайном
📌 Всё с практическими советами: как обнаружить, как исправить, как не допустить.
Полный гайд тут: https://developersvoice.com/blog/secure-coding/owasp-top-ten
#OWASP #SecureCoding #DotNet #WebSecurity #DevTips
❤3
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥1
Почти каждый С# разработчик допускал эту ошибку.
Что не так с этим кодом?
На первый взгляд всё кажется логичным:
🔸 API-эндпоинт регистрации пользователя вызывает UserService
🔸 UserService сохраняет пользователя в базу и вызывает EmailService
🔸 EmailService через SmtpClient отправляет письмо
Но если присмотреться, метод SendWelcomeEmail объявлен как async void.
В чём проблема с async void?
Вот суть:
❌ async void делает невозможным отлов исключений.
Если внутри SendEmailAsync() произойдёт исключение — catch его не перехватит.
Вместо этого приложение может тихо упасть или начать вести себя непредсказуемо.
Почему так происходит?
Методы async void не возвращают Task, поэтому вызывающий код не может их await-ить и обрабатывать ошибки.
Исключения из async void проходят мимо стандартных механизмов обработки.
Правильный подход:
✅ Всегда возвращай Task
Запомни: async void допустим только для обработчиков событий, где возвращаемый void обязателен.
Что не так с этим кодом?
На первый взгляд всё кажется логичным:
Но если присмотреться, метод SendWelcomeEmail объявлен как async void.
В чём проблема с async void?
Вот суть:
Если внутри SendEmailAsync() произойдёт исключение — catch его не перехватит.
Вместо этого приложение может тихо упасть или начать вести себя непредсказуемо.
Почему так происходит?
Методы async void не возвращают Task, поэтому вызывающий код не может их await-ить и обрабатывать ошибки.
Исключения из async void проходят мимо стандартных механизмов обработки.
Правильный подход:
Запомни: async void допустим только для обработчиков событий, где возвращаемый void обязателен.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🥰1
✨ Magic Enum — элегантная C++17 библиотека для работы с перечислениями, которая добавляет в них магию рефлексии. Без макросов и boilerplate-кода она позволяет легко преобразовывать enum в строки, проверять наличие значений и даже работать с битовыми флагами.
Библиотека сохраняет constexpr-контекст и поддерживает даже такие экзотические операции, как склейку enum-ов для многоуровневых switch-блоков. Хотя проект заточен под компактные перечисления, его уже используют в продакшене, например, для сериализации или валидации конфигов.
🤖 GitHub
Библиотека сохраняет constexpr-контекст и поддерживает даже такие экзотические операции, как склейку enum-ов для многоуровневых switch-блоков. Хотя проект заточен под компактные перечисления, его уже используют в продакшене, например, для сериализации или валидации конфигов.
🤖 GitHub
❤4🔥1
🧨 Address Sanitizer в Visual Studio 2022
«Опять segfault в продакшене из-за memory corruption... А ведь код проходил все тесты!»
💡 Microsoft выпустила обновление Address Sanitizer для Visual Studio 2022 версии 17.14 с фокусом на качество и внедрение ASan в собственный toolchain.
❗ Ключевые улучшения версии:
• расширенная поддержка __asan_default_options для secure приложений
• автоматизированное тестирование совместимости с Xbox OS
• исправление регрессии отображения call stack на x64
• возможность отключения container annotations по allocator
Самое интересное — Microsoft теперь использует ASan для тестирования самого MSVC компилятора. Каждый PR должен проходить тесты, где компилятор собран с /fsanitize=address😼
Это означает, что ASan теперь мониторит не только вашу программу, но и сам процесс компиляции, выявляя memory safety ошибки в toolchain.
https://devblogs.microsoft.com/cppblog/address-sanitizer-updates-for-visual-studio-2022-17-14/
«Опять segfault в продакшене из-за memory corruption... А ведь код проходил все тесты!»
💡 Microsoft выпустила обновление Address Sanitizer для Visual Studio 2022 версии 17.14 с фокусом на качество и внедрение ASan в собственный toolchain.
❗ Ключевые улучшения версии:
• расширенная поддержка __asan_default_options для secure приложений
• автоматизированное тестирование совместимости с Xbox OS
• исправление регрессии отображения call stack на x64
• возможность отключения container annotations по allocator
Самое интересное — Microsoft теперь использует ASan для тестирования самого MSVC компилятора. Каждый PR должен проходить тесты, где компилятор собран с /fsanitize=address😼
Это означает, что ASan теперь мониторит не только вашу программу, но и сам процесс компиляции, выявляя memory safety ошибки в toolchain.
https://devblogs.microsoft.com/cppblog/address-sanitizer-updates-for-visual-studio-2022-17-14/
❤2👍1🔥1
Media is too big
VIEW IN TELEGRAM
🚀 YADRO приглашает C++ разработчиков в команду OpenBMC и встроенных систем!
Если вы хотите создавать сложное программное обеспечение для серверов и систем хранения данных, работать с передовыми технологиями Linux и участвовать в проектах open source, то эта возможность для вас.
📌 Кого мы ищем:
• Ведущего разработчика C++ (Linux/OpenBMC)
• Ведущего разработчика интерфейсов встроенных систем
• TeamLead разработки OpenBMC
🧰 Технологический стек и задачи:
• C++ (стандарты 17, 20, 23), STL, Boost
• Linux-среда, systemd, D-Bus, Yocto, bash, Python
• Работа с ядром прошивки OpenBMC, взаимодействие с UEFI/BIOS
• Разработка и поддержка сложных интерфейсов встроенных систем
💼 Условия работы:
• Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске
• Работа с масштабными проектами в уникальной команде инженеров
• Возможность горизонтального и вертикального карьерного роста
💙 Узнайте больше и откликайтесь на вакансии прямо на сайте!
Если вы хотите создавать сложное программное обеспечение для серверов и систем хранения данных, работать с передовыми технологиями Linux и участвовать в проектах open source, то эта возможность для вас.
📌 Кого мы ищем:
• Ведущего разработчика C++ (Linux/OpenBMC)
• Ведущего разработчика интерфейсов встроенных систем
• TeamLead разработки OpenBMC
🧰 Технологический стек и задачи:
• C++ (стандарты 17, 20, 23), STL, Boost
• Linux-среда, systemd, D-Bus, Yocto, bash, Python
• Работа с ядром прошивки OpenBMC, взаимодействие с UEFI/BIOS
• Разработка и поддержка сложных интерфейсов встроенных систем
💼 Условия работы:
• Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске
• Работа с масштабными проектами в уникальной команде инженеров
• Возможность горизонтального и вертикального карьерного роста
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Это полноценное TUI-приложение содержит более 70 задачек для обучения основам работы в терминале.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
🖥️ Вышел FEX 2508 — новый эмулятор x86 для ARM-чипов. Проект FEX представил обновлённую версию эмулятора, который позволяет запускать x86-приложения и игры на устройствах с ARM64, включая Mac на Apple Silicon. Технология использует JIT-компиляцию и overlay-образы rootfs для совместимости без полного chroot.
В этом релизе — серьёзный прирост производительности: например, Cyberpunk 2077 теперь работает на 38,9% быстрее. Также добавлена поддержка NX-бита и улучшена защита от отладки для некоторых игр.
🔗 Ссылка - *клик*
В этом релизе — серьёзный прирост производительности: например, Cyberpunk 2077 теперь работает на 38,9% быстрее. Также добавлена поддержка NX-бита и улучшена защита от отладки для некоторых игр.
🔗 Ссылка - *клик*
❤3👍2
🔝 В полезную коллекцию добавляем бесплатный курс по современному C++
Углублённое обучение, состоящее из 28 тематических блоков — от базовых концепций до продвинутых приёмов. Материал структурирован от простого к сложному (пример — на скрине).
https://www.learncpp.com/
Углублённое обучение, состоящее из 28 тематических блоков — от базовых концепций до продвинутых приёмов. Материал структурирован от простого к сложному (пример — на скрине).
https://www.learncpp.com/
❤4🔥3👍1
@cpluscsharp
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Media is too big
VIEW IN TELEGRAM
Метод преодоления "барьера сортировки" для задач кратчайшего пути в ориентированных графах.
Группа исследователей из университетов Синьхуа, Стенфорда и Института Макса Планика представили детерминированный алгоритм для решения задачи SSSP в ориентированных графах с неотрицательными вещественными весами, который работает за время, пропорциональное числу ребер, умноженному на логарифмический множитель, который растет медленнее, чем обычный логарифм.
Проблема поиска кратчайшего пути от одной вершины до всех остальных (SSSP) — одна из фундаментальных в теории графов, и её история тянется с 50-х годов прошлого века. Классический алгоритм Дейкстры, в связке с продвинутыми структурами данных, решает эту задачу за время, которое примерно пропорционально сумме числа рёбер и произведения числа вершин на логарифм от их же числа.
Именно этот множитель - число вершин, умноженное на логарифм, долгое время считался теоретическим минимумом, так как в своей основе алгоритм Дейкстры побочно сортирует вершины по расстоянию от источника. Этот предел известен как «барьер сортировки» и казался непреодолимым.
Алгоритм Дейкстры на каждом шаге выбирает из "границы" - множества еще не обработанных вершин ту, что находится ближе всего к источнику. Это и создает узкое место, так как размер границы может достигать величины, сопоставимой с общим числом вершин в графе, и на каждом шаге требуется находить минимум.
Алгоритм Беллмана-Форда, в свою очередь, не требует сортировки, но его сложность пропорциональна числу ребер, умноженному на количество шагов, что слишком долго.
Вместо того чтобы поддерживать полную отсортированную границу, алгоритм фокусируется на ее сокращении. А если граница слишком велика, то запускается несколько шагов алгоритма Беллмана-Форда из ее вершин.
Это позволяет найти точное расстояние до некоторой части вершин, чьи кратчайшие пути коротки. Длинные же пути должны проходить через одну из "опорных" вершин, которых оказывается значительно меньше, чем вершин в исходной границе. Таким образом, сложная работа концентрируется только на этом небольшом наборе опорных точек.
Он рекурсивно разбивает задачу на несколько уровней. На каждом уровне применяется вышеописанная техника сокращения границы, что позволяет значительно уменьшить объем работы на каждую вершину, поскольку логарифмический множитель эффективно делится на другой, более медленно растущий логарифмический член.
В итоге, путем подбора внутренних параметров алгоритма, которые являются специфическими функциями от логарифма числа вершин, и достигается итоговая временная сложность, пропорциональная числу ребер, умноженному на этот новый, более медленно растущий логарифмический множитель.
— Быстрее решаются задачи в навигации, графах дорог, сетях и планировании.
— Доказано, что Дейкстра — не предел, и можно ещё ускорять поиск кратчайших путей.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍4
🎮 Погружаемся в SQL, с помощью увлекательной аркадной игры
Разработчики замутили настоящий олдскульный шедевр, который сделает из вас МАСТЕРА баз данных и точно не даст заскучать.
• Проходим уровни, собираем пазлы вместе с уткой DuckDB и прокачиваем SQL на максимум.
• Квесты, задачи, подсказки — всё как в настоящем приключении.
• Работает прямо в браузере и даже на телефоне.
Любые запросы к базам — щёлкаем как семечки 👉 https://dbquacks.com/.
Разработчики замутили настоящий олдскульный шедевр, который сделает из вас МАСТЕРА баз данных и точно не даст заскучать.
• Проходим уровни, собираем пазлы вместе с уткой DuckDB и прокачиваем SQL на максимум.
• Квесты, задачи, подсказки — всё как в настоящем приключении.
• Работает прямо в браузере и даже на телефоне.
Любые запросы к базам — щёлкаем как семечки 👉 https://dbquacks.com/.
👍3❤2🗿1
🔥 Хотите разобраться в ASP.NET Core на практике?
Репозиторий — это более 400+ римеров для всех версий ASP.NET Core (от 2.1 до 10 Preview).
Что внутри:
- Minimal API, Blazor, SignalR, gRPC
- Аутентификация, кэширование, health-checks
- Middleware, Razor Pages, HTMX и многое другое
Каждый пример запускается командой
⭐ Репо собрало уже 10k+ звёзд и считается одним из лучших ресурсов для изучения ASP.NET Core.
📌 Github
Репозиторий — это более 400+ римеров для всех версий ASP.NET Core (от 2.1 до 10 Preview).
Что внутри:
- Minimal API, Blazor, SignalR, gRPC
- Аутентификация, кэширование, health-checks
- Middleware, Razor Pages, HTMX и многое другое
Каждый пример запускается командой
dotnet watch run
и демонстрирует отдельную фичу. ⭐ Репо собрало уже 10k+ звёзд и считается одним из лучших ресурсов для изучения ASP.NET Core.
📌 Github
❤5🔥2👍1🥰1🥱1👀1
Forwarded from DevOps
Какой язык программирования имеет самый запутанный код? 🤔
Команда TIOBE проанализировала более 8 000 коммерческих проектов и 1,5 млрд строк кода, чтобы выяснить, где цикломатическая сложность (количество возможных путей выполнения функции) выше всего.
📊 Вот результаты:
1️⃣ MATLAB (6.03 пути/функция) — часто используется учёными и инженерами-доменщиками, а не разработчиками, поэтому код выходит менее структурированным.
2️⃣ C (5.74) — ручная обработка ошибок → множество
3️⃣ JavaScript (3.50) — быстрая разработка, постоянно меняющиеся требования и разный уровень фронтенд-разработчиков.
4️⃣ Go (3.39) — идиоматический паттерн обработки ошибок с множеством явных проверок.
5️⃣ Python (2.71) и TypeScript (2.51) — средняя сложность, отражающая гибкий синтаксис и широкий спектр применения.
6️⃣ C++ (2.45), Java (2.24), C# (2.08) — сравнительно ниже благодаря зрелым фичам и структурированным практикам.
7️⃣ Rust (1.32) — самая низкая сложность, подчёркивающая потенциал безопасных и простых решений.
📝 Итог: на сложность влияет не только сам язык, но и опыт разработчиков, культура кодинга и подходы к обработке ошибок.
📌 Подробности
#программирование #разработка #код #softwareengineering
Команда TIOBE проанализировала более 8 000 коммерческих проектов и 1,5 млрд строк кода, чтобы выяснить, где цикломатическая сложность (количество возможных путей выполнения функции) выше всего.
📊 Вот результаты:
1️⃣ MATLAB (6.03 пути/функция) — часто используется учёными и инженерами-доменщиками, а не разработчиками, поэтому код выходит менее структурированным.
2️⃣ C (5.74) — ручная обработка ошибок → множество
if/else
и условий. 3️⃣ JavaScript (3.50) — быстрая разработка, постоянно меняющиеся требования и разный уровень фронтенд-разработчиков.
4️⃣ Go (3.39) — идиоматический паттерн обработки ошибок с множеством явных проверок.
5️⃣ Python (2.71) и TypeScript (2.51) — средняя сложность, отражающая гибкий синтаксис и широкий спектр применения.
6️⃣ C++ (2.45), Java (2.24), C# (2.08) — сравнительно ниже благодаря зрелым фичам и структурированным практикам.
7️⃣ Rust (1.32) — самая низкая сложность, подчёркивающая потенциал безопасных и простых решений.
📝 Итог: на сложность влияет не только сам язык, но и опыт разработчиков, культура кодинга и подходы к обработке ошибок.
📌 Подробности
#программирование #разработка #код #softwareengineering
❤7
уникальных идентификаторов
Многие разработчики используют UUID (или Guid в C#) как уникальные ключи в базе данных.
📌 Проблема старых UUID:
- 🔀 они «случайные» — удобно для распределённых систем, но…
- 🧱 занимают 16 байт → таблицы и индексы раздуваются
- 📉 вызывают фрагментацию индексов, ведь данные неупорядоченные
⚡ Решение — UUID V7
- содержит компонент времени, поэтому значения сортируются
- 👉 работает быстрее с индексами
- 🔧 в .NET 9 можно создать через Guid.CreateVersion7()
- 🐘 поддержка появится в Postgres 18
Вопрос: а вы бы стали использовать UUID V7 в своих проектах?
#dotnet #postgres #uuid #database
Многие разработчики используют UUID (или Guid в C#) как уникальные ключи в базе данных.
📌 Проблема старых UUID:
- 🔀 они «случайные» — удобно для распределённых систем, но…
- 🧱 занимают 16 байт → таблицы и индексы раздуваются
- 📉 вызывают фрагментацию индексов, ведь данные неупорядоченные
⚡ Решение — UUID V7
- содержит компонент времени, поэтому значения сортируются
- 👉 работает быстрее с индексами
- 🔧 в .NET 9 можно создать через Guid.CreateVersion7()
- 🐘 поддержка появится в Postgres 18
Вопрос: а вы бы стали использовать UUID V7 в своих проектах?
#dotnet #postgres #uuid #database
👍12❤3🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Инструмент визуализации памяти для C++
MV — это инструмент для реального времени, который помогает понять управление памятью в C++. Он визуализирует стек и кучу, что делает его идеальным для изучения таких концепций, как указатели, утечки памяти и управление кучей.
🚀 Основные моменты:
- Визуализация работы указателей и ссылок
- Понимание различий между стеком и кучей
- Выявление и анализ утечек памяти
- Поддержка базовых концепций C++
📌 GitHub: https://github.com/humblepenguinn/mv
#cpp
MV — это инструмент для реального времени, который помогает понять управление памятью в C++. Он визуализирует стек и кучу, что делает его идеальным для изучения таких концепций, как указатели, утечки памяти и управление кучей.
🚀 Основные моменты:
- Визуализация работы указателей и ссылок
- Понимание различий между стеком и кучей
- Выявление и анализ утечек памяти
- Поддержка базовых концепций C++
📌 GitHub: https://github.com/humblepenguinn/mv
#cpp
❤3👍1
Подход к реализации постоянных параметров шаблонов через библиотеку
Этот блогпост стал продолжением моей работы с Ричардом Смитом (P2484), за которым последовала ещё одна статья по теме (P3380). И статья, и доклад основывались на блестящей идее Файсала Вали: рефлексия может предложить интересное решение задачи сериализации, ведь
На встрече в Софии все документы, касающиеся рефлексии, были включены в рабочий проект стандарта C++26, и для меня это очень воодушевляюще — видеть формулировки прямо в черновике (например, meta.reflection).
Однако моё решение по расширению поддержки постоянных параметров шаблонов в C++26 не войдёт. Как и решение проблемы non-transient constexpr allocation. Так что ограничения на типы, которые можно использовать в качестве постоянных параметров шаблонов, сохранятся ещё на один цикл.
А может… и нет?
https://brevzin.github.io/c++/2025/08/02/ctp-reflection/
#cpp #programming
Ранее эти параметры шаблонов назывались нетиповыми параметрами шаблонов (non-type template parameters). Но с момента появления C++98 у нас всегда было три вида параметров шаблонов:
- типовые параметры (type template parameters)
- нетиповые параметры (non-type template parameters)
- шаблонные параметры-шаблоны (template template parameters)
Когда категорий всего две, можно называть их «X» и «не-X» (например, статические и нестатические методы). Но когда категорий три — это уже неудобно. А в C++26 таких категорий уже пять (добавились параметры переменных шаблонов и параметры концептов), и выходит, что почти все, кроме типовых, попадают под «нетиповые» — что нелогично. Поэтому старый термин заменили на гораздо более удачный: constant template parameter (постоянный параметр шаблона).
Этот блогпост стал продолжением моей работы с Ричардом Смитом (P2484), за которым последовала ещё одна статья по теме (P3380). И статья, и доклад основывались на блестящей идее Файсала Вали: рефлексия может предложить интересное решение задачи сериализации, ведь
std::meta::info
способен представлять что угодно.На встрече в Софии все документы, касающиеся рефлексии, были включены в рабочий проект стандарта C++26, и для меня это очень воодушевляюще — видеть формулировки прямо в черновике (например, meta.reflection).
Однако моё решение по расширению поддержки постоянных параметров шаблонов в C++26 не войдёт. Как и решение проблемы non-transient constexpr allocation. Так что ограничения на типы, которые можно использовать в качестве постоянных параметров шаблонов, сохранятся ещё на один цикл.
А может… и нет?
https://brevzin.github.io/c++/2025/08/02/ctp-reflection/
#cpp #programming
❤3🔥1