🚀 Высокопроизводительная библиотека интернирования строк на C++
Azrar::StringIndex предлагает эффективный механизм интернирования строк, создавая глобальный словарь уникальных строк. Это значительно ускоряет доступ и сравнение строк, что особенно полезно в приложениях с большим количеством идентичных строк.
🚀 Основные моменты:
- Уменьшает использование памяти за счет хранения строк только один раз.
- Обеспечивает быстрый доступ к строкам через индексы.
- Поддерживает многопоточность для повышения производительности.
- Идеально подходит для приложений, работающих с большими объемами строк.
📌 GitHub: https://github.com/kboutora/Azrar
#cpp
Azrar::StringIndex предлагает эффективный механизм интернирования строк, создавая глобальный словарь уникальных строк. Это значительно ускоряет доступ и сравнение строк, что особенно полезно в приложениях с большим количеством идентичных строк.
🚀 Основные моменты:
- Уменьшает использование памяти за счет хранения строк только один раз.
- Обеспечивает быстрый доступ к строкам через индексы.
- Поддерживает многопоточность для повышения производительности.
- Идеально подходит для приложений, работающих с большими объемами строк.
📌 GitHub: https://github.com/kboutora/Azrar
#cpp
👍5❤🔥1❤1👏1
🌍🚀 Эффективная библиотека для работы с часовыми поясами
vtz предлагает высокую производительность и простой API для обработки временных данных. Она значительно быстрее конкурентов, обеспечивая до 60 раз более быстрые преобразования часовых поясов и парсинг временных меток, что делает её идеальным выбором для приложений с высокими требованиями к скорости и масштабируемости.
🚀Основные моменты:
- 30-60x быстрее преобразования часовых поясов.
- Эффективный алгоритм с блочной таблицей для быстрого поиска.
- Совместимость с
- Оптимизирована для работы с большими объемами данных.
📌 GitHub: https://github.com/voladynamics/vtz
#cpp
vtz предлагает высокую производительность и простой API для обработки временных данных. Она значительно быстрее конкурентов, обеспечивая до 60 раз более быстрые преобразования часовых поясов и парсинг временных меток, что делает её идеальным выбором для приложений с высокими требованиями к скорости и масштабируемости.
🚀Основные моменты:
- 30-60x быстрее преобразования часовых поясов.
- Эффективный алгоритм с блочной таблицей для быстрого поиска.
- Совместимость с
std::chrono::time_zone.- Оптимизирована для работы с большими объемами данных.
📌 GitHub: https://github.com/voladynamics/vtz
#cpp
🔥6👍2
🌟 Быстрая библиотека JSON: Glaze
Glaze — это одна из самых быстрых библиотек для работы с JSON и другими форматами, обеспечивающая высокую производительность и простоту интерфейса. Она поддерживает множество форматов, включая JSON, CBOR, YAML и другие, с акцентом на компиляцию времени и рефлексию.
🚀Основные моменты:
- Поддержка C++23 и C++26 с рефлексией для удобной работы с данными
- Высокая производительность: быстрая сериализация и десериализация
- Заголовочная библиотека без зависимости от RTTI и исключений
- Совместимость с современными компиляторами и стандартами
📌 GitHub: https://github.com/stephenberry/glaze
#cpp
Glaze — это одна из самых быстрых библиотек для работы с JSON и другими форматами, обеспечивающая высокую производительность и простоту интерфейса. Она поддерживает множество форматов, включая JSON, CBOR, YAML и другие, с акцентом на компиляцию времени и рефлексию.
🚀Основные моменты:
- Поддержка C++23 и C++26 с рефлексией для удобной работы с данными
- Высокая производительность: быстрая сериализация и десериализация
- Заголовочная библиотека без зависимости от RTTI и исключений
- Совместимость с современными компиляторами и стандартами
📌 GitHub: https://github.com/stephenberry/glaze
#cpp
❤9👍2
🚀 GSD 2: Новый уровень автоматизации разработки
GSD 2 — это эволюция инструмента Get Shit Done, превращенная в полноценный CLI-агент. Он управляет процессами разработки, обеспечивая контроль контекста, автоматизацию задач и восстановление после сбоев. С GSD 2 вы можете просто запустить команду и вернуться к готовому проекту с чистой историей git.
🚀 Основные моменты:
- Автоматическое управление задачами с чистым контекстом.
- Восстановление после сбоев и отслеживание затрат.
- Программное управление ветками git и диагностика зависаний.
- Интеграция с Pi SDK для прямого доступа к агенту.
- Упрощенная миграция из предыдущей версии.
📌 GitHub: https://github.com/gsd-build/gsd-2
GSD 2 — это эволюция инструмента Get Shit Done, превращенная в полноценный CLI-агент. Он управляет процессами разработки, обеспечивая контроль контекста, автоматизацию задач и восстановление после сбоев. С GSD 2 вы можете просто запустить команду и вернуться к готовому проекту с чистой историей git.
🚀 Основные моменты:
- Автоматическое управление задачами с чистым контекстом.
- Восстановление после сбоев и отслеживание затрат.
- Программное управление ветками git и диагностика зависаний.
- Интеграция с Pi SDK для прямого доступа к агенту.
- Упрощенная миграция из предыдущей версии.
📌 GitHub: https://github.com/gsd-build/gsd-2
❤3👍1
libPhenom
libPhenom — это фреймворк событий, разработанный Facebook для создания высокопроизводительных и масштабируемых систем на C++. Он обеспечивает простой и эффективный способ публикации и подписки на события, а также маршрутизации событий между различными компонентами системы.
#для_продвинутых
libPhenom — это фреймворк событий, разработанный Facebook для создания высокопроизводительных и масштабируемых систем на C++. Он обеспечивает простой и эффективный способ публикации и подписки на события, а также маршрутизации событий между различными компонентами системы.
#для_продвинутых
👍5❤1
🎲 Высокопроизводительная генерация случайных чисел с Zorro
Zorro - это библиотека для генерации случайных чисел на основе xoshiro256++, поддерживающая автоматическую SIMD-диспетчеризацию. Просто добавьте один заголовочный файл в проект и получите доступ к высокопроизводительным генераторам для различных распределений.
🚀Основные моменты:
- Поддержка uniform, normal, exponential и Bernoulli распределений.
- Автоматический выбор SIMD на этапе компиляции.
- Высокая производительность: до 3900 M/s для uniform генерации.
- Легкая интеграция с существующими проектами через один заголовок.
📌 GitHub: https://github.com/bobjansen/Zorro
Zorro - это библиотека для генерации случайных чисел на основе xoshiro256++, поддерживающая автоматическую SIMD-диспетчеризацию. Просто добавьте один заголовочный файл в проект и получите доступ к высокопроизводительным генераторам для различных распределений.
🚀Основные моменты:
- Поддержка uniform, normal, exponential и Bernoulli распределений.
- Автоматический выбор SIMD на этапе компиляции.
- Высокая производительность: до 3900 M/s для uniform генерации.
- Легкая интеграция с существующими проектами через один заголовок.
📌 GitHub: https://github.com/bobjansen/Zorro
❤7👍4🤔1😱1
Компилятор для языка Си, написанный на Shell
Александр Гомес Гайгалас (Alexandre Gomes Gaigalas), автор библиотеки coral для создания переносимых shell-скриптов, опубликовал C89cc.sh, компилятор для языка Си, написанный целиком на Shell. Компилятор поддерживает стандарт C89 и может генерировать исполняемые файлы в формате ELF64 для систем x86-64. Код содержит около восьми тысяч строк и открыт под лицензией ISC.
Подробнее:
https://opennet.ru/65133/
https://opennet.me/65133/
Александр Гомес Гайгалас (Alexandre Gomes Gaigalas), автор библиотеки coral для создания переносимых shell-скриптов, опубликовал C89cc.sh, компилятор для языка Си, написанный целиком на Shell. Компилятор поддерживает стандарт C89 и может генерировать исполняемые файлы в формате ELF64 для систем x86-64. Код содержит около восьми тысяч строк и открыт под лицензией ISC.
Подробнее:
https://opennet.ru/65133/
https://opennet.me/65133/
👀15🔥11❤4🤣3👍1🌚1
ffead-cpp
ffead-cpp — это веб-фреймворк, фреймворк приложений и набор утилит, объединенные в один пакет. Он также предоставляет встроенное ядро сервера, совместимое с HTTP/HTT2/Web-Socket.
#для_продвинутых
ffead-cpp — это веб-фреймворк, фреймворк приложений и набор утилит, объединенные в один пакет. Он также предоставляет встроенное ядро сервера, совместимое с HTTP/HTT2/Web-Socket.
#для_продвинутых
❤14👍1
⚡️ Хочешь собрать GPU с нуля - вот настоящий появился симулятор Mvidia
Нашли для вас сайт, где можно пройти весь путь железа руками. Без теории ради теории, а через интерактив.
• Начинаешь с базы
движение электронов, транзисторы, логика
• Дальше собираешь уровни выше
логические схемы, ALU, простой процессор
• До GPU ещё не дошли
блоки про шейдеры и графику пока в разработке, но фундамент уже есть
На Hacker News проект активно хвалят, особенно за подачу и понятную прогрессию
Хороший способ наконец понять, как всё это реально устроено под капотом, а не на уровне абстракций
Сначала проходишь симулятор потом уже думаешь, как построить Nvidia 2.0
https://jaso1024.com/mvidia/
Нашли для вас сайт, где можно пройти весь путь железа руками. Без теории ради теории, а через интерактив.
• Начинаешь с базы
движение электронов, транзисторы, логика
• Дальше собираешь уровни выше
логические схемы, ALU, простой процессор
• До GPU ещё не дошли
блоки про шейдеры и графику пока в разработке, но фундамент уже есть
На Hacker News проект активно хвалят, особенно за подачу и понятную прогрессию
Хороший способ наконец понять, как всё это реально устроено под капотом, а не на уровне абстракций
Сначала проходишь симулятор потом уже думаешь, как построить Nvidia 2.0
https://jaso1024.com/mvidia/
🔥14❤6👍4
Data-Parallel Types: алгоритмы (C++26)
Библиотека «data-parallel types» для SIMD-векторов (пространство имён
-
-
- Автор отмечает, что строка
-
- Показаны два примера: ограничение к диапазону
Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный
-
- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/
#cpp #programming
Библиотека «data-parallel types» для SIMD-векторов (пространство имён
std::experimental, алиас stdx) предоставляет четыре специальных алгоритма: `min, max, minmax и clamp. min, max, minmax-
min(a, b) и max(a, b) принимают два SIMD-вектора и возвращают вектор покомпонентных минимумов/максимумов.-
minmax(a, b) возвращает пару SIMD-векторов: первый — покомпонентные минимумы, второй — максимумы.- Автор отмечает, что строка
stdx::minmax(a, b) у него не компилировалась ни в GCC, ни в Clang (на момент публикации). clamp-
stdx::clamp(v, lo, hi) применяет std::clamp к каждому элементу SIMD-вектора: значения ниже lo поднимаются до нижней границы, выше hi — опускаются до верхней.- Показаны два примера: ограничение к диапазону
INT8_MIN..INT8_MAX и к 0..UINT8_MAX; на выводах видно, как выходящие за пределы элементы прижимаются к границам. Итог
- Для SIMD-векторов доступны привычные «минимумы/максимумы» и покомпонентный
clamp.-
minmax задуман как удобный возврат пары (min/max), но в текущих компиляторах может не собираться.- Дальше автор планирует разбирать новые возможности C++26 (в частности, контракты).
https://www.modernescpp.com/index.php/data-parallel-types-algorithms/
#cpp #programming
👍7❤3🔥1
oneDNN
oneDNN — это высокопроизводительная библиотека с открытым исходным кодом, предназначенная для оптимизации машинного обучения и приложений глубокого обучения.
https://github.com/oneapi-src/oneDNN
oneDNN — это высокопроизводительная библиотека с открытым исходным кодом, предназначенная для оптимизации машинного обучения и приложений глубокого обучения.
https://github.com/oneapi-src/oneDNN
👍3
Daniel Lemire, эксперт по производительности софта из топ-2% ученых мира (по рейтингу Stanford/Elsevier 2025) и топ-1000 разработчиков на GitHub, опубликовал статью про эволюцию языков программирования семейства C. Разбираем ключевые тезисы.
Всё началось с трех языков: Fortran (1957), Pascal (1970) и C (1972). Fortran создавался для числодробилки и научных расчетов. Pascal намеренно ограничивал низкоуровневый доступ, потому что задумывался как учебный язык для структурного программирования. А вот C победил именно потому, что позволял работать с указателями, прямым доступом к памяти и при этом оставался достаточно универсальным для системной разработки вроде Unix.
В 80-е и 90-е объектно-ориентированное программирование стало чем-то вроде религии. Lemire прямо пишет: это превратилось в секту. Но C не был объектно-ориентированным. Так появился C++, который начинался как «C with Classes». C++ принес шаблоны, обобщенное программирование и метапрограммирование на этапе компиляции. Это сделало язык мощным, но и сложным для освоения (с безумными сообщениями об ошибках).
Показываю как профессионально работать с Claude и другими ИИ у себя в телеге! И зеркало Max, если тг не работает(
C и C++ стали дико успешными, но писать кроссплатформенные приложения было больно. Приходилось целиться в Windows или конкретный Unix. Это было проблемой для Sun Microsystems, которая продавала Unix-машины и хотела конкурировать с Microsoft.
Так в 1995 году появилась Java. Безопасная, портативная альтернатива C++: без арифметики указателей, с обязательной сборкой мусора, проверкой границ массивов и виртуальной машиной (JVM) с JIT-компиляцией для производительности. Обещание «write once, run anywhere» напрямую закрывало боль портируемости C/C++. До сих пор Java остается сильным решением для enterprise и серверного кода.
В том же 1995-м появился JavaScript, который, несмотря на название, семантически почти ничего общего с Java не имеет. Lemire считает, что его лучше рассматривать отдельно от ветки C/C++. Python тоже стоит особняком.
Microsoft в 2000 году выкатила C#. Синтаксически он из того же семейства, что C++ и Java, но с поддержкой AOT-компиляции в современном .NET и возможностью работать с указателями в явно помеченных unsafe-блоках. По сути, C# можно назвать «C++ со сборкой мусора». Он даже конкурирует с C++ в геймдеве благодаря Unity.
Google создал Go как упрощенный современный C: со сборкой мусора, встроенной проверкой границ для слайсов и массивов, с указателями, но без произвольной арифметики в безопасном коде (пакет unsafe существует для низкоуровневых нужд).
Apple ответила Swift. Производительность и цели синтаксиса как у C++, но с современными фичами безопасности (проверка границ по умолчанию, паника при переполнении целых чисел в debug-режиме) и автоматическим подсчетом ссылок (ARC) для управления памятью. Swift заменил Objective-C, но Lemire рассматривает его как наследника C++.
Примерно тогда же появились Rust и Zig. Rust, как и Swift, отказался от поколенческой сборки мусора из Java, C# и Go. Вместо этого он полагается на систему владения и заимствования на этапе компиляции, с компромиссом: через циклические ссылки можно допустить утечку памяти. Zig делает работу с памятью полностью явной.
Интересный тезис Lemire: Rust и Zig правильнее считать потомками C, а не C++. Оба, конечно, намного мощнее C, но по духу они именно C-подобные языки.
Доминирующими языками для перформанс-критичных, системных, enterprise- и инфраструктурных задач до сих пор остаются C, C++, Java и C#. По эффекту Линди (чем дольше что-то существует, тем дольше оно, вероятно, просуществует), эти языки, особенно C, которому уже больше 50 лет, будут с нами еще очень долго.
https://vc.ru/dev/2860450-yazyk-c-i-vliyanie-na-c-java-rust-go-swift-i-zig
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍8🔥2👏1😐1
🧩 C++ обертка для PCRE2
pcre2cpp - это объектно-ориентированная обертка для библиотеки PCRE2, обеспечивающая удобный интерфейс для работы с регулярными выражениями. Поддерживает C++17 и C++20, упрощая процесс сопоставления и захвата результатов.
🚀 Основные моменты:
- Объектно-ориентированный интерфейс для PCRE2 10.47
- Совместимость с C++17 и C++20
- Удобное сопоставление регулярных выражений
- Встроенное захватывание результатов
📌 GitHub: https://github.com/MAIPA01/pcre2cpp
#cpp
pcre2cpp - это объектно-ориентированная обертка для библиотеки PCRE2, обеспечивающая удобный интерфейс для работы с регулярными выражениями. Поддерживает C++17 и C++20, упрощая процесс сопоставления и захвата результатов.
🚀 Основные моменты:
- Объектно-ориентированный интерфейс для PCRE2 10.47
- Совместимость с C++17 и C++20
- Удобное сопоставление регулярных выражений
- Встроенное захватывание результатов
📌 GitHub: https://github.com/MAIPA01/pcre2cpp
#cpp
👍3🔥3❤2
This media is not supported in your browser
VIEW IN TELEGRAM
DOOM ЧЕРЕЗ CURL. ДА, ПРОСТО HTTP ЗАПРОС
Разработчик запустил Doom прямо в терминале без установки и GUI.
Работает через обычный curl. Под капотом сервер стримит кадры игры как ANSI-графику, а ввод с клавиатуры уходит обратно по тому же соединению.
По сути это полноценная игра поверх HTTP, без клиента, без зависимостей. Только bash и сеть.
Сюрреализм в том, что это не демка, а реально играбельная штука.
Хочешь попробовать - открываешь терминал и играешь.
https://github.com/xsawyerx/curl-doom
Разработчик запустил Doom прямо в терминале без установки и GUI.
Работает через обычный curl. Под капотом сервер стримит кадры игры как ANSI-графику, а ввод с клавиатуры уходит обратно по тому же соединению.
По сути это полноценная игра поверх HTTP, без клиента, без зависимостей. Только bash и сеть.
Сюрреализм в том, что это не демка, а реально играбельная штука.
Хочешь попробовать - открываешь терминал и играешь.
https://github.com/xsawyerx/curl-doom
👍13🔥7❤4😁2
⚡️ Вы слышали про Rust. Знаете, что он быстрый, безопасный и что за ним будущее.
Осталось одно: сесть и выучить.
Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».
6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.
48 часов действует скидка 55 процентов: stepik.org/course/269250
Осталось одно: сесть и выучить.
Этот курс со Stepik- кратчайший путь от «знаю что такое Rust» до «пишу на нём».
6 модулей, 50 уроков, 143 теста. Ownership, borrowing, traits, async, Tokio, Axum, макросы, WASM — всё разложено по полочкам и закреплено практикой.
Никакого видео на 40 минут ради одной мысли. Подробный текст, много кода, реальные задачи после каждого урока. На выходе — портфолио из 10+ проектов: от CLI-утилит до REST API с базой данных.
48 часов действует скидка 55 процентов: stepik.org/course/269250
❤3🥴3💊2👍1🔥1🌭1
Media is too big
VIEW IN TELEGRAM
Веселье с type erasure: делаем обертку с семантикой значения для полиморфных типов
Павел Новиков
Цель доклада — познакомить с подноготной базовой реализации type erasure (т.н. «стирание типов») в C++, а также придать уверенности при возможном взаимодействии с подобным кодом.
Используя реализацию обертки с семантикой значения в качестве примера, мы посмотрели на то, как работает type erasure, похожий на std::any.
В отличие от повсеместно используемой семантики указателя или ссылки, в данном случае обертка с семантикой значения позволяет нам обращаться с полиморфными объектами со «стертыми типами» как с обычными значениями: перемещать их, копировать, присваивать новые значения, при этом всей головной болью владения (ownership) и клонирования объекта исходного типа займётся реализация «за кулисами».
источник
#cpp #programming
Павел Новиков
Цель доклада — познакомить с подноготной базовой реализации type erasure (т.н. «стирание типов») в C++, а также придать уверенности при возможном взаимодействии с подобным кодом.
Используя реализацию обертки с семантикой значения в качестве примера, мы посмотрели на то, как работает type erasure, похожий на std::any.
В отличие от повсеместно используемой семантики указателя или ссылки, в данном случае обертка с семантикой значения позволяет нам обращаться с полиморфными объектами со «стертыми типами» как с обычными значениями: перемещать их, копировать, присваивать новые значения, при этом всей головной болью владения (ownership) и клонирования объекта исходного типа займётся реализация «за кулисами».
источник
#cpp #programming
❤2🔥2😁1