He visto los metadatos ^:static
en bastantes funciones en el código fuente Clojure core.clj
, p. en la definición de seq?
:¿Qué hace "^: static" en 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)))
Lo que precisamente hace este metadatos, y por qué se utiliza tan frecuentemente a lo largo core.clj
?
Cuando dice * completamente automático *, ¿quiere decir que en versiones recientes de compilador de clojure produce gemelos y realiza dicha optimización * para cada función * sin importar si está estática o no estática? –
cuando las anotaciones de tipo hacen que el compilador determine que una función puede producir algo distinto de Object, entonces se generarán las otras formas. –