Files
boost_program_options_docs_ru/boost/1.89.0/design_discussion.md

3.7 KiB
Raw Blame History

Обсуждение дизайна библиотеки

Поддержка Unicode

Unicode-поддержка в библиотеке означает:

  • Возможность парсинга как char*, так и wchar_t*
  • Возможность указания типа обработки для каждой опции (ASCII или Unicode)
  • Гарантии корректной конвертации данных

Основные гарантии библиотеки

  • ASCII-вход передается в ASCII-значение без изменений
  • Unicode-вход передается в Unicode-значение без изменений
  • При несовпадении типов происходит автоматическая конвертация через codecvt

Особенности реализации

Смешанная поддержка ASCII и Unicode:

  • Возможность использования обоих типов опций одновременно
  • Отсутствие необходимости писать дополнительный код для Unicode
  • Совместимость с существующими библиотеками

Проблемы реализации

Основные сложности:

  • Сравнение Unicode-строк
  • Интернационализация имен опций
  • Необходимость дополнительных настроек для корректной работы

Подход к реализации

Варианты реализации:

  1. Шаблонное решение с std::basic_string
  2. Внутренняя кодировка с конвертацией на границах

Выбранный подход:

  • Использование внутренней кодировки UTF-8
  • Конвертация только при необходимости
  • Минимизация накладных расходов

Компоненты системы

Парсеры:

  • Работа с входными строками
  • Конвертация в internal encoding
  • Хранение результатов в parsed_options

Описания опций:

  • Поддержка смешанных типов
  • Дополнительная информация о кодировке
  • Гибкая обработка значений

Хранение данных:

  • Конвертация при сохранении
  • Информирование о типе кодировки
  • Корректная работа с разными типами

Выбор внутренней кодировки

Критерии выбора:

  • Скорость обработки
  • Затраты памяти
  • Размер кода

Принятое решение: UTF-8 как внутренняя кодировка из-за:

  • Универсальности
  • Эффективности для ASCII-данных
  • Простоты интеграции с существующими компонентами

Особые случаи

Важные моменты:

  • Предполагается ASCII-кодировка для символьных литералов
  • Учет возможных проблем с комбинирующими символами
  • Практическая нерелевантность проблем в большинстве случаев

Такой подход обеспечивает баланс между функциональностью, производительностью и простотой использования библиотеки.