Nome di diversi pattern di recitazione sui dati nelle librerie.

0

Contribuisco a un paio di software open source e ho notato due tipi di pattern quando le classi agiscono sui dati. Sono interessato al nome di questi modelli.

Il primo è qualcosa che va così:

class A{
public:
    void compute_something(int* var){
        *var = 2;
    }
};
int main() {
    A a;
    int result;
    a.compute_something(&result);
}

Fondamentalmente, la variabile è inizializzata al di fuori della classe e quindi passata nel metodo di classe per essere "compilata" con un valore.

Il secondo modello è il solito:

class A{
public:
    int compute_something(){
        return 2;
    }
};
int main() {
    A a;
    int result = a.compute_something();
}

Qui, il tipo di ritorno del metodo viene utilizzato per restituire il valore e il riempimento della variabile viene effettuato al di fuori della classe.

Ora c'è un nome per questi tipi di modelli? E c'è un modello preferito rispetto all'altro?

    
posta AspiringMat 24.03.2018 - 08:44
fonte

1 risposta

1

Sì, la versione breve è che i due modelli nella domanda sono "pass per riferimento" e "passano per valore". Lingue diverse hanno diversi livelli di supporto e differenti idiomi e preferenze, per questi e altri modelli di gestione dei dati. L'allocazione della memoria basata su stack o heap è un dettaglio relativo all'implementazione.

La risposta più profonda è che esiste una sfida fondamentale per i programmatori in merito alla proprietà della memoria e al ciclo di vita della gestione della memoria. Passare di valore è facile ma limitante e costoso. Passare per riferimento è magico ma può diventare estremamente disordinato molto rapidamente. Innumerevoli bug costosi, inclusa la maggior parte dei più gravi bug di sicurezza, derivano in ultima analisi da errori per gestire correttamente la proprietà.

Di lingue popolari, Rust è andato più lontano nel descrivere un set di semantica e ha fornito strumenti espliciti al programmatore per collaborare con il compilatore per assicurarsi che la proprietà e il ciclo di vita di particolari variabili siano gestiti correttamente. Non si passa semplicemente un puntatore, si consente ad altri codici di prendere in prestito una variabile, la cui proprietà viene tracciata dal compilatore. Il trattamento del problema da parte del libro di Rust è molto buono:

link

    
risposta data 26.03.2018 - 17:43
fonte

Leggi altre domande sui tag