[ANN] ExproniconLite.jl - the MLStyle generated dependency free package for low latency

I’m excited to announce a new package ExproniconLite that is generated by the Expronicon package I announced previously:

unfortunately, depending on MLStyle itself will cause a small loading latency which can be unpleasant for certain use cases (such as my CLI generator Comonicon.jl), since MLStyle has the promise that it will generate dependency-free code for you, we managed to generate a dependency-free version of Expronicon:

it has the exact same API and version number as Expronicon, thus after you develop your metaprogramming code using Expronicon if you would like to reduce the loading latency and dependencies, you can simply switch the using Expronicon statement to using ExproniconLite. The rest should just work.

where ExproniconLite has no dependency on any other Julia packages. To see the difference

julia> @time using Expronicon
  0.113103 seconds (238.17 k allocations: 16.753 MiB, 2.85% compilation time)

julia> @time using ExproniconLite
  0.006301 seconds (20.55 k allocations: 2.176 MiB, 27.85% compilation time)

the only drop back currently is ExproniconLite doesn’t support Julia version before 1.3, since the printing of Expr was not parsable before 1.3, where Expronicon is fully compatible with all Julia versions. But I’m thinking to most people would drop 1.0 support after the next LTS is out, so this is probably fine for most people, as e.g SciML/DiffEq.jl already dropped the support of 1.0 and only supports 1.3+


along with this announcement, Expronicon.jl now contains a set of tools to allow expanding certain macro that has the promise of generating dependency-free code, which is the expand_project function, a glance of Expronicon's own “bootstrap” script:


The next thing is we are planning to write GitHub - thautwarm/MLStyle.jl: Julia functional programming infrastructures and metaprogramming facilities using ExproniconLite and the expand_project tool to “bootstrap” (note, to be precise, it’s not exactly the bootstrap process of a programming language compiler) a new version of MLStyle so that we can use the nice high-level programming feature provided by MLStyle for the development of MLStyle itself.

PS. I think @Mason asked about expanding MLStyle.@match at some point in Zulip, you might want to use this tool chain for that.

5 Likes