Skip to content

Latest commit

 

History

History
138 lines (103 loc) · 7.01 KB

File metadata and controls

138 lines (103 loc) · 7.01 KB

Roadmap netlib

Документ фиксирует возможности, намеренно отложенные после bootstrap соглашений. Порядок — ориентировочный; приоритеты уточняются по мере появления кода и тестов.

См. также ARCHITECTURE.md.

v0 — Bootstrap (текущий этап)

  • Архитектурный документ и Cursor rules
  • Корневой CMakeLists.txt, target netlib::netlib
  • Минимальные заголовки-заглушки и Catch2 smoke-тест

v1 — Execution foundation

  • cmake/netlib_features.cmake — probe NETLIB_HAS_STD_EXECUTION
  • execution::detail::backend — std и fallback
  • Базовый thread_pool / executor / scheduler
  • CI на Linux (GCC, Clang); best-effort Windows (MSVC)

v1 — Net foundation

  • event_loop + reactor detail (Linux epoll первым)
  • tcp_socket, tcp_acceptor, endpoint (async connect/write/read)
  • Интеграционные тесты с loopback (TCP echo, sync ping, accept/connect)
  • TDD: tests/fakes/, tests/unit/, socket_backend / reactor_backend
  • async_read_some: unit-сценарии + integration echo на async (без blocking recv)
  • Unit-тесты tcp_acceptor на фейках

C++20 modules (начато)

Цель: опциональный модульный интерфейс без отказа от headers.

Элемент Статус
CMake option NETLIB_BUILD_MODULES (default OFF), probe NETLIB_HAS_MODULES
Модули netlib.net.simple, netlib.net.medium, netlib.net в modules/
Targets netlib::simple, netlib::medium, netlib::net_module
Потребление import netlib.net.simple; зеркало #include <netlib/simple.hpp>

За: быстрее пересборка у крупных потребителей.
Против: сложность CI, разброс поддержки modules в компиляторах.

v2 — Coroutines (начато)

  • NETLIB_ENABLE_COROUTINES + probe toolchain
  • execution::task<T>, co_await scheduler, sync_wait
  • net::connect_async, write_all_async, read_some_async
  • Пример tcp_echo_client_coro
  • when_all для двух task
  • accept_async, integration tcp_echo_coro
  • generator<T> с co_await gen.next(sched)
  • when_all для std::vector<task<T>>
  • spawn — detached task
  • when_all для void, void+T, vector<task<void>>
  • then — последовательная композиция
  • net/coro_tcp.hpp — read_string, tcp_echo_peer, tcp_serve_echo_once
  • variadic when_allstd::tuple (3+ task, не-void)
  • read_exact_async, read_exact_vec_async
  • delay_async (scheduler + event_loop), event_loop::run_after
  • when_any, with_timeout, connect_with_timeout / read_*_with_timeout
  • timerfd (Linux) для event_loop::run_after
  • kqueue EVFILT_TIMER в том же kqueue, что сокеты (macOS)
  • tcp_socket::cancel_io — снятие pending async I/O
  • cancellation_token / cancellation_source для coro awaitables
  • *_with_timeout + token; accept_with_timeout; tcp_acceptor::cancel_accept
  • net/tcp_coro.hpp — tcp_connect, tcp_echo_server_loop, run_until_cancelled
  • пример tcp_echo_server_coro (graceful shutdown через cancellation_source)
  • when_any / with_timeout: колбэки on_loser_* / on_work_lost для кооперативной отмены
  • integration: server_coro_shutdown (cancel выходит из tcp_echo_server_loop)
  • API_LAYERS.md — callback / awaitables / tcp_coro; пометки на async_*
  • read_string_with_timeout, тесты accept_with_timeout, пример client_coro_timeout

Отложено: std::expected в hot path

Сейчас: исключения + доменные типы ошибок.

v2: expected<T, error_code> для предсказуемых сетевых сбоев без unwind на hot path.

v1 — Установка

  • cmake --install + netlibConfig.cmake + find_package(netlib)
  • Документация: INSTALL.md
  • socket_handle — удержание fd в async I/O; io_handle() для цепочек операций
  • make_default_reactor() — Linux epoll, macOS kqueue, Windows WSAPoll
  • CI: ubuntu (GCC/Clang), macos-latest, windows-latest

Отложено: Установка (расширения)

  • Публикация релизов / vcpkg / Conan

Отложено: Amalgamation / single-header

Цель: опциональный netlib_single.hpp для проектов без CMake.

  • Генерация скриптом, не ручное копирование.
  • Не заменяет основной способ поставки.

v2 — UDP (транспорт)

  • socket_backend: create_udp_socket, try_sendto, try_recvfrom
  • udp_socket: bind, async_send_to, async_recv_from, cancel_io
  • unit (fake) + integration loopback (POSIX)
  • coroutine awaitables: send_to_async, recv_from_async, udp_coro.hpp
  • send_to_with_timeout / recv_from_with_timeout
  • примеры examples/udp_echo/ (server, server_coro, client_coro)
  • integration: udp_server_coro_shutdown (cancel выходит из udp_echo_loop)

UNIX domain stream

  • unix_endpoint, unix_stream_socket, unix_stream_acceptor
  • socket_backend: create_unix_stream_socket, bind_unix, start_connect_unix
  • POSIX + fake; Windows — явный net_error
  • unit + integration loopback; NET_UNIX.md
  • coroutine awaitables + examples/unix_echo/
  • connect_unix_with_timeout, integration shutdown

Отложено: Расширения net

  • UNIX domain datagram (SOCK_DGRAM)
  • TLS (только если появится std или явное решение о минимальной dep — иначе out of scope)
  • DNS async resolver

v1 — Документация и DX

  • README.md, docs/GETTING_STARTED.md
  • Примеры examples/tcp_echo/ (server + client)
  • Umbrella #include <netlib/netlib.hpp>
  • Документация в docs/*.md + PlantUML (docs/diagrams/) — без Doxygen/mkdocs
  • Benchmarks в benchmarks/ (NETLIB_BUILD_BENCHMARKS, без внешних deps)

Критерии «готово к v1 release»

Статус и smoke — V1_RELEASE.md.

  1. Fallback execution проходит CI без NETLIB_HAS_STD_EXECUTION.
  2. TCP echo-тест на Linux через reactor + thread pool.
  3. Сборка на Windows — WSAPoll + winsock smoke; полноценный IOCP — v2.
  4. Нет внешних зависимостей кроме Catch2 в dev.