Sto progettando un'API in Java per un insieme di algoritmi numerici che agiscono su array di doppi (per le statistiche finanziarie in tempo reale come accade). Per motivi di prestazioni, l'API deve funzionare con matrici primitive, quindi List<Double>
e simili non sono un'opzione.Progettazione API per funzioni che agiscono sugli array
Un tipico caso d'uso può essere un oggetto algoritmo che accetta due matrici di input e restituisce un array di output che contiene un risultato calcolato dai due input.
mi piacerebbe stabilire convenzioni coerenti per come i parametri di matrice sono utilizzati nella API, in particolare:
- Devo includere un offset con tutte le funzioni in modo gli utenti possono agire su parti di un array più grande es.
someFunction(double[] input, int inputOffset, int length)
- Se una funzione richiede sia i parametri di ingresso che di uscita, l'ingresso o l'uscita dovrebbe essere il primo nell'elenco dei parametri?
- Se il chiamante assegna un array di output e lo passa come parametro (che potrebbe potenzialmente essere riutilizzato), o la funzione dovrebbe creare e restituire un array di output ogni volta che viene chiamato?
Gli obiettivi sono di raggiungere un equilibrio di efficienza, semplicità per gli utenti API e coerenza sia all'interno dell'API che con convenzioni consolidate.
Chiaramente ci sono molte opzioni, quindi qual è il miglior design generale dell'API?
Penso che stia scrivendo in Java, quindi il commento "in pila" non ha senso in quel contesto. – user949300
No, HotSpot alloca piccoli oggetti che non sfuggono nello stack. –
Ma poiché questi array vengono restituiti come risultati, sfuggono sicuramente. – user949300