D именования: как организовано Phobos?

Я делаю свою небольшую библиотеку удобных функций, и я пытаюсь следовать соглашению об именах Phobos, но я действительно запутался. Как я узнаю, где будут соответствовать вещи?

Пример:

Если в Фобосе была функция типа foldRight (в основном reduce в обратном направлении), какой модуль я нашел бы в ней?

Я могу думать о нескольких:

  • std.algorithm: поскольку он выражает алгоритм
  • std.array: потому что я, вероятно, буду использовать его на массивах
  • std.container: поскольку он используется для контейнеров, а не для отдельных объектов
  • std.functional: поскольку он используется главным образом в функциональном программировании
  • std.range: поскольку он также работает с диапазонами

но я понятия не имею, какой из них был бы хорошим выбором - я мог бы дать убедительный аргумент, по крайней мере, для 3 из них.

Какое соглашение?

Ответ 1

  • std.algorithm: yep и вы можете реализовать его как reduce! fun (retro (r))

    этот модуль определяет алгоритмы, которые выполняются последовательностями

  • std.array: нет, поскольку он также может работать в других диапазонах

    это вспомогательные функции, которые запускаются только на встроенных массивах

  • std.container: нет, потому что он не определяет структуру данных (например, treeet)

    это определяет структуры данных, которые не встроены в язык (на данный момент это связанный список, двоичное дерево и детерминированный массив с точки зрения управления памятью)

  • std.functional: нет, потому что он не работает с функцией, а на диапазоне

    этот принимает функцию и возвращает другую

  • std.range: нет, потому что он не определяет диапазон или не предоставляет другой способ перебора более одного

отсутствие четкой структуры - это одна из моих проблем с библиотекой phobos TBH, но на самом деле чтение первого абзаца документов должно сказать вам довольно много о том, где положить функцию