W niedawnym artykule CACM [1] autorzy przedstawiają implementację funkcji etapowych . Używają tego terminu, jakby był dobrze znany, i żadne z odniesień nie wygląda jak oczywiste wprowadzenie.
Podają krótkie wyjaśnienie (zmieniono moje wyróżnienie i numer referencyjny; w oryginale jest 22)
W kontekście generowania programu, programowanie wieloetapowe (MSP, w skrócie inscenizacja), jak ustalili Taha i Sheard [2], pozwala programistom na wyraźne opóźnienie oceny wyrażenia programu na późniejszy etap (tym samym inscenizację wyrażenia). Obecny etap skutecznie działa jako generator kodu, który tworzy (i ewentualnie wykonuje) program następnego etapu.
Jednak Taha i Sheard piszą (moje podkreślenie):
Program wieloetapowy to taki, który obejmuje generowanie, kompilację i wykonywanie kodu, wszystko w tym samym procesie. Języki wieloetapowe wyrażają programy wieloetapowe. Programowanie etapowe, a co za tym idzie programowanie wieloetapowe, zaspokaja potrzebę rozwiązań ogólnego zastosowania, które nie przynoszą kosztów interpretacyjnych w czasie wykonywania.
Następnie przechodzą do kilku odniesień do starszych prac, które rzekomo pokazują, że inscenizacja jest skuteczna, co sugeruje, że koncepcja jest jeszcze starsza. Nie podają odniesienia do samego terminu.
Te stwierdzenia wydają się ortogonalne, jeśli nie sprzeczne; może to, co piszą Rompf i Odersky, to zastosowanie tego, co proponują Taha i Sheard, ale może to inna perspektywa na to samo. Wydaje się, że zgadzają się, że ważną kwestią jest to, że programy (re) zapisują części siebie w czasie wykonywania, ale nie wiem, czy jest to niezbędna i / lub wystarczająca zdolność.
Więc, co jest inscenizacja odpowiednio są interpretacje inscenizacja w tym kontekście? Skąd pochodzi ten termin?
- Lightweight Modular Staging: Pragmatyczne podejście do generowania kodu wykonawczego i skompilowanych DSL przez T. Rompfa i M. Odersky'ego (2012)
- MetaML i programowanie wieloetapowe z wyraźnymi adnotacjami W. Taha i T. Sheard (2000)
@generated function
s: julia.readthedocs.org/en/latest/manual/metaprogramming/…