-
-
Notifications
You must be signed in to change notification settings - Fork 84
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Optimization epic #98
Comments
Idea: if you're likely to call an (immutable) function more than once with a known arity, unbox it until you know its calling convention. If possible, then use Applicable to things like: Not sure if you could go even further and extract the raw function pointers, and also manually pass the context of closures. I'm not sure if that would force you to use Similar things could be done to avoid (if (= 2 (count opaque))
(select-keys (nth opaque 0) (nth opaque 1))
(throw (ex-info "wrong arguments to select-keys" {})) |
It's impossible to get the type of an unknown object, which could be anything, without a visit. We cannot store that type outside of the visitor. This is more of a physics problem with static type systems and type erasure. The only way to do this optimization is to know the type ahead of time. Now, once we have seamless interop, and then we add type tracking for known values, we can actually know the full type of a local function and generate a call to |
General
RT.get
,Numbers.multiply
, etcFunction attribute tracking
Vars
:jank/static? true
meta, deref + store it in the module's global ctor and never deref it again (superseded by direct linking)Dead code elimination
Boxing
Startup
Form rewriting
get-in
)str
usage (a la stringer)IR-specific
this
into closure context for named recursionAOT-only
Runtime
References
The text was updated successfully, but these errors were encountered: