Запустить
Проверка одного заголовка за 2 минуты и четыре практических сетевых маршрута.
Шаг 2Интегрировать
Система сборки, формы поставки и обрезка возможностей.
Шаг 3Увидеть целую картину
Устройство репозитория, модели конкурентности, карта модулей и расширения.
ДальшеУчиться и искать
Учебник из 144 глав, справочник API и свидетельства стабильности.
2.0.0-dev.Начните использовать XRT с одного C-файла
Откройте single/xrt.h в репозитории, сохраните его рядом через кнопку Raw / скачивания, затем создайте main.c.
#define XRT_IMPLEMENTATION #include "xrt.h" #include <stdio.h> int main(void) { printf("XRT %s\n", XRT_VERSION_TEXT); return 0; }
cc -std=c11 -O2 main.c -o hello ./hello
gcc -std=c11 -O2 main.c -o hello.exe .\hello.exe
Ожидаемый вывод: XRT 2.0.0-dev. Минимальному примеру выше не нужны дополнительные сетевые системные библиотеки; когда сетевые возможности включены, инструмент сборки репозитория настраивает платформенные опции линковки.
Клиент HTTP / HTTPS
Начните с проверенного синхронного GET-клиента, печатающего код состояния и тело; затем перейдите к асинхронным Future, cookie, повторам и пулу соединений.
extlibs/xhttp/examples/http/client_easy/main.cHTTPS: client_https/main.cУспех: получены код состояния и телоTCP-сервис эха
Поднимите слушатель на локальной петле, отражайте данные клиента, затем при необходимости углубитесь в жёсткое противодавление, закрытие соединений и жизненный цикл сервера.
examples/network/tcp_server/main.cПрослушивание: 127.0.0.1:динамический портУспех: напечатан эндпойнт прослушивания и завершён один раунд эхаTLS-запрос с проверкой сертификата
Сделайте HTTPS-запрос с системным хранилищем доверия. Путь по умолчанию покрывает DNS, TCP, TLS 1.3, SNI, проверку идентичности сертификата и HTTP/1.1.
extlibs/xhttp/examples/http/client_https/main.cВход: один https://-URLУспех: secure=yes и размер ответа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
Выберите форму поставки
Один заголовок (быстрая интеграция)
/* 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 */
Корректность обрезки охраняют два шлюза:
- Обратная проверка обрезки (
build.py --trim-only): для каждого модуля его прямые макросы зависимостей намеренно убираются, и компиляция обязана упасть — защита от пропущенных стражей. - Запрет символов (
measure_size.py): минимальный артефакт обрезки ядра не должен содержать символы с префиксамиxrtNet / xrtHttp / xrtWs / xrtTls / xrtRegex— бинарная профилактика расползания возможностей.
У расширений параллельная система макросов (XHTTP_MODULE_*, XWS_MODULE_*…), генерируемая generate_extension_features.py и цепляющая макросы модулей ядра как требования.
Знакомство с XRT
XRT — системная кроссплатформенная библиотека C-инфраструктуры, целью которой является полный инфраструктурный цикл с нулём сторонних рантайм-зависимостей для эпохи Интернета и ИИ. С версии 2.0 репозиторий делится на две части:
- Ядро (
src/+include/xrt/): конкурентные корутины, сетевой движок с пятью бэкендами, TLS, протокольное ядро HTTP/WebSocket, память и контейнеры, файлы и процессы, regex и сопоставление с образцом. 94 публичный заголовок; манифесты модулей объявляют 386 различных макросов возможностей. - Библиотеки расширения (
extlibs/): пять независимых продуктов по доменам — xhttp, xws, xruntime, xmail, xssh. Каждая — самодостаточный мини-проект (свои src / include / tests / examples / config / single) с односторонней зависимостью от ядра. Библиотека xregex влита в модуль ядраregex.
Две формы потребления: модульные исходники / статическая библиотека / динамическая библиотека или самодостаточный один заголовок (у ядра и у каждого расширения — свой).
Обзор репозитория
| Каталог | Содержимое |
|---|---|
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, группы задач и отмену в жизненный цикл сервиса.
В репозитории есть напрямую сравнимые примеры: 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".
xws — рантайм WebSocket
Вход <xws.h>; рантайм-API в <xrt/websocket_runtime.h>. Клиент переиспользует весь стек xhttp (прокси / cookie / тайм-ауты действуют), с групповым широковещанием и отправкой без копий.
xruntime — динамические типы и объектная система
Вход <xruntime.h>; реестр типов, объекты с подсчётом ссылок, сборка графов объектов, динамический вызов, типизированные проекции контейнеров (<xrt/typed_*.h>).
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. Используйте манифесты модулей для поиска исходников и точек входа сборки, затем идите по потокам вызовов в реализацию.
Предлагаемый путь обучения
- Заставьте сборку работать:
python tools/build.py --suite core; наблюдайте инкременты по отпечаткам и вывод тестов. - Читайте примеры: возьмите
main.cизexamples/по интересующему модулю; поймите сборку, вызовы и высвобождение ресурсов. - Читайте тесты: сверьтесь с утверждениями в
tests/<module>/, чтобы понять поведение интерфейсов и граничные условия. - Попробуйте обрезку: макросами
XRT_MODULE_*вырежьте свой минимальный набор и проверьте через--trim-only.
Куда идти дальше
Один заголовок, исходники или библиотека
Вернитесь к инженерно-интеграционной части этой страницы: формы поставки и ограничения обрезки.
УчитьсяВойдите в учебник
Следуйте по главам треками сетевого сервиса, клиента или проектов.
ИскатьНайдите модули и API
Наберите имя функции и прыгните сразу к сигнатурам, параметрам, возвратам и примерам.
ПроверятьИнженерное качество
Изучите модель ошибок, проект протоколов, внедрение отказов и проверку сборки.
Полезные ссылки
- Репозиторий Gitee — исходники и трекер задач
- Справочник API — документация по API 96 модулей
- Обзор архитектуры — слоистость ядра и расширений