Библиотека C/C++ разработчика | cpp, boost, qt
Все самое полезное для плюсовика и сишника в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/d6cd2932 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17 #WXSSA
Show more📈 Analytical overview of Telegram channel Библиотека C/C++ разработчика | cpp, boost, qt
Channel Библиотека C/C++ разработчика | cpp, boost, qt (@cppproglib) in the Russian language segment is an active participant. Currently, the community unites 17 750 subscribers, ranking 7 542 in the Technologies & Applications category and 38 062 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 17 750 subscribers.
According to the latest data from 09 June, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -16 195 over the last 30 days and by -40 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 8.86%. Within the first 24 hours after publication, content typically collects 4.78% reactions from the total number of subscribers.
- Post reach: On average, each post receives 1 574 views. Within the first day, a publication typically gains 849 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 8.
- Thematic interests: Content is focused on key topics such as c++, навигация, компилятор, удалёнка, developer.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“Все самое полезное для плюсовика и сишника в одном канале.
По рекламе: @proglib_adv
Учиться у нас: https://proglib.io/w/d6cd2932
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a5bac324c8ba6dcaa1ad17
#WXSSA”
Thanks to the high frequency of updates (latest data received on 10 June, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
Его доклад про мифы семантического поиска и провалы Naive RAG стал одним из самых рейтинговых на конференции.🟣 Эксперт по GraphRAG и Knowledge Graphs
Андрей внедряет инженерный подход в сложные системы, заменяя «слепую веру» в эмбеддинги строгой логикой графов.🟣 Автор «14 кругов ада для RAG»
Разработал уникальный набор из 14 unit-тестов, на которых ломается стандартный векторный поиск (от слепоты к отрицаниям до конфликта версий).🟣 Спикер Saint HighLoad
Регулярно выступает на крупнейших хайлоад-площадках, разбирая архитектуру отказоустойчивых ИИ-сервисов.Андрей упаковал свои наработки в Google Colab, где можно пощупать 14 сценариев ошибок RAG и их решения: 🔗 Забрать Colab-ноутбук На курсе Андрей отвечает за самые «мясные» блоки: RAG, оркестрацию агентов и их промышленную эксплуатацию. Узнать больше о программе и обучении у Андрея: 👉 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса Так, продолжаем знакомить вас с командой? 👍 — Да, ждем новых лиц 🔥 — Пойду тестить Colab Носова
IWYU на своих проектах или до сих пор чистите include вручную? 👇
📍 Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#буст#include <ranges>
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> vec = { 5, 3, 1, 4, 2 };
auto sorted_view = vec
| std::views::transform([](int x) { return x; });
std::ranges::sort(sorted_view);
for (auto v : sorted_view) {
std::cout << v << " ";
}
}
Подсказка: views::transform возвращает prvalue. Можно ли сортировать такой view?
Отсортируется ли vec? Если нет — какая ошибка компиляции и почему?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчик#include <ranges>
#include <vector>
#include <iostream>
#include <algorithm>
int main() {
std::vector<int> vec = { 5, 3, 1, 4, 2 };
auto sorted_view = vec
| std::views::transform([](int x) { return x; });
std::ranges::sort(sorted_view);
for (auto v : sorted_view) {
std::cout << v << " ";
}
}
Подсказка: views::transform возвращает upvalue. Можно ли сортировать такой view?
Отсортируется ли vec? Если нет — какая ошибка компиляции и почему?
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#междусобойчикpurego решает всё это, позволяя вызывать C-функции из чистого Go.
Откуда взялся проект
Библиотека выросла из игрового движка Ebitengine. Его авторы портировали движок на чистый Go для Windows, что позволило кросс-компилировать на Windows с любой ОС одной командой GOOS=windows. purego родился, чтобы принести тот же подход на macOS, Linux и другие платформы.
Что даёт purego
Без Cgo отпадает необходимость в C-компиляторе. Вы можете собирать проект под другую платформу, просто задав GOOS и GOARCH. Сборка кешируется целиком как обычный Go-проект и работает быстрее. Бинарники становятся меньше, потому что Cgo генерирует обёртку на C для каждого вызова, а purego этого не делает.
Ещё purego умеет загружать символы из shared-библиотек в рантайме. Это можно использовать как систему плагинов или для FFI-вызовов в библиотеки на других языках, скомпилированные в .so / .dylib / .dll.
purego работает и при CGO_ENABLED=1. Это значит, что можно портировать проект с Cgo на purego постепенно, не переписывая всё разом.
Как это выглядит в коде
API минимальный. Вы открываете библиотеку через Dlopen, затем регистрируете Go-функцию, которая будет вызывать C:
package main
import (
"fmt"
"runtime"
"github.com/ebitengine/purego"
)
func getSystemLibrary() string {
switch runtime.GOOS {
case "darwin":
return "/usr/lib/libSystem.B.dylib"
case "linux":
return "libc.so.6"
default:
panic(fmt.Errorf("GOOS=%s is not supported", runtime.GOOS))
}
}
func main() {
libc, err := purego.Dlopen(getSystemLibrary(), purego.RTLD_NOW|purego.RTLD_GLOBAL)
if err != nil {
panic(err)
}
var puts func(string)
purego.RegisterLibFunc(&puts, libc, "puts")
puts("Calling C from Go without Cgo!")
}
Обратите внимание на RegisterLibFunc. Вы объявляете переменную с нужной Go-сигнатурой, а purego привязывает её к C-функции по имени. Никаких // #cgo директив, никаких .h файлов.
Когда стоит использовать
purego подходит, если вам нужно вызывать C-библиотеку из Go и при этом важна простота сборки и кросс-компиляция. Типичные сценарии — работа с системными библиотеками, графические движки, аудио, нативные SDK.
Если ваш проект уже плотно завязан на Cgo и работает на одной платформе, смысла переезжать может не быть. Но если вы начинаете новый проект или хотите избавиться от зависимости на C-тулчейн, purego стоит попробовать.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProductionswitch-case для превращения enum в строку. C++26 предлагает забыть об этом — в стандарт входит compile-time reflection.
• Появляются два новых оператора: ^^ (reflection operator) и [: :] (splicer). Первый превращает любую C++-сущность — тип, переменную, namespace, шаблон — в значение std::meta::info на этапе компиляции. Второй делает обратное: конвертирует std::meta::info обратно в тип, выражение или шаблон
• std::meta::info — это constexpr-хэндл к сущности. По сути, программа получает возможность исследовать собственную структуру в compile-time, не прибегая к макросам или кодогенерации
• Практический пример — generic to_enum_string(). Через std::meta::enumerators_of(^^T) получаем список enumerator-ов, итерируемся по ним с помощью template for, сплайсим значение через [:e:] и достаём имя через std::meta::identifier_of. Добавил новый enumerator — всё работает автоматически
• Для итерации используется std::define_static_array — отдельный proposal C++26, без которого развернуть expansion statement пока не получится
Вместо ручного switch-case, который ломается при каждом добавлении нового значения, reflection даёт обобщённое решение на уровне языка. Никакой кодогенерации, никаких макросов — чистый constexpr-код с полной type safety.
🍴 Подробнее
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#бустstd::vector<std::string> names = {"Алиса", "Борис", "Виктор"};
std::vector<int> scores = {95, 82, 78};
// Получаем пары (имя, балл)
for (auto [name, score] : views::zip(names, scores)) {
std::cout << name << ": " << score << "\n";
}
// Алиса: 95
// Борис: 82
// Виктор: 78
zip заканчивается на самом коротком диапазоне — безопасно при разной длине. Внутри возвращается std::tuple, а structured bindings разбирают его на отдельные переменные.
❗️ views::zip возвращает ссылки на элементы исходных контейнеров. Модификация через structured binding изменит оригинальные данные.
🥨 views::enumerate — индекс + значение (C++23)
std::vector<int> data = {10, 50, 30, 90, 20};
for (auto [i, val] : data | views::enumerate) {
if (val > 40) {
std::cout << "Первое превышение на позиции " << i << "\n";
break;
}
}
// Первое превышение на позиции 1
Раньше для этого приходилось писать views::zip(views::iota(0), data) (см. предыдущий пост про генераторы). Теперь — в одну строку.
❗️ Тип индекса в enumerate — это range_difference_t, а не int или size_t. На практике разница редко бьёт, но при сравнении с size() компилятор может выдать предупреждение о знаковости.
🧊 Главное свойство
Как и все views, zip и enumerate ленивые — они не создают копий и не выделяют память. Это лёгкие обёртки поверх исходных данных, которые вычисляются только при обращении к элементу.
📍Навигация: Вакансии • Задачи • Собесы
Библиотека C/C++ разработчика
#константная_правильность
Available now! Telegram Research 2025 — the year's key insights 
