Czy istnieje sposób oznaczenia symbolu jako przestarzały w Clojure?Przestarzałe symbole w Clojure
Mogę użyć czegoś takiego z Lein, który działa dobrze.
https://github.com/technomancy/leiningen/blob/1.x/src/leiningen/core.clj#L13
Ale to emituje tylko jego ostrzeżenie, gdy funkcja jest wywoływana. Naprawdę chciałbym, aby kompilator wybrał to w czasie kompilacji kodu, a nie po jego wywołaniu.
Oczywiście, mogę tylko nie określenie symbolu, który kompilator by następnie odebrać , ale to pozbawia mnie o zdolność do dostarczenia wszelkich informacji, takich jak, dlaczego, lub gdy symbol została zaniechana .
Wszystko to dotyczy DSL, gdzie deprecjacja i starzenie się terminów ma nastąpić w rozsądnym tempie.
Zamiast przedefiniować funkcję jako inną funkcję, zdefiniuj ją ponownie jako makro, które emituje ostrzeżenie podczas rozszerzania w czasie kompilacji. – Barmar
@Barmar Co uniemożliwia użycie jako argumentu lub dosłownie. Okropny pomysł. Zamiast tego, po prostu wymuś ostrzeżenie podczas rozszerzania defdeprobowanego makra. (Co oczywiście oznacza, że ostrzeżenie pojawia się tylko podczas kompilacji biblioteki, co może nie być tym, czego potrzebujesz). – Cubic
@cubic Nie, to też jest złe. Chodzi o to, aby ostrzec, gdy aplikacja klienta przestaje być przestarzałą funkcją, a nie kiedy biblioteka jest kompilowana. Myślę, że uzyskanie tego, co naprawdę potrzebne, wymaga szczególnego wsparcia w kompilatorze Clojure. – Barmar