2016-10-26 13 views
12

This Witryna przechodzi przez sześć typów rozszerzeń składni w Rust od wersji 1.0. Decorator, Modifier, MultiModifier, NormalTT, IdentTT i MacroRulesTT.Jakie rodzaje wtyczek/rozszerzeń składni Rust można zapisać i gdzie są one dokumentowane?

Niestety, wszystkie linki do dokumentacji tych elementów (i powiązanych rozszerzeń kompilatora) wydają się być nieważne. Rzeczywiście, nawet ręczne przeszukiwanie dokumentacji Rust dla SyntaxExtension lub nawet modułu syntax niczego nie daje. To still wydaje się znajdować w głównym repozytorium rdzy w gałęzi głównej, więc nie chodzi o to, by być gdzieś w przedszkolu.

Warto zauważyć, że strona wspomina, że ​​w pewnym momencie „wkrótce” (od 1.0) MultiModifier i Modifier mogą zostać połączone, ale z powodu zanikającego dokumentacji nie mogę potwierdzić to jako bieżącego Nightly.

Tylko dokumentacja podstawowych podpowiedzi i "makr proceduralnych", które wydają się mieć dość ograniczony zakres.

Tak więc, czy w tej chwili istnieje 6 typów rozszerzeń składni? Czy ich dokumentacja była aktualizowana w nowej lokalizacji? Czy każdy z nich nadal wykonuje mniej więcej taką samą funkcję, jak w przypadku wersji 1.0?

+1

Z tego, co wiem, żadna z rzeczy, które wymieniłeś, już nie istnieje, przynajmniej nie w tej formie. Najlepiej jest napisać wtyczkę kompilatora/makro proceduralne. Umożliwiają one wykonanie dowolnego kodu w czasie kompilacji, więc nie nazwałbym ich ograniczeniem zakresu. Dokumentacja wydaje się teraz dość skromna, ale warto przyjrzeć się niektórym projektom, które je wykorzystują, takim jak [doctopt.rs] (https://github.com/docopt/docopt.rs) i [Diesel] (https://github.com/diesel-rs/diesel/tree/master/diesel_codegen) – chad

+1

Makra proceduralne są obecnie przepisywane (https://github.com/rust-lang/rust/issues/38356), więc nie jestem pewien, jak wiele z tego pytania będzie miało sens. –

Odpowiedz

0

Ta strona jest dość nieaktualna - pochodzi sprzed ustabilizowania Rust. Jedynymi "rozszerzeniami wtyczek/składni" obsługiwanymi w Rust 1.20 są makra na podstawie przykładów i niestandardowych wywodów, z których oba są w The Rust Programming Language. Niestabilna rdza ma również custom attributes i procedural macros, ale obie te zmiany prawdopodobnie się zmienią, zanim się ustabilizują.

A rough mapowanie typów rozszerzeń wymienionych w tym miejscu do bieżących typów makr byłoby coś takiego:

  • Dekorator -> Niestandardowe Derive
  • modyfikator, MultiModifier -> Atrybut niestandardowy
  • NormalTT -> Makra proceduralne
  • IdentTT -> Makra proceduralne (nie do końca rozumiem, czym one są, więc nie jestem pewien)
  • MacroRulesTT -> Makra według przykładu (aka Makra deklaratywne)

Przykłady makr przykładem są łatwe do znalezienia (np std i log paka szeroko korzystają z nich). Skrzynia serde_derive jest prawdopodobnie najlepszym przykładem użycia niestandardowego wywodu.

Powiązane problemy