Questa domanda è basata su una discussione (ora cancellata) in risposta a this question. È più sulla terminologia che sulla semantica della programmazione reale.Quando si verifica l'istanza generica (ad esempio, che cosa significa la parola)?
Che cos'è esattamente "istanziazione" generica? Si verifica in fase di compilazione o in fase di esecuzione?
Mi riferirò allo standard latest draft dello standard Ada 2012.
Il significato del termine generico_instantiation è chiaro; si tratta di un costrutto sintattico, qualcosa come
package Inst is new Generic_Package(This => That);
La mia domanda riguarda la "instantiate" verbo.
Ho sempre pensato all'istanziazione come a qualcosa che si verifica in fase di compilazione. È l'espansione di un modello generico e si verifica quando il compilatore incontra uno generico_instantiation in un'unità di compilazione.
Ma altre fonti si riferiscono a "istanziazione" che si svolge, almeno facoltativamente, in fase di esecuzione.
This Wikipedia article dice:
Per un'istanza di un'unità generica, il programmatore passa effettivi parametri per ogni formale. L'istanza generica si comporta quindi solo come come qualsiasi altra unità. È possibile istanziare unità generiche al tempo di esecuzione , ad esempio all'interno di un ciclo.
che sembra implicare che l'istanziazione può avvenire sia in fase di compilazione che in fase di esecuzione. Penso che questo si riferisca all'elaborazione dello generic_instantiation, che si verifica in fase di esecuzione - ma poi, tutte le elaborazioni avvengono in fase di esecuzione, sì?
Ho trovato sorprendentemente difficile ottenere una risposta definitiva dall'Ada RM. Non vi è alcuna voce nel glossario (allegato N) per "istanziazione" o "istanziazione".
Il più vicino ho trovato è stato questa dichiarazione a 12.2 (Organismi generici) il paragrafo 2, in "Semantica dinamici":
L'elaborazione di un corpo generico non ha altro effetto che di stabilire che il generico l'unità può da allora in poi essere istanziata senza fallire l'Elaboration_Check.
che indirettamente implica che esemplificazione è un evento di run-time.
Il verbo "istanziare" fa correttamente riferimento a un evento in fase di compilazione (espandendo un modello generico)? Per un evento run-time (elaborazione di un generic_instantiation)? Se quest'ultimo, come chiamiamo il primo? L'Ada RM è chiara come deve essere su questo punto?
Mi sembra, basandomi solo sull'inglese, l'istanziazione significa la creazione di un'istanza, che suona sicuramente come il tempo di esecuzione. –
@DonRoby: Ah, ma cos'è una "istanza"? Se un'istanza è il * codice * che risulta dall'espansione del modello, allora è in fase di compilazione. –
@DonRoby: Un'analogia allentata: l'espansione della macro C avviene sicuramente in fase di compilazione, non in fase di esecuzione. I generici di Ada ovviamente non sono la stessa cosa, ma si applicano alcuni degli stessi principi. –