Widziałem metadane ^:static
dla kilku funkcji w kodzie źródłowym Clojure core.clj
, np. w definicji seq?
:Co robi "^: static" w Clojure?
(def
^{:arglists '([x])
:doc "Return true if x implements ISeq"
:added "1.0"
:static true}
seq? (fn ^:static seq? [x] (instance? clojure.lang.ISeq x)))
Co dokładnie ma to metadane zrobić i dlaczego kiedyś tak często w ciągu core.clj
?
Kiedy mówisz * w pełni zautomatyzowany *, masz na myśli to, że w najnowszych wersjach kompilatora clojure tworzy bliźnięta i przeprowadza taką optymalizację * dla każdej funkcji * bez względu na to, czy jest^statyczne czy nie? –
, gdy adnotacje typu powodują, że kompilator określa, że dana funkcja może wytwarzać coś innego niż obiekt, wtedy inne formularze będą generowane. –