W SICStus Prolog istnieje haczyk służący do rozszerzenia celu: goal_expansion/6
, który jest nazywany zarówno podczas kompilacji, jak i podczas wykonywania metaallingu. Te połączenia powodują pewien napływ runtime, który spowalnia metaalling. Celem mojego rozszerzenia jest tylko optymalizacja. Tak semantycznie cele i rozszerzone cele są równoważne.Ograniczanie opcji goal_expansion/6 do kompilowania tylko czasu
Jak mogę wyłączyć takie połączenia w czasie wykonywania?
(Wydaje się, że musiałbym znieść goal_expansion/6
, co dla mnie trochę mnie przeraża, a także utrudniłoby działanie lightweight recompilation).
Chciałbym nawet poprzeć pogląd, że optymalizacja jest jedynym legalnym zastosowaniem rozszerzenia * celu *. Oznaczałoby to, że jest to zawsze opcjonalne i prawdopodobnie nie powinno być wykonywane automatycznie dla metacalls, a może nawet zapewnia. – jschimpf
@jschimpf: (tylko spekulacja) Być może inne zastosowania wiążą się ze specjalną obsługą meta-argumentów lub rzeczy makro. Nie, żebym wiedział o takim użyciu. Podobnie jak: dodawanie informacji debugowania. – false