Estoy diseñando una API en Java para un conjunto de algoritmos numéricos que actúan en matrices de dobles (para estadísticas financieras en tiempo real). Por razones de rendimiento, la API tiene que funcionar con matrices primitivas, por lo que List<Double>
y similares no son una opción.Diseño de API para funciones que actúan en matrices
Un caso de uso típico podría ser un objeto de algoritmo que toma dos matrices de entrada y devuelve una matriz de salida que contiene un resultado calculado a partir de las dos entradas.
me gustaría establecer convenciones coherentes de cómo se utilizan los parámetros de matriz en la API, en particular:
- Debería incluir una corrección en todas las funciones que los usuarios puedan actuar sobre las partes de un conjunto más amplio por ejemplo,
someFunction(double[] input, int inputOffset, int length)
- Si una función necesita parámetros de entrada y salida, ¿la entrada o la salida son las primeras en la lista de parámetros?
- ¿Debería la persona que llama asignar una matriz de salida y pasarla como un parámetro (que podría ser reutilizado), o la función debería crear y devolver una matriz de salida cada vez que se llama?
Los objetivos son lograr un equilibrio entre la eficiencia, la simplicidad para los usuarios de API y la coherencia tanto dentro de la API como con las convenciones establecidas.
Claramente hay muchas opciones, entonces, ¿cuál es el mejor diseño de API en general?
Creo que está escribiendo en Java, por lo que el comentario "en la pila" no tiene sentido en ese contexto. – user949300
No, HotSpot asigna objetos pequeños que no escapan en la pila. –
Pero dado que estas matrices se devuelven como resultados, definitivamente escapan. – user949300