Библиотека С# С++
10.5K subscribers
158 photos
8 videos
179 files
154 links
https://t.me/+WgGTjeH0p1NjMDFi - ссылка на канал
По всем вопросам- @workakkk

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci- C# академия

@pythonlbooks- python книги📚

РКН: clck.ru/3Fmvsw
Download Telegram
🖥 ImGui — библиотека для создания графических пользовательских интерфейсов на C++ с минимальными зависимостями!

🌟 Она основана на парадигме Immediate Mode GUI, обеспечивая высокую производительность и простоту интеграции. Подходит для инструментов разработки, отладочных и визуализационных приложений, в том числе в игровых движках. Библиотека поддерживает множество графических API и платформ, таких как DirectX, OpenGL, Vulkan и другие.

🔐 Лицензия: MIT

🖥 Github

@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 обязателен.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍113🥰1
Magic Enum — элегантная C++17 библиотека для работы с перечислениями, которая добавляет в них магию рефлексии. Без макросов и boilerplate-кода она позволяет легко преобразовывать enum в строки, проверять наличие значений и даже работать с битовыми флагами.

Библиотека сохраняет 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/
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
• Разработка и поддержка сложных интерфейсов встроенных систем

💼 Условия работы:

• Гибкий формат: удалённо или в офисах в Москве, Санкт-Петербурге, Екатеринбурге, Нижнем Новгороде и Минске
• Работа с масштабными проектами в уникальной команде инженеров
• Возможность горизонтального и вертикального карьерного роста

💙 Узнайте больше и откликайтесь на вакансии прямо на сайте!
Please open Telegram to view this post
VIEW IN TELEGRAM
2
This media is not supported in your browser
VIEW IN TELEGRAM
✔️ Крутой тренажёр по Linux-терминалу

Это полноценное TUI-приложение содержит более 70 задачек для обучения основам работы в терминале.

🔛GitHub
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-бита и улучшена защита от отладки для некоторых игр.

🔗 Ссылка - *клик*
3👍2
🔝 В полезную коллекцию добавляем бесплатный курс по современному C++

Углублённое обучение, состоящее из 28 тематических блоков — от базовых концепций до продвинутых приёмов. Материал структурирован от простого к сложному (пример — на скрине).

https://www.learncpp.com/
4🔥3👍1
🔍 JSON Crack — бесплатное и открытое приложение для визуализации данных из JSON!

🌟 Приложение преобразует форматы данных, такие как JSON, YAML, XML, CSV, в интерактивные графики и диаграммы, что упрощает их анализ и понимание. Программа поддерживает множество инструментов для форматирования, преобразования, генерации JSON Schema и экспорта визуализаций в изображения.

🖥 Github

@cpluscsharp
Please open Telegram to view this post
VIEW IN TELEGRAM
3
Media is too big
VIEW IN TELEGRAM
📌Новый прорыв в алгоритмах: найден способ считать кратчайшие пути быстрее Дейкстры

Метод преодоления "барьера сортировки" для задач кратчайшего пути в ориентированных графах.

Группа исследователей из университетов Синьхуа, Стенфорда и Института Макса Планика представили детерминированный алгоритм для решения задачи SSSP в ориентированных графах с неотрицательными вещественными весами, который работает за время, пропорциональное числу ребер, умноженному на логарифмический множитель, который растет медленнее, чем обычный логарифм.

Проблема поиска кратчайшего пути от одной вершины до всех остальных (SSSP) — одна из фундаментальных в теории графов, и её история тянется с 50-х годов прошлого века. Классический алгоритм Дейкстры, в связке с продвинутыми структурами данных, решает эту задачу за время, которое примерно пропорционально сумме числа рёбер и произведения числа вершин на логарифм от их же числа.

Именно этот множитель - число вершин, умноженное на логарифм, долгое время считался теоретическим минимумом, так как в своей основе алгоритм Дейкстры побочно сортирует вершины по расстоянию от источника. Этот предел известен как «барьер сортировки» и казался непреодолимым.
🟡Основная идея работы - гибрид из алгоритма Дейкстры и алгоритма Беллмана-Форда.

Алгоритм Дейкстры на каждом шаге выбирает из "границы" - множества еще не обработанных вершин ту, что находится ближе всего к источнику. Это и создает узкое место, так как размер границы может достигать величины, сопоставимой с общим числом вершин в графе, и на каждом шаге требуется находить минимум.

Алгоритм Беллмана-Форда, в свою очередь, не требует сортировки, но его сложность пропорциональна числу ребер, умноженному на количество шагов, что слишком долго.

🟡Новый подход использует рекурсию.

Вместо того чтобы поддерживать полную отсортированную границу, алгоритм фокусируется на ее сокращении. А если граница слишком велика, то запускается несколько шагов алгоритма Беллмана-Форда из ее вершин.

Это позволяет найти точное расстояние до некоторой части вершин, чьи кратчайшие пути коротки. Длинные же пути должны проходить через одну из "опорных" вершин, которых оказывается значительно меньше, чем вершин в исходной границе. Таким образом, сложная работа концентрируется только на этом небольшом наборе опорных точек.

🟡Принцип "разделяй и властвуй".

Он рекурсивно разбивает задачу на несколько уровней. На каждом уровне применяется вышеописанная техника сокращения границы, что позволяет значительно уменьшить объем работы на каждую вершину, поскольку логарифмический множитель эффективно делится на другой, более медленно растущий логарифмический член.

В итоге, путем подбора внутренних параметров алгоритма, которые являются специфическими функциями от логарифма числа вершин, и достигается итоговая временная сложность, пропорциональная числу ребер, умноженному на этот новый, более медленно растущий логарифмический множитель.

✔️ Зачем это нужно
— Быстрее решаются задачи в навигации, графах дорог, сетях и планировании.
— Доказано, что Дейкстра — не предел, и можно ещё ускорять поиск кратчайших путей.

🟡Arxiv
🟡Видео разбор
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4
🎮 Погружаемся в SQL, с помощью увлекательной аркадной игры

Разработчики замутили настоящий олдскульный
шедевр, который сделает из вас МАСТЕРА баз данных и точно не даст заскучать.

• Проходим уровни, собираем пазлы вместе с уткой DuckDB и прокачиваем SQL на максимум.
• Квесты, задачи, подсказки — всё как в настоящем приключении.
• Работает прямо в браузере и даже на телефоне.

Любые запросы к базам — щёлкаем как семечки 👉 https://dbquacks.com/.
👍32🗿1
🔥 Хотите разобраться в ASP.NET Core на практике?

Репозиторий — это более 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) — ручная обработка ошибок → множество 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
👍123🤯1
This media is not supported in your browser
VIEW IN TELEGRAM
🧠 Инструмент визуализации памяти для C++

MV — это инструмент для реального времени, который помогает понять управление памятью в C++. Он визуализирует стек и кучу, что делает его идеальным для изучения таких концепций, как указатели, утечки памяти и управление кучей.

🚀 Основные моменты:
- Визуализация работы указателей и ссылок
- Понимание различий между стеком и кучей
- Выявление и анализ утечек памяти
- Поддержка базовых концепций C++

📌 GitHub: https://github.com/humblepenguinn/mv

#cpp
3👍1
Подход к реализации постоянных параметров шаблонов через библиотеку

Ранее эти параметры шаблонов назывались нетиповыми параметрами шаблонов (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
🖥 Эта статья рассматривает сложные аспекты программирования на C и C++, включая тонкости стандартов, неопределенное поведение и подводные камни, часто встречающиеся в коде!

🌟 Она содержит множество примеров кода и объяснений, которые помогают разработчикам глубже понять внутренние механизмы этих языков и избежать распространенных ошибок.

🔗 Ссылка: *клик*

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🏎️ Сравнение производительности C++20

ComPPare — это инструмент для бенчмаркинга и валидации производительности различных реализаций функций на C++20. Он позволяет сравнивать время выполнения и проверять результаты для разных платформ, таких как CPU, OpenMP и CUDA, что упрощает портирование функций.

🚀 Основные моменты:
- Заголовочный файл, легко интегрируется в проекты.
- Поддержка любых функций, работающих на хосте.
- Подробная информация о времени выполнения и накладных расходах.
- Встроенная проверка ошибок для распространенных типов данных.

📌 GitHub: https://github.com/funglf/ComPPare

#cpp
🔥3👍1
Forwarded from C++ Academy
🔥 Полезный репозиторий, который представляет собой коллекцию популярных заблуждений, ложных утверждений и неправильных представлений о технологиях, которые часто встречаются в программировании и в области разработки программного обеспечения!

🔐 Лицензия: CC0-1.0

🔗 Ссылка: *клик*

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
📬 Как построить лёгкую in-memory шину сообщений на .NET Channels - отличный разбор.

В статье показано, как без внешних брокеров организовать событийную архитектуру внутри приложения, используя System.Threading.Channels. Быстро, минималистично и эффективно.

🔗 Читать здесь: milanjovanovic.tech/blog/lightweight-in-memory-message-bus-using-dotnet-channels

#dotnet #csharp #architecture #messaging #inmemory```
1