In SICStus Prolog, esiste un hook per l'espansione di un obiettivo: goal_expansion/6
che viene chiamato sia in fase di compilazione che in fase di esecuzione durante il metacalling. Queste chiamate comportano un certo sovraccarico di runtime che rallenta il metacalling. Lo scopo della mia espansione è solo l'ottimizzazione. Quindi semanticamente gli obiettivi e gli obiettivi espansi sono equivalenti.Restringere goal_expansion/6 per compilare solo il tempo
Come disabilitare tali chiamate in fase di esecuzione?
(Sembra che dovrei abolire goal_expansion/6
che sembra un po 'grossolano per me. Sarebbe anche ostacolare lightweight recompilation).
Mi piacerebbe anche sostenere che l'ottimizzazione è l'unico uso legale dell'espansione * obiettivo *. Ciò implicherebbe che è sempre facoltativo e probabilmente non dovrebbe essere fatto automaticamente per metacalls e forse anche per affermazioni. – jschimpf
@jschimpf: (solo speculazione) Forse altri usi implicano un trattamento speciale di meta-argomenti o cose di tipo macro. Non che io sia a conoscenza di tale uso. Tipo: aggiunta di informazioni di debug. – false