⚡️ Статья Джоша Карателли "The forgotten art of Struct Packing in C/C++" посвящена оптимизации структуры данных в языках программирования C и C++ путём правильного упорядочивания членов структур для минимизации их размера.
Josh Caratelli - Game Programmer
Основные моменты статьи:
Проблема выравнивания и паддинга: Компьютеры читают и записывают данные из памяти блоками определённого размера (например, 16 байт). Чтобы обеспечить корректный доступ к данным, компиляторы автоматически добавляют дополнительные байты (паддинг) для выравнивания данных. Это может привести к тому, что структуры занимают больше памяти, чем необходимо.
Josh Caratelli - Game Programmer
Оптимизация порядка членов структуры: Располагая члены структуры от наибольшего к наименьшему по размеру, можно уменьшить или устранить паддинг. Поскольку структура выравнивается по размеру её самого большого члена, такое упорядочивание помогает минимизировать общий размер структуры.
Josh Caratelli - Game Programmer
Практический пример: Два примера структур с одинаковыми членами, но разным порядком их расположения, демонстрируют, что правильное упорядочивание может уменьшить размер структуры на 8 байт.
Josh Caratelli - Game Programmer
Инструменты для анализа паддинга: Для просмотра добавленного компилятором паддинга можно использовать опцию командной строки /d1reportSingleClassLayoutXXX в Visual Studio, где XXX — имя вашей структуры.
Josh Caratelli - Game Programmer
Предостережения: Хотя упаковка структур может сэкономить память, иногда небольшое увеличение размера структуры оправдано, если это улучшает производительность во время выполнения программы. Например, часто используемые члены структуры можно разместить в начале для ускорения доступа к ним.
Josh Caratelli - Game Programmer
Джош подчёркивает, что, хотя такие микрооптимизации полезны, приоритет следует отдавать разработке эффективных алгоритмов. Он также отмечает, что данная тема часто упускается из виду в курсах компьютерных наук, и призывает разработчиков учитывать её в своей практике.
🔗 Читать
@cpluscsharp
Josh Caratelli - Game Programmer
Основные моменты статьи:
Проблема выравнивания и паддинга: Компьютеры читают и записывают данные из памяти блоками определённого размера (например, 16 байт). Чтобы обеспечить корректный доступ к данным, компиляторы автоматически добавляют дополнительные байты (паддинг) для выравнивания данных. Это может привести к тому, что структуры занимают больше памяти, чем необходимо.
Josh Caratelli - Game Programmer
Оптимизация порядка членов структуры: Располагая члены структуры от наибольшего к наименьшему по размеру, можно уменьшить или устранить паддинг. Поскольку структура выравнивается по размеру её самого большого члена, такое упорядочивание помогает минимизировать общий размер структуры.
Josh Caratelli - Game Programmer
Практический пример: Два примера структур с одинаковыми членами, но разным порядком их расположения, демонстрируют, что правильное упорядочивание может уменьшить размер структуры на 8 байт.
Josh Caratelli - Game Programmer
Инструменты для анализа паддинга: Для просмотра добавленного компилятором паддинга можно использовать опцию командной строки /d1reportSingleClassLayoutXXX в Visual Studio, где XXX — имя вашей структуры.
Josh Caratelli - Game Programmer
Предостережения: Хотя упаковка структур может сэкономить память, иногда небольшое увеличение размера структуры оправдано, если это улучшает производительность во время выполнения программы. Например, часто используемые члены структуры можно разместить в начале для ускорения доступа к ним.
Josh Caratelli - Game Programmer
Джош подчёркивает, что, хотя такие микрооптимизации полезны, приоритет следует отдавать разработке эффективных алгоритмов. Он также отмечает, что данная тема часто упускается из виду в курсах компьютерных наук, и призывает разработчиков учитывать её в своей практике.
🔗 Читать
@cpluscsharp
👍4🔥4
🚀 .NET 10 Preview 3 уже доступен!
Новая версия приносит мощное обновление для C# — Extension Members:
💡 Теперь можно добавлять в static class расширения не только методов, но и:
▪ 🔹 Статические методы
▪ 🔹 Инстанс-свойства
▪ 🔹 Статические свойства
📦 Это значит, что вы можете "расширять" поведение типов не только логикой, но и дополнительными данными и даже стейтфул-логикой (через свойства).
И всё это — без изменения исходного класса.
🔗 Подробнее:
https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview3/csharp.md#extension-members
#dotnet #csharp #dotnet10 #devtools #preview
@csharp_ci
Новая версия приносит мощное обновление для C# — Extension Members:
💡 Теперь можно добавлять в static class расширения не только методов, но и:
▪ 🔹 Статические методы
▪ 🔹 Инстанс-свойства
▪ 🔹 Статические свойства
📦 Это значит, что вы можете "расширять" поведение типов не только логикой, но и дополнительными данными и даже стейтфул-логикой (через свойства).
И всё это — без изменения исходного класса.
🔗 Подробнее:
https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview3/csharp.md#extension-members
#dotnet #csharp #dotnet10 #devtools #preview
@csharp_ci
❤6👍3
📖 asmbook — мягкое введение в программирование на ассемблере для ARM. Для разработчиков, пишущих на C/C++, но желающих разобраться в низкоуровневых особенностях процессоров, проект предлагает практическое руководство по ассемблеру ARMv8.
В руководстве есть множество практических примеров: от работы с базовыми командами до анимации частиц в терминале. Проект подойдёт как для самостоятельного изучения, так и для академических курсов по компьютерной архитектуре.
🔗 GitHub
@cpluspluc
В руководстве есть множество практических примеров: от работы с базовыми командами до анимации частиц в терминале. Проект подойдёт как для самостоятельного изучения, так и для академических курсов по компьютерной архитектуре.
🔗 GitHub
@cpluspluc
❤3👍1🔥1
@cpluscsharp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
🧠 Beej's Guide to Network Programming — легендарный гайд по сокетам на C
Если ты хочешь понять, как работают сети на низком уровне — забудь всё и читай Beej's Guide.
📘 Это бесплатное руководство от Beej (Брайан Холл), которое:
• Объясняет сокеты, TCP, UDP, IPv4/IPv6
• Работает под Linux и Windows
• Написано на чистом C
• Покрывает всё: от
• С нуля до уверенного уровня
🔥 Почему это круто:
- Простой и разговорный стиль
- Куча кода и реальных примеров
- Бесплатно и с открытой лицензией (CC)
- Один из самых уважаемых туториалов среди C-программистов
📎 Читай тут
Подходит всем, кто хочет научиться писать сетевые приложения руками, а не кнопками.
#CProgramming #SocketProgramming #NetworkProgramming #BeejGuide #LinuxNetworking #TCP #UDP #Coding
Если ты хочешь понять, как работают сети на низком уровне — забудь всё и читай Beej's Guide.
📘 Это бесплатное руководство от Beej (Брайан Холл), которое:
• Объясняет сокеты, TCP, UDP, IPv4/IPv6
• Работает под Linux и Windows
• Написано на чистом C
• Покрывает всё: от
socket()
до select()
и recvfrom()
• С нуля до уверенного уровня
🔥 Почему это круто:
- Простой и разговорный стиль
- Куча кода и реальных примеров
- Бесплатно и с открытой лицензией (CC)
- Один из самых уважаемых туториалов среди C-программистов
📎 Читай тут
Подходит всем, кто хочет научиться писать сетевые приложения руками, а не кнопками.
#CProgramming #SocketProgramming #NetworkProgramming #BeejGuide #LinuxNetworking #TCP #UDP #Coding
❤2🔥2
🔥 From C# to Rust: 42-дневный челлендж от Chris Woody Woodruff
Chris Woodruff, экспериментающий .NET-разработчик, объявил старт своего 42-дневного пути погружения в Rust — язык системного программирования, совмещающий производительность, безопасность и отсутствие null:contentReference[oaicite:0]{index=0}.
🎯 Цели проекта
- Жить и дышать Rust — по одному уроку в день.
- Противостоять строгому borrow checker.
- Осознанно учиться и делиться выводами от лица C#-разработчика.
🛠 Что ожидается изучить
- Владение памятью, шаблоны, трейты, времена жизни (`lifetimes`).
- Яркие сравнения Rust и C#: синтаксис, ownership vs GC, ошибки компилятора:contentReference[oaicite:2]{index=2}.
- Краткие ежедневные отражения из .NET-мира.
📅 Примерный план на 42 дня
1. День 1–7: Почему Rust? Установка, cargo new vs dotnet new, "Hello, World!", переменные, функции:contentReference[oaicite:4]{index=4}.
2. День 8–14: Неделя владения — темы: ownership, borrowing, borrow checker:contentReference[oaicite:5]{index=5}.
3. День 15–42: Структуры, перечисления (`enum`), match, Option<T>, Result<T, E>, модули, ошибки, трейты, дженерики, лямбды и многое другое.
💬 Голос из сообщества
> «What happens when a C# dev swaps null for Option, garbage collection for ownership… You get 42 days of brain‑bending, compiler‑fighting…»
✨ Подытожим
- Проект идёт с апреля 2025 года, уже опубликованы десятки дневных эссе.
- Каждая запись по мотивам реального опыта: «why won’t this compile?!», сравнения с привычным C#.
- В финале — обзор полученного опыта, личные инсайты и примеры рабочего CLI‑приложения на Rust:contentReference[oaicite:8]{index=8}.
🚀 Готовы бросить вызов себе и глубже понять Rust?
Следите за дневником Woody и за входом в мир безопасных без‑GC систем прямо с .NET-опытов!
🔗 Подробнее: From C# to Rust: A 42-Day Developer Challenge
https://woodruff.dev/from-c-to-rust-a-42-day-developer-challenge/
Chris Woodruff, экспериментающий .NET-разработчик, объявил старт своего 42-дневного пути погружения в Rust — язык системного программирования, совмещающий производительность, безопасность и отсутствие null:contentReference[oaicite:0]{index=0}.
🎯 Цели проекта
- Жить и дышать Rust — по одному уроку в день.
- Противостоять строгому borrow checker.
- Осознанно учиться и делиться выводами от лица C#-разработчика.
🛠 Что ожидается изучить
- Владение памятью, шаблоны, трейты, времена жизни (`lifetimes`).
- Яркие сравнения Rust и C#: синтаксис, ownership vs GC, ошибки компилятора:contentReference[oaicite:2]{index=2}.
- Краткие ежедневные отражения из .NET-мира.
📅 Примерный план на 42 дня
1. День 1–7: Почему Rust? Установка, cargo new vs dotnet new, "Hello, World!", переменные, функции:contentReference[oaicite:4]{index=4}.
2. День 8–14: Неделя владения — темы: ownership, borrowing, borrow checker:contentReference[oaicite:5]{index=5}.
3. День 15–42: Структуры, перечисления (`enum`), match, Option<T>, Result<T, E>, модули, ошибки, трейты, дженерики, лямбды и многое другое.
💬 Голос из сообщества
> «What happens when a C# dev swaps null for Option, garbage collection for ownership… You get 42 days of brain‑bending, compiler‑fighting…»
✨ Подытожим
- Проект идёт с апреля 2025 года, уже опубликованы десятки дневных эссе.
- Каждая запись по мотивам реального опыта: «why won’t this compile?!», сравнения с привычным C#.
- В финале — обзор полученного опыта, личные инсайты и примеры рабочего CLI‑приложения на Rust:contentReference[oaicite:8]{index=8}.
🚀 Готовы бросить вызов себе и глубже понять Rust?
Следите за дневником Woody и за входом в мир безопасных без‑GC систем прямо с .NET-опытов!
🔗 Подробнее: From C# to Rust: A 42-Day Developer Challenge
https://woodruff.dev/from-c-to-rust-a-42-day-developer-challenge/
❤7👍2
📘 Combining .NET Aspire with Temporal – часть 1
💡 В блоге Rebecca Powell на aspireify.NET описан старт серии статей о том, как интегрировать .NET Aspire с системой оркестрации Temporal :contentReference[oaicite:0]{index=0}.
🔍 Что в выпуске:
- An introduction to combining .NET Aspire apps with Temporal workflows
- Демонстрация того, как добавление Temporal упрощает надёжную обработку задач с состоянием и повторениями
- Подробный пример начала покрытия процессов с помощью Temporal SDK для .NET
📈 Почему это важно:
- Temporal помогает строить устойчивые распределённые системы с автоматическим управлением retries, временными метками и дедлайнами
- Интеграция с .NET Aspire — отличная основа для создания масштабируемых и отказоустойчивых приложений
➡️ Это только часть 1 — в следующих публикациях ожидаются глубже пример кода, best practices и кейсы. Отличный старт для разработчиков на .NET, интересующихся workflow-автоматизацией.
👉 Читать полностью
#dotnet #Aspire #Temporal #workflow #softwareengineering #rebeccapowell
💡 В блоге Rebecca Powell на aspireify.NET описан старт серии статей о том, как интегрировать .NET Aspire с системой оркестрации Temporal :contentReference[oaicite:0]{index=0}.
🔍 Что в выпуске:
- An introduction to combining .NET Aspire apps with Temporal workflows
- Демонстрация того, как добавление Temporal упрощает надёжную обработку задач с состоянием и повторениями
- Подробный пример начала покрытия процессов с помощью Temporal SDK для .NET
📈 Почему это важно:
- Temporal помогает строить устойчивые распределённые системы с автоматическим управлением retries, временными метками и дедлайнами
- Интеграция с .NET Aspire — отличная основа для создания масштабируемых и отказоустойчивых приложений
➡️ Это только часть 1 — в следующих публикациях ожидаются глубже пример кода, best practices и кейсы. Отличный старт для разработчиков на .NET, интересующихся workflow-автоматизацией.
👉 Читать полностью
#dotnet #Aspire #Temporal #workflow #softwareengineering #rebeccapowell
❤2👍1
Forwarded from Machinelearning
This media is not supported in your browser
VIEW IN TELEGRAM
📚 ArXiv Research Agent — отличный помощник для научных исследований.
Агент самостоятельно:
• Найдёт релевантные статьи с arXiv, bioRxiv, medRxiv и Semantic Scholar
• Проведёт полноценный обзор и поиск нужных материалов
• Покажет, что упущено, и предложит, что добавить
• Даст инсайты и цитаты из миллионов научных работ
• Генерирует готовые конспекты
И др.
Вскоре обещают добавить поддержку MCP.
🔜 Попробовать: https://www.alphaxiv.org/assistant
@ai_machinelearning_big_data
#agent #ArXiv #ai #ml
Агент самостоятельно:
• Найдёт релевантные статьи с arXiv, bioRxiv, medRxiv и Semantic Scholar
• Проведёт полноценный обзор и поиск нужных материалов
• Покажет, что упущено, и предложит, что добавить
• Даст инсайты и цитаты из миллионов научных работ
• Генерирует готовые конспекты
И др.
Вскоре обещают добавить поддержку MCP.
@ai_machinelearning_big_data
#agent #ArXiv #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7
🚀 Заблуждение: 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
🔐 Блог 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
❤4👍2🔥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