Skip to content

Enable AOT and direct linking #28

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

Closed
wants to merge 4 commits into from
Closed

Enable AOT and direct linking #28

wants to merge 4 commits into from

Conversation

jeaye
Copy link
Contributor

@jeaye jeaye commented Apr 26, 2017

No description provided.

@jeaye
Copy link
Contributor Author

jeaye commented Apr 26, 2017

I'm thinking the travis build has hit that deadlock you mentioned.

@ztellman
Copy link
Collaborator

I definitely don't want Clojure as a permanent dependency of this project, that can lead to problems down the road. Can you expand on what this enables?

@ztellman
Copy link
Collaborator

And yes, there's some problem with the tests I need to track down, unrelated to your changes.

@jeaye
Copy link
Contributor Author

jeaye commented Apr 26, 2017

AOT and direct linking are both performance improvements.

AOT

Compiles all namespaces ahead-of-time, into bytecode, rather than just packaging the source into a jar. This can have load time and run-time performance effects. Clojure was added as a dependency, since the uberjar will contain Clojure; I've moved the dependency to only the uberjar profile.

Direct linking

By default, each fn call in Clojure looks up the var first, then performs the call. With direct linking, the var lookup is removed; the cost of this is the lack of rebinding vars. In the REPL, we do this by just redefining them, or manually altering their roots. In production, this is rarely needed. For this library, I see no reason why it should be there.

It's curious that you wouldn't want Clojure as a dependency for a Clojure project though. What's your reasoning?

@ztellman
Copy link
Collaborator

I understand what both of them are, I just haven't heard of them being used at the library level before. Typically this is something you'd configure for your top-level application. Likewise, I don't want to put the Clojure version in there because that's something that should be defined at the application level.

@jeaye
Copy link
Contributor Author

jeaye commented Apr 26, 2017

Okie dokie, let's close this guy then. Thanks! I'm looking forward to the Clojars deploy. :)

@jeaye jeaye closed this Apr 26, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants