Jak modelowałbyś makra proceduralne Rusta?

Oct 21 2020

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

2 D.W. Oct 21 2020 at 12:59

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.