Jak modelowałbyś makra proceduralne Rusta?
W języku programowania Rust można napisać funkcję rozszerzającą kompilator, która działa na abstrakcyjnym drzewie składni, skutecznie modyfikując kod źródłowy, zanim zostanie on przekształcony w instrukcje maszynowe. Innymi słowy, funkcja makra ma podpis
Abstract Syntax Tree -> Abstract Syntax Tree
Czy można je traktować jako funkcje wyższego rzędu? Zwykle funkcje wyższego rzędu używają kompozycji funkcji do tworzenia swoich danych wyjściowych, a nie manipulacji kodem źródłowym.
Odpowiedzi
Nie uważałbym tego za funkcję wyższego rzędu. Funkcja wyższego rzędu przyjmuje funkcję jako dane wejściowe lub zwraca funkcję jako wyjście. Z drugiej strony, wydaje mi się, że twoje rozszerzenie kompilatora akceptuje dane jako dane wejściowe (abstrakcyjne drzewo składni) i generuje dane na swoich danych wyjściowych.
Przypuszczam, że można by uznać AST za specyfikację funkcji, ale wydaje mi się to naciągane.
Nie jestem pewien, czy nazwa, jaką mu nadasz, ma duże znaczenie z punktu widzenia informatyki. Róża pod jakąkolwiek inną nazwą i tak dalej.