Проектирование API для функций, действующих на массивах

Я разрабатываю API на Java для набора численных алгоритмов, которые действуют на массивах двоек (для финансовой статистики в реальном времени, как это происходит). По соображениям производительности API должен работать с примитивными массивами, поэтому List и тому подобное - не вариант.

Типичным примером использования может быть объект алгоритма, который принимает два входных массива и возвращает выходной массив, содержащий результат, вычисленный из двух входных массивов.

Я хотел бы установить последовательные соглашения о том, как параметры массива используются в API, в частности:

  • Должен ли я включать смещение во все функции, чтобы пользователи могли действовать с частями большого массива, например someFunction(double[] input, int inputOffset, int length)
  • Если функция требует входных и выходных параметров, должны ли входные или выходные параметры быть первыми в списке параметров?
  • Должна ли вызывающая функция выделять выходной массив и передавать его в качестве параметра (который потенциально может быть использован повторно), или функция должна создавать и возвращать выходной массив при каждом вызове?

Цели - достичь баланса эффективности, простоты для пользователей API и согласованности как внутри API, так и с установленными соглашениями.

Очевидно, что вариантов много, так какой же дизайн API будет наилучшим?

7
задан mikera 13 January 2012 в 02:52
поделиться