Шаг 1

Запустить

Проверка одного заголовка за 2 минуты и четыре практических сетевых маршрута.

Шаг 2

Интегрировать

Система сборки, формы поставки и обрезка возможностей.

Шаг 3

Увидеть целую картину

Устройство репозитория, модели конкурентности, карта модулей и расширения.

Дальше

Учиться и искать

Учебник из 144 глав, справочник API и свидетельства стабильности.

Подготовка: минимальному примеру с одним заголовком нужен лишь компилятор C11. Чтобы запускать примеры репозитория, держите под рукой Python 3, склонируйте репозиторий XRT и выполняйте команды из корня репозитория. Страница ориентирована на 2.0.0-dev.
Шаг 1 · Интеграция одним заголовком

Начните использовать XRT с одного C-файла

Откройте single/xrt.h в репозитории, сохраните его рядом через кнопку Raw / скачивания, затем создайте main.c.

Получить xrt.h →
main.c
#define XRT_IMPLEMENTATION
#include "xrt.h"
#include <stdio.h>

int main(void)
{
    printf("XRT %s\n", XRT_VERSION_TEXT);
    return 0;
}
Linux / macOS
cc -std=c11 -O2 main.c -o hello
./hello
Windows PowerShell / MinGW-w64
gcc -std=c11 -O2 main.c -o hello.exe
.\hello.exe

Ожидаемый вывод: XRT 2.0.0-dev. Минимальному примеру выше не нужны дополнительные сетевые системные библиотеки; когда сетевые возможности включены, инструмент сборки репозитория настраивает платформенные опции линковки.

5 минут · xhttp

Клиент HTTP / HTTPS

Начните с проверенного синхронного GET-клиента, печатающего код состояния и тело; затем перейдите к асинхронным Future, cookie, повторам и пулу соединений.

Пример: extlibs/xhttp/examples/http/client_easy/main.cHTTPS: client_https/main.cУспех: получены код состояния и тело
8 минут · Сетевое ядро

TCP-сервис эха

Поднимите слушатель на локальной петле, отражайте данные клиента, затем при необходимости углубитесь в жёсткое противодавление, закрытие соединений и жизненный цикл сервера.

Пример: examples/network/tcp_server/main.cПрослушивание: 127.0.0.1:динамический портУспех: напечатан эндпойнт прослушивания и завершён один раунд эха
10 минут · xhttp + TLS

TLS-запрос с проверкой сертификата

Сделайте HTTPS-запрос с системным хранилищем доверия. Путь по умолчанию покрывает DNS, TCP, TLS 1.3, SNI, проверку идентичности сертификата и HTTP/1.1.

Пример: extlibs/xhttp/examples/http/client_https/main.cВход: один https://-URLУспех: secure=yes и размер ответа
10 минут · xhttp

HTTP-сервер с проверкой здоровья

Поднимите сервер сырых ответов, отдающий JSON на /health и 404 в остальных случаях. Это же основа сырого пути в бенчмарках производительности.

Пример: extlibs/xhttp/examples/http/server_raw/main.cЭндпойнт: /healthУспех: возвращает {"code":200,"msg":"OK"}

Система сборки и проверенные примеры

Сетевые примеры живут в examples/ и в examples/ расширений и сопровождаются своими тестовыми наборами для изучения вызовов и жизненных циклов. Единая точка входа сборки tools/build.py даёт: инкрементальную компиляцию по SHA256-отпечаткам, развёртывание замыкания зависимостей модулей и автоматическое переключение response-файлов для длинных командных строк Windows; семейства компиляторов GCC / Clang / MSVC (включая clang-cl) / TCC взаимозаменяемы. build.bat и build.sh — тонкие обёртки над ней.

Корень репозитория · частые команды
git clone https://gitee.com/xywhsoft/xrt.git
cd xrt

# По умолчанию: собрать и прогнать тесты ядра (build.bat на Windows, ./build.sh на Linux/macOS)
python tools/build.py

# Выбрать набор: имя модуля, комбинации через запятую или all; --jobs параллелит, --start-test возобновляет с падения
python tools/build.py --suite core,concurrency --jobs 4
python tools/build.py --suite all --start-test test_http_client

# Библиотеки расширения: подключить манифест расширения
python tools/build.py --manifest extlibs/xhttp/config/modules.json --suite xhttp_tests
python tools/build.py --manifest extlibs/xws/config/modules.json --suite xws_tests

# Упаковать статическую / динамическую библиотеку и собрать+запустить программы-потребители для проверки
python tools/package.py --kind static --verify
python tools/package.py --manifest extlibs/xhttp/config/modules.json --kind shared --verify

# Перегенерировать артефакт одного заголовка (поддерживает --manifest и проверку дрейфа --check)
python tools/amalgamate.py
Расширения компилируются совместно с ядром: подключите манифест расширения в том же дереве исходников, чтобы единообразно разрешить зависимости, собрать и проверить. Можно также взять одно-заголовочные артефакты расширений со встроенным ядром для интеграции.

Выберите форму поставки

Один заголовок (быстрая интеграция)

main.c
/* single/xrt.h содержит полную реализацию; расширения аналогично (напр. extlibs/xhttp/single/xhttp.h) */
#define XRT_IMPLEMENTATION
#include "xrt.h"

Модули / библиотека (инженерная интеграция)

Используйте tools/package.py для получения статической или динамической библиотеки (с import-библиотеками) или включите исходники ядра прямо в свою сборку — манифесты модулей уже объявляют владение и зависимости каждого файла исходников. Пути заголовков единообразно <xrt/xxx.h>. Выбирайте по границе проекта, а не по моде: один заголовок — для прототипов и инструментов, библиотеки — для продуктовых сборок.

Система обрезки возможностей

Обрезка работает в единицах макросов модулей: после определения XRT_MODULE_<NAME> заголовок include/xrt/features.h (генерируется из modules.json скриптом tools/generate_features.py) автоматически разворачивает замыкание зависимостей и выставляет соответствующие макросы XRT_FEATURE_*; отсутствующая зависимость даёт прямой #error в заголовке.

Пример обрезки
/* Только TCP-сеть и корутины */
#define XRT_MODULE_NET_TCP
#define XRT_MODULE_COROUTINE
#include "xrt.h"

/* Включить всё */
/* #define XRT_MODULE_ALL */

Корректность обрезки охраняют два шлюза:

У расширений параллельная система макросов (XHTTP_MODULE_*, XWS_MODULE_*…), генерируемая generate_extension_features.py и цепляющая макросы модулей ядра как требования.

Знакомство с XRT

XRT — системная кроссплатформенная библиотека C-инфраструктуры, целью которой является полный инфраструктурный цикл с нулём сторонних рантайм-зависимостей для эпохи Интернета и ИИ. С версии 2.0 репозиторий делится на две части:

Две формы потребления: модульные исходники / статическая библиотека / динамическая библиотека или самодостаточный один заголовок (у ядра и у каждого расширения — свой).

Обзор репозитория

КаталогСодержимое
include/xrt/Публичные заголовки ядра. Каждая экспортируемая функция использует макрос XRT_API и префикс xrt.
src/Реализация ядра, организованная по доменам возможностей; приватные контрактные заголовки — в src/internal/.
extlibs/Пять библиотек расширения. Публичные заголовки устанавливаются в пространство имён xrt/ (напр. <xrt/http_client.h>); фасадные заголовки — <xhttp.h>, <xws.h> и т.д.
config/modules.jsonМанифест модулей ядра — единственный источник истины: заголовки, исходники, тесты, примеры и зависимости каждого модуля.
tools/Точки входа тулчейна: build.py (сборка), package.py (упаковка), amalgamate.py (склейка одного заголовка), measure_size / measure_performance (измерения), generate_features / generate_api_reference (генераторы).
tests/Тесты ядра; tests/single/ содержит пробы сборки и вызова одним заголовком.
examples/Примеры, организованные по модулям, показывающие полные потоки от сборки и вызовов до освобождения ресурсов.
single/Одно-заголовочные артефакты ядра xrt.h / xrt_decl.h.
fuzz/Цели libFuzzer (протоколы HTTP/WS и другие).
dev/Бенчмарки производительности (датированные отчёты), контролируемые архивы и активы процесса разработки.

Модели конкурентности: выбирайте по задаче — используйте всё или ничего

Потоки, корутины, Channel, Future, группы задач и токены отмены решают разные границы. Сперва решите, нужны ли работе настоящий параллелизм, ожидание IO, передача сообщений, композиция результатов или скоординированная остановка; затем возьмите минимальный набор механизмов.

МеханизмКогда предпочестьГраницы и следующие шаги
Потоки и синхронизацияCPU-параллелизм, интеграция блокирующих интерфейсов, защита разделяемого состояния.mutex / rwlock / cond / sem / once делают разделение явным; начните с главы 52.
Стековые корутины и планировщикОжидание IO, пошаговые потоки с приоритетом читаемости, таймирование и возобновление.Корутины работают кооперативно внутри планировщика и не заменяют потоки ОС; читайте главу 54 и главу 55.
Channel / selectПроизводитель-потребитель, передача работы между единицами исполнения, ожидание нескольких источников сообщений одновременно.Передача сообщений сжимает разделяемое состояние; читайте главу 56.
Future / PromiseКомпозиция асинхронных событий завершения — продолжение, объединение, гонка или обработка отказов.Описывайте зависимости результатов через then / catch / any / all / race; читайте главу 57.
executor / группа задачПереиспользование пула потоков, пакетная подача, ожидание управляемой группы работ.Отделяйте ресурсы исполнения от охвата задач; читайте главу 58.
deadline / cancelТайм-ауты запросов, закрытие соединений, остановки сервисов или прерывание цепочки задач.Пусть сигналы остановки распространяются по дереву токенов отмены и завершают необходимую очистку перед выходом; читайте главу 59.

Предлагаемый порядок обучения

Освойте сперва потоки и синхронизацию, затем планирование корутин; дальше организуйте потоки работ через Channel и Future; наконец соберите executor, группы задач и отмену в жизненный цикл сервиса.

Начать с потоковВойти в учебник по корутинамAPI конкурентности

В репозитории есть напрямую сравнимые примеры: examples/concurrency/thread, coroutine, channel_select, future_combine, task_group и cancel.

Карта модулей ядра

Быстрый поиск модулей по системам (публичные заголовки в include/xrt/; полная документация по каждому API — в справочнике API):

СистемаМодули / заголовки
Фундаментcore error error_format atomic memory memory_debug math hash random xid
Данные и контейнерыarray map set avl list buffer queue (MPMC/MPSC/SPSC) slot_map value json xlon jsonl xlonl string charset number html regex pattern codec compress template
Конкурентностьcoroutine channel future future_bridge executor task cancel mutex/cond/sem/rwlock/once
Системные сервисыfile file_async path process signal logger io time environment console
Сетьnet tcp udp proxy net_frame net_file net_interface
Безопасностьcrypto asn1 pem x509 tls tls_client tls_server tls_session tls_stream
Веб-протоколыhttp http1 http1_net http1_tls http_connection http_decode http_encoding http_te http_trailer http_upgrade websocket websocket_stream websocket_upgrade

Путеводитель по библиотекам расширения

Каждое расширение делит одно устройство каталогов: src/ include/ tests/ examples/ bench/ config/modules.json single/ docs/. Публичные заголовки остаются в пространстве имён xrt/ и бесшовно сшиваются с заголовками ядра.

xhttp — HTTP-клиент и сервер

Вход <xhttp.h>; слоистые заголовки <xrt/http_client.h>, <xrt/http_server_runtime.h> и ещё более 70. Покрывает URL / Query / Form / MIME / Cookie / SSE / multipart / статические файлы. Имя компонента ошибок "xhttp".

extlibs/xhttp/ · 272 модуля

xws — рантайм WebSocket

Вход <xws.h>; рантайм-API в <xrt/websocket_runtime.h>. Клиент переиспользует весь стек xhttp (прокси / cookie / тайм-ауты действуют), с групповым широковещанием и отправкой без копий.

extlibs/xws/ · 74 модуля

xruntime — динамические типы и объектная система

Вход <xruntime.h>; реестр типов, объекты с подсчётом ссылок, сборка графов объектов, динамический вызов, типизированные проекции контейнеров (<xrt/typed_*.h>).

extlibs/xruntime/ · 47 модулей

xmail — набор почтовых протоколов

SMTP (STARTTLS / BDAT / XOAUTH2), IMAP4 (IDLE / COMPRESS=DEFLATE / BODYSTRUCTURE), POP3, разбор и сборка MIME, кодеки RFC 2047/2231.

extlibs/xmail/ · 51 модуль

xssh — стек протокола SSH2

Транспорт, KEX curve25519-sha256, ключи хоста ssh-ed25519, шифрование AES-GCM, аутентификация password/publickey/hostbased/keyboard-interactive, каналы и проброс портов.

extlibs/xssh/ · 68 модулей

Как устроены тесты и примеры

Суффиксы имён тестовых файлов кодируют измерение теста, и один контракт появляется в нескольких вариантах (напр. test_http_client_iocp.c — это одна строка #define + #include "test_http_client.c"):

СуффиксЗначение
_oomВнедрение отказов OOM: падает ровно N-е выделение / исчерпан бюджет / падают все
_noallocКонтракт нуля кучных выделений: выделения запрещены на всей операции
_iocp / _uring / _epoll / _kqueue / _selectИнстанциация под конкретный событийный бэкенд
_threads / _raceМногопоточная конкурентность / точно управляемые окна гонок
_tlsВариант на TLS-канале
_mutation / _fuzz / _stressЭквивалентность мутаций / детерминированный случайный фаззинг / стресс
tests/single/Пробы эквивалентности одного заголовка (склеенный артефакт = модульная сборка)

Ядро и пять расширений дают 680 примеров на C и 2,512 тестовых файлов на C. Используйте манифесты модулей для поиска исходников и точек входа сборки, затем идите по потокам вызовов в реализацию.

Предлагаемый путь обучения

  1. Заставьте сборку работать: python tools/build.py --suite core; наблюдайте инкременты по отпечаткам и вывод тестов.
  2. Читайте примеры: возьмите main.c из examples/ по интересующему модулю; поймите сборку, вызовы и высвобождение ресурсов.
  3. Читайте тесты: сверьтесь с утверждениями в tests/<module>/, чтобы понять поведение интерфейсов и граничные условия.
  4. Попробуйте обрезку: макросами XRT_MODULE_* вырежьте свой минимальный набор и проверьте через --trim-only.

Куда идти дальше