C-toxcore: Не включайте заголовки, специфичные для ОС, в файлы .h

Созданный на 11 сент. 2016  ·  5Комментарии  ·  Источник: TokTok/c-toxcore

В настоящее время network.h включает в себя множество заголовков, специфичных для платформы (например, u.h , windows.h и unistd.h ). Мы должны ограничить их одним файлом (или несколькими файлами).

Я предлагаю создать тонкую абстракцию по средствам ОС для работы в сети, а другую - по средствам монотонных часов. Тогда мы могли бы иметь один файл для каждого типа платформы (например, ${module}_win32.c , _unix.c , _osx.c , _posix.c , ...) и условно скомпилировать их в соответствии с препроцессором. символы, как и мы. Обратной стороной является то, что это немного больше накладных расходов на объявление, потому что в настоящее время эти #ifdef s являются внутренними функциями, которые необходимо будет переопределить для каждой платформы. Преимущество состоит в том, что в самом коде нет или мало #ifdef s, а специфичный для платформы код находится в наборе небольших файлов вместо (как сейчас) в 1100-строчных абстракциях платформы смешивания файлов с код приложения.

P1 cleanup good first issue

Самый полезный комментарий

Как насчет того, чтобы создать «системный» интерфейс, который может быть реализован «системой Windows», «системой posix» и «системой тестирования»? Тестовая система может использоваться в модульных тестах и ​​имитировать систему, фактически не выполняя системных вызовов.

Все 5 Комментарий

Звучит отлично

Как насчет того, чтобы создать «системный» интерфейс, который может быть реализован «системой Windows», «системой posix» и «системой тестирования»? Тестовая система может использоваться в модульных тестах и ​​имитировать систему, фактически не выполняя системных вызовов.

Я не согласен с предложением по реализации. Я бы предпочел видеть все функции в одном файле {network,time,...}.c , где #ifdef s используется для обертывания функций, которые должны быть написаны по-разному для каждой платформы.

Преимущества этого метода по сравнению с отдельными файлами заключаются в том, что мы можем заставить весь код платформы как статическую функцию и предоставить единый API для более высоких уровней toxcore. Любые детали реализации платформы можно будет легко просмотреть из одного файла. Особенности платформы потребуют абстракции и обработки в одном файле, а не в нескольких файлах. Это также упростит сопровождение файла cmakelists.txt (он уже начинает ускользать от нас). И последующее рассмотрение с нашей текущей системой проверки.

Не полностью исправлено

@GrayHatter согласился. Пусть будет единый файл, реализующий специфику ОС.

Я пока отменяю назначение

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ovalseven8 picture ovalseven8  ·  11Комментарии

tox-user picture tox-user  ·  4Комментарии

grinapo picture grinapo  ·  4Комментарии

zetok picture zetok  ·  3Комментарии

GrayHatter picture GrayHatter  ·  3Комментарии