15

Stavo cercando di capire la differenza tra l'associazione anticipata e tardiva, e nel processo ho capito che il concetto di legame è per me nebuloso. I penso Capisco che si riferisce al modo in cui i dati come una parola di memoria sono collegati a caratteristiche di tipo-come-un-set-di-linguaggio, ma non sono sicuro che questi siano i concetti giusti. Inoltre, in che modo comprendere tutto questo aiuta profondamente le persone a diventare programmatori migliori?Domanda per principianti: che cosa è vincolante?

Nota: questa domanda non è "ciò che è in ritardo contro l'associazione anticipata" o "quali sono i compromessi tra i 2". Quelli già esistono qui.

Grazie,

JDelage

+0

Avrebbe anche senso notare ciò che è vincolante rispetto a ciò che è il collegamento. Per esempio. Ada usa passaggi separati per quelli, mentre C li fonde/li confonde. – ndim

risposta

1

In generale, il bind associa un nome con un valore. Il valore non deve essere dati ma può essere qualsiasi cosa che abbia un nome, ad es. una funzione o una classe.

Per quanto riguarda il compromesso:

  • L'associazione anticipata rende il valore disponibile in precedenza. Pertanto, ad esempio, i compilatori possono applicare l'ottimizzazione in base al valore noto, ad esempio la valutazione delle espressioni costanti. Ciò potrebbe comportare prestazioni migliori e non richiede alcun supporto di runtime per il recupero del valore.

  • L'associazione tardiva richiede il valore più tardi, quindi offre una maggiore flessibilità. Diventa più facile cambiare parti del codice o riconfigurare un sistema.

La tendenza generale è verso un successivo binding, perché con processori più veloci e migliori tecniche (ad esempio compilazione JIT) diventa fattibile più spesso.

4

Nel caso più semplice, vincolante è l'associazione di un simbolo all'interno di un programma con un indirizzo nella memoria.

Ad esempio: una chiamata di funzione in C. Quando si si dichiara una funzione,, il compilatore registra il nome della funzione e la posizione del relativo codice all'interno del file oggetto. Quando si chiama una funzione da un file compilato separatamente,, il compilatore registra un riferimento a tale nome nel punto in cui si verifica la chiamata. Il linker è responsabile del binding questi due riferimenti, in modo che la chiamata faccia riferimento alla posizione di memoria corretta.

2

"Binding" significa fondamentalmente "questa funzione/nome proprietà corrisponde a questo bit di codice".

1

Se si sta parlando di più su associazione dati, quindi direi che la definizione utilizzata da Microsoft nel loro Data Binding Overview funziona abbastanza bene:

"Associazione dei dati è il processo che stabilisce una connessione tra l'applicazione interfaccia utente e la logica di business. Se il legame ha le impostazioni corrette ei dati garantisce un adeguato sistema notifiche, poi, quando i dati cambia il suo valore, gli elementi che sono legati ai dati riflettono i cambiamenti automatica alleato. L'associazione dei dati può anche significa che se una rappresentazione esterna dei dati in un elemento cambia, , i dati sottostanti possono essere aggiornati automaticamente per riflettere la modifica . Ad esempio, se l'utente modifica il valore in un elemento TextBox, il sottostante valore dei dati viene automaticamente aggiornati per riflettere questo cambiamento."

In altre parole, è un modo di ottenere i dati da un dati- sorgente (come un database o un file XML) e l'applicazione di tali dati a un'interfaccia oa un elemento di visualizzazione. Ad esempio, un modulo potrebbe avere un elenco a discesa di valori che sono memorizzati in una tabella all'interno di un database. processo di 'legare' i valori dal database alla lista L'associazione dati unidirezionale è di solito 'sola lettura' ma l'associazione dati bidirezionale consente all'utente di aggiornare i valori alla sorgente dati sottostante

2

Nel contesto dei compilatori, l'associazione è la fase in cui i riferimenti di indirizzo vengono modificati in effettivi indirizzi assoluti.

Quando il programma è compilato, l'indirizzo di ciascun simbolo (variabile, funzione) viene memorizzato nella tabella dei simboli, ad esempio come offset relativo dall'inizio del modulo dell'oggetto, insieme al nome del simbolo. Il nome del simbolo è necessario poiché i simboli possono essere chiamati da un altro modulo oggetto.

Quando il programma è collegato, i moduli oggetto vengono combinati in un singolo file di programma ei nomi dei simboli non sono più necessari. Se il programma è collegato a un indirizzo assoluto noto, tutti i riferimenti di indirizzo possono essere associati a indirizzi in indirizzi assoluti già in questa fase.

Tuttavia, in workstation come PC: s, il programma può essere caricato su qualsiasi indirizzo, quindi l'indirizzo non è noto al momento del collegamento. Pertanto, ulteriori informazioni sulla ricollocazione vengono memorizzate nel file di programma in modo che il caricatore possa associare gli indirizzi al momento del caricamento.

Il collegamento viene eseguito al momento del caricamento utilizzando le informazioni di trasferimento. Quando l'indirizzo in cui verrà eseguito il programma è noto, il caricatore sostituisce gli indirizzi relativi con gli indirizzi assoluti utilizzando le informazioni di trasferimento che indicano dove devono essere eseguite le modifiche nel codice.

Per oggetti/variabili dinamici, il binding può essere eseguito in runtime. (Penso che questo sia quello che viene solitamente chiamato late binding.)

Di solito non è necessario preoccuparsi troppo del binding, almeno non quando si utilizza il binding anticipato. (Tuttavia, il binding in fase di esecuzione può avere un impatto negativo sulle prestazioni e sulla sicurezza.)

Problemi correlati