Common Lisp style: multiple packages in same repo
Daniel Pezely
daniel at pezely.com
Mon Aug 27 02:56:52 UTC 2018
On 2018-08-25 06:35 PM, Faré wrote:
> [...] keep your
> code well-organized: each file by construction can only refer to
> symbols from files that it depends on, you have think of your
> dependencies clearly. [...]
I generally strive for a similar discipline but on the package level
rather than granularity of individual files.
An observation supporting these approaches: Use of fully qualified
symbol names makes it easier for other people to navigate and reason
able unfamiliar code. Package nicknames in CL help with otherwise
cumbersome names, so there's little reason not to do this in my experience.
> As for LIL, it also uses packages for punning: there are distinct but
> related symbols stateful:insert pure:insert classy:insert and
> posh:insert for inserting a key / value pair in a map in all
> combinations of stateful interface-passing-style, pure
> interface-passing-style, classic imperative object oriented style, and
> purely functional object oriented style — with macros that can
> automatically wrap one into the others. [...]
Yes, for me, something similar justified two systems, two packages in
one repo. The higher level package shadows some CL names like OPEN for
capitalizing upon one's existing knowledge of CL:OPEN's parameters and
behaviours.
Understandably, some people avoid shadowing of CL functions, so this
contributed to splitting into two packages-- beyond higher versus lower
level interfaces.
Faré, you bring up many interesting points for possible further
discussion, and thank you for mentioning LIL. I had forgotten about LIL
long since glancing at ILC'12 proceedings all those years ago. I'll
definitely explore techniques you mentioned for other packages I intend
to release in future.
Regarding questions from the original post, the Common Lisp community at
large seems far from attaining a quorum, let alone consensus.
Perhaps this presents an opportunity for maintainers of Quicklisp
(perhaps in collaboration with Quickdocs) to introduce a style guide for
making their lives easier. Maybe after gaining more experience with
Rust's (Cargo's) workspaces [1] for synchronizing versions across a
family of subsystems, I'll propose something to Quicklisp maintainers.
I'm sure Rust didn't invent that mechanism, so if others possess that
knowledge already, please suggest such a model!
[1]
https://github.com/rust-lang/rfcs/blob/master/text/1525-cargo-workspace.md
Thanks,
-Daniel
More information about the pro
mailing list