[ANN] SnoopCompile 1.2 - Package Precompilation

I am happy to announce that SnoopCompile 1.2 now has a GitHub Actions Bot, and it introduces @snoopiBot and @snoopiBench macros.

You can use this feature to automatically create precompilation signatures for your package, and update those in case of changes in the package. This is similar to a Precompilation CI for a package.

Full documentation is available here:
https://timholy.github.io/SnoopCompile.jl/stable/bot/

Using this feature of SnoopCompile, I could improve infer time of different packages during their usage:

Full examples are available here: MatLang or Juno or Atom

@snoopiBot and @snoopiBench macros use snoopi by @tim.holy in their backend.

13 Likes

This is fantastic! Thanks a lot for working on this.

Looking at the PR https://github.com/aminya/Juno.jl/pull/3 generated by the bot, it looks like it works by checking in the precompile file. How does it handle platform-dependent precompile statements (e.g., different OSes and different julia versions)? Also, did you consider distributing the precompile file via the artifact system? Deploying it outside the git repository may be better if you want to support many platforms.

2 Likes

It automatically handles different Julia versions. Things like the following are covered:

if VERSION < v"1.3.0"
    foo(x, y) = 1
else
    foo(x) = 1
end

However, It doesn’t automatically handle OS-dependent signatures yet.

You can pass those functions in blacklist:

@snoopiBot BotConfig("packageName", blacklist = ["OSDependentFunction"])

Precompile signatures are like source files and they are shipped with each version. To support different OS version, we can use the same approach we took for different Julia versions. There is no plan to use artifact system.

1 Like