Ho visto i metadati ^:static
su alcune funzioni nel codice sorgente di Clojure core.clj
, ad es. nella definizione di seq?
:Cosa fa "^: static" in 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)))
cosa esattamente fa questo metadati fare, e perché è usato così spesso durante core.clj
?
Quando si dice * completamente automatico *, si intende che nelle versioni recenti del compilatore clojure produce due gemelli ed esegue tale ottimizzazione * per ogni funzione * non contrassegnata con^statico o no? –
quando le annotazioni di tipo fanno sì che il compilatore determini che una funzione può produrre qualcosa di diverso da Object, quindi verranno generate le altre forme. –